blob: c93acfe1f7cd1ee0d5c299244d811181a11c62fd [file] [log] [blame]
Chris Masoned0ceb8c2011-06-02 10:05:39 -07001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Chris Masone8fe2c7e2011-06-09 15:51:19 -07005#include "shill/dbus_adaptor.h"
Chris Masoned0ceb8c2011-06-02 10:05:39 -07006
Chris Masone8fe2c7e2011-06-09 15:51:19 -07007#include <map>
Chris Masoned0ceb8c2011-06-02 10:05:39 -07008#include <string>
Chris Masone8fe2c7e2011-06-09 15:51:19 -07009#include <vector>
Chris Masoned0ceb8c2011-06-02 10:05:39 -070010
11#include <dbus-c++/dbus.h>
12#include <gtest/gtest.h>
13#include <gmock/gmock.h>
14
mukesh agrawal7a4e4002011-09-06 11:26:05 -070015#include "shill/key_value_store.h"
Chris Masone8fe2c7e2011-06-09 15:51:19 -070016#include "shill/manager.h"
17#include "shill/mock_control.h"
18#include "shill/mock_device.h"
Chris Masone7aa5f902011-07-11 11:13:35 -070019#include "shill/mock_glib.h"
20#include "shill/mock_profile.h"
Chris Masone3bd3c8c2011-06-13 08:20:26 -070021#include "shill/mock_property_store.h"
Chris Masone8fe2c7e2011-06-09 15:51:19 -070022#include "shill/mock_service.h"
Chris Masone3bd3c8c2011-06-13 08:20:26 -070023#include "shill/property_store_unittest.h"
Chris Masone8fe2c7e2011-06-09 15:51:19 -070024#include "shill/shill_event.h"
25
26using std::map;
27using std::string;
28using std::vector;
Chris Masoned0ceb8c2011-06-02 10:05:39 -070029using ::testing::_;
Chris Masoned0ceb8c2011-06-02 10:05:39 -070030using ::testing::Return;
Chris Masone3bd3c8c2011-06-13 08:20:26 -070031using ::testing::StrEq;
32using ::testing::Test;
Chris Masoned0ceb8c2011-06-02 10:05:39 -070033
Chris Masone8fe2c7e2011-06-09 15:51:19 -070034namespace shill {
35
Chris Masone3bd3c8c2011-06-13 08:20:26 -070036class DBusAdaptorTest : public PropertyStoreTest {
Chris Masoned0ceb8c2011-06-02 10:05:39 -070037 public:
Chris Masone8fe2c7e2011-06-09 15:51:19 -070038 DBusAdaptorTest()
Chris Masoneb925cc82011-06-22 15:39:57 -070039 : ex_bool_(true),
40 ex_byte_(0xff),
41 ex_uint16_(65535),
42 ex_uint32_(2000000),
43 ex_int16_(-32768),
44 ex_int32_(-65536),
mukesh agrawal32399322011-09-01 10:53:43 -070045 ex_path_("/"),
Chris Masoneb925cc82011-06-22 15:39:57 -070046 ex_string_("something"),
47 ex_strings_(1, ex_string_),
48 bool_v_(DBusAdaptor::BoolToVariant(ex_bool_)),
49 byte_v_(DBusAdaptor::ByteToVariant(ex_byte_)),
Chris Masoneb925cc82011-06-22 15:39:57 -070050 int16_v_(DBusAdaptor::Int16ToVariant(ex_int16_)),
51 int32_v_(DBusAdaptor::Int32ToVariant(ex_int32_)),
mukesh agrawal32399322011-09-01 10:53:43 -070052 path_v_(DBusAdaptor::PathToVariant(ex_path_)),
Chris Masoneb925cc82011-06-22 15:39:57 -070053 string_v_(DBusAdaptor::StringToVariant(ex_string_)),
54 strings_v_(DBusAdaptor::StringsToVariant(ex_strings_)),
mukesh agrawalf60e4062011-05-27 13:13:41 -070055 uint16_v_(DBusAdaptor::Uint16ToVariant(ex_uint16_)),
56 uint32_v_(DBusAdaptor::Uint32ToVariant(ex_uint32_)),
Chris Masone2176a882011-09-14 22:29:15 -070057 device_(new MockDevice(control_interface(),
58 dispatcher(),
Chris Masone9d779932011-08-25 16:33:41 -070059 manager(),
Chris Masone8fe2c7e2011-06-09 15:51:19 -070060 "mock",
Chris Masone626719f2011-08-18 16:58:48 -070061 "addr0",
Chris Masone8fe2c7e2011-06-09 15:51:19 -070062 0)),
Chris Masone2176a882011-09-14 22:29:15 -070063 service_(new MockService(control_interface(),
64 dispatcher(),
Chris Masone9d779932011-08-25 16:33:41 -070065 manager())) {
Chris Masoneb925cc82011-06-22 15:39:57 -070066 ex_stringmap_[ex_string_] = ex_string_;
67 stringmap_v_ = DBusAdaptor::StringmapToVariant(ex_stringmap_);
mukesh agrawal32399322011-09-01 10:53:43 -070068
69 ex_patharray_.push_back(ex_path_);
70 patharray_v_ = DBusAdaptor::PathArrayToVariant(ex_patharray_);
Chris Masone8fe2c7e2011-06-09 15:51:19 -070071 }
72
Chris Masoned0ceb8c2011-06-02 10:05:39 -070073 virtual ~DBusAdaptorTest() {}
Chris Masone8fe2c7e2011-06-09 15:51:19 -070074
Chris Masone8fe2c7e2011-06-09 15:51:19 -070075 protected:
Chris Masoneb925cc82011-06-22 15:39:57 -070076 bool ex_bool_;
77 uint8 ex_byte_;
78 uint16 ex_uint16_;
79 uint32 ex_uint32_;
80 int16 ex_int16_;
81 int32 ex_int32_;
mukesh agrawal32399322011-09-01 10:53:43 -070082 ::DBus::Path ex_path_;
83 vector< ::DBus::Path> ex_patharray_;
Chris Masoneb925cc82011-06-22 15:39:57 -070084 string ex_string_;
85 map<string, string> ex_stringmap_;
86 vector<map<string, string> > ex_stringmaps_;
87 vector<string> ex_strings_;
88
89 ::DBus::Variant bool_v_;
90 ::DBus::Variant byte_v_;
91 ::DBus::Variant int16_v_;
92 ::DBus::Variant int32_v_;
mukesh agrawal32399322011-09-01 10:53:43 -070093 ::DBus::Variant path_v_;
94 ::DBus::Variant patharray_v_;
Chris Masoneb925cc82011-06-22 15:39:57 -070095 ::DBus::Variant string_v_;
96 ::DBus::Variant stringmap_v_;
97 ::DBus::Variant stringmaps_v_;
98 ::DBus::Variant strings_v_;
99 ::DBus::Variant uint16_v_;
100 ::DBus::Variant uint32_v_;
101
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700102 DeviceRefPtr device_;
103 ServiceRefPtr service_;
Chris Masoned0ceb8c2011-06-02 10:05:39 -0700104};
105
106TEST_F(DBusAdaptorTest, Conversions) {
Chris Masoneb925cc82011-06-22 15:39:57 -0700107 EXPECT_EQ(0, PropertyStoreTest::kBoolV.reader().get_bool());
108 EXPECT_EQ(ex_bool_, bool_v_.reader().get_bool());
Chris Masoned0ceb8c2011-06-02 10:05:39 -0700109
Chris Masoneb925cc82011-06-22 15:39:57 -0700110 EXPECT_EQ(0, PropertyStoreTest::kByteV.reader().get_byte());
111 EXPECT_EQ(ex_byte_, byte_v_.reader().get_byte());
Chris Masoned0ceb8c2011-06-02 10:05:39 -0700112
Chris Masoneb925cc82011-06-22 15:39:57 -0700113 EXPECT_EQ(0, PropertyStoreTest::kUint16V.reader().get_uint16());
114 EXPECT_EQ(ex_uint16_, uint16_v_.reader().get_uint16());
Chris Masoned0ceb8c2011-06-02 10:05:39 -0700115
Chris Masoneb925cc82011-06-22 15:39:57 -0700116 EXPECT_EQ(0, PropertyStoreTest::kInt16V.reader().get_int16());
117 EXPECT_EQ(ex_int16_, int16_v_.reader().get_int16());
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700118
Chris Masoneb925cc82011-06-22 15:39:57 -0700119 EXPECT_EQ(0, PropertyStoreTest::kUint32V.reader().get_uint32());
120 EXPECT_EQ(ex_uint32_, uint32_v_.reader().get_uint32());
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700121
Chris Masoneb925cc82011-06-22 15:39:57 -0700122 EXPECT_EQ(0, PropertyStoreTest::kInt32V.reader().get_int32());
123 EXPECT_EQ(ex_int32_, int32_v_.reader().get_int32());
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700124
mukesh agrawal32399322011-09-01 10:53:43 -0700125 EXPECT_EQ(ex_path_, path_v_.reader().get_path());
126
127 EXPECT_EQ(ex_path_, patharray_v_.operator vector< ::DBus::Path>()[0]);
128
Chris Masoneb925cc82011-06-22 15:39:57 -0700129 EXPECT_EQ(string(""), PropertyStoreTest::kStringV.reader().get_string());
130 EXPECT_EQ(ex_string_, string_v_.reader().get_string());
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700131
Chris Masoneb925cc82011-06-22 15:39:57 -0700132 EXPECT_EQ(ex_stringmap_[ex_string_],
133 (stringmap_v_.operator map<string, string>()[ex_string_]));
134 EXPECT_EQ(ex_strings_[0], strings_v_.operator vector<string>()[0]);
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700135}
136
137TEST_F(DBusAdaptorTest, Signatures) {
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700138 EXPECT_TRUE(DBusAdaptor::IsBool(bool_v_.signature()));
139 EXPECT_TRUE(DBusAdaptor::IsByte(byte_v_.signature()));
140 EXPECT_TRUE(DBusAdaptor::IsInt16(int16_v_.signature()));
141 EXPECT_TRUE(DBusAdaptor::IsInt32(int32_v_.signature()));
mukesh agrawal32399322011-09-01 10:53:43 -0700142 EXPECT_TRUE(DBusAdaptor::IsPath(path_v_.signature()));
143 EXPECT_TRUE(DBusAdaptor::IsPathArray(patharray_v_.signature()));
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700144 EXPECT_TRUE(DBusAdaptor::IsString(string_v_.signature()));
145 EXPECT_TRUE(DBusAdaptor::IsStringmap(stringmap_v_.signature()));
146 EXPECT_TRUE(DBusAdaptor::IsStrings(strings_v_.signature()));
147 EXPECT_TRUE(DBusAdaptor::IsUint16(uint16_v_.signature()));
148 EXPECT_TRUE(DBusAdaptor::IsUint32(uint32_v_.signature()));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700149
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700150 EXPECT_FALSE(DBusAdaptor::IsBool(byte_v_.signature()));
151 EXPECT_FALSE(DBusAdaptor::IsStrings(string_v_.signature()));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700152}
153
154TEST_F(DBusAdaptorTest, Dispatch) {
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700155 MockPropertyStore store;
mukesh agrawala903e412011-06-28 17:07:11 -0700156 ::DBus::Error e1, e2, e3, e4, e5, e6, e7, e8, e9, e10;
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700157
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700158 EXPECT_CALL(store, Contains(_)).WillRepeatedly(Return(true));
159 EXPECT_CALL(store, SetBoolProperty("", _, _)).WillOnce(Return(true));
160 EXPECT_CALL(store, SetInt16Property("", _, _)).WillOnce(Return(true));
161 EXPECT_CALL(store, SetInt32Property("", _, _)).WillOnce(Return(true));
162 EXPECT_CALL(store, SetStringProperty("", _, _))
163 .WillOnce(Return(true));
164 EXPECT_CALL(store, SetStringmapProperty("", _, _))
165 .WillOnce(Return(true));
166 EXPECT_CALL(store, SetStringsProperty("", _, _))
167 .WillOnce(Return(true));
168 EXPECT_CALL(store, SetUint8Property("", _, _)).WillOnce(Return(true));
169 EXPECT_CALL(store, SetUint16Property("", _, _)).WillOnce(Return(true));
170 EXPECT_CALL(store, SetUint32Property("", _, _)).WillOnce(Return(true));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700171
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700172 string string_path("/false/path");
173 ::DBus::Path path(string_path);
174 ::DBus::Variant path_v = DBusAdaptor::PathToVariant(path);
175 EXPECT_CALL(store, SetStringProperty("", StrEq(string_path), _))
176 .WillOnce(Return(true));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700177
Chris Masonea8a2c252011-06-27 22:16:30 -0700178 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", bool_v_, &e1));
179 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", path_v, &e2));
180 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", string_v_, &e3));
181 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", strings_v_, &e4));
182 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", int16_v_, &e5));
183 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", int32_v_, &e6));
184 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", uint16_v_, &e7));
185 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", uint32_v_, &e8));
186 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", stringmap_v_, &e9));
187 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", byte_v_, &e10));
Chris Masoned0ceb8c2011-06-02 10:05:39 -0700188}
189
mukesh agrawal7a4e4002011-09-06 11:26:05 -0700190TEST_F(DBusAdaptorTest, ArgsToKeyValueStore) {
191 map<string, ::DBus::Variant> args;
192 KeyValueStore args_kv;
193 Error error;
194
195 args["string_arg"].writer().append_string("string");
196 args["bool_arg"].writer().append_bool(true);
197 DBusAdaptor::ArgsToKeyValueStore(args, &args_kv, &error);
198 EXPECT_TRUE(error.IsSuccess());
199 EXPECT_EQ("string", args_kv.GetString("string_arg"));
200 EXPECT_EQ(true, args_kv.GetBool("bool_arg"));
201}
202
Chris Masoned0ceb8c2011-06-02 10:05:39 -0700203} // namespace shill