blob: 0454a5135b7af8e795f10ab2eb8c7aabda8d682c [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
Chris Masone8fe2c7e2011-06-09 15:51:19 -070015#include "shill/manager.h"
16#include "shill/mock_control.h"
17#include "shill/mock_device.h"
Chris Masone3bd3c8c2011-06-13 08:20:26 -070018#include "shill/mock_property_store.h"
Chris Masone8fe2c7e2011-06-09 15:51:19 -070019#include "shill/mock_service.h"
Chris Masone3bd3c8c2011-06-13 08:20:26 -070020#include "shill/property_store_unittest.h"
Chris Masone8fe2c7e2011-06-09 15:51:19 -070021#include "shill/shill_event.h"
22
23using std::map;
24using std::string;
25using std::vector;
Chris Masoned0ceb8c2011-06-02 10:05:39 -070026using ::testing::_;
Chris Masoned0ceb8c2011-06-02 10:05:39 -070027using ::testing::Return;
Chris Masone3bd3c8c2011-06-13 08:20:26 -070028using ::testing::StrEq;
29using ::testing::Test;
Chris Masoned0ceb8c2011-06-02 10:05:39 -070030
Chris Masone8fe2c7e2011-06-09 15:51:19 -070031namespace shill {
32
Chris Masone3bd3c8c2011-06-13 08:20:26 -070033class DBusAdaptorTest : public PropertyStoreTest {
Chris Masoned0ceb8c2011-06-02 10:05:39 -070034 public:
Chris Masone8fe2c7e2011-06-09 15:51:19 -070035 DBusAdaptorTest()
Chris Masoneb925cc82011-06-22 15:39:57 -070036 : ex_bool_(true),
37 ex_byte_(0xff),
38 ex_uint16_(65535),
39 ex_uint32_(2000000),
40 ex_int16_(-32768),
41 ex_int32_(-65536),
42 ex_string_("something"),
43 ex_strings_(1, ex_string_),
44 bool_v_(DBusAdaptor::BoolToVariant(ex_bool_)),
45 byte_v_(DBusAdaptor::ByteToVariant(ex_byte_)),
46 uint16_v_(DBusAdaptor::Uint16ToVariant(ex_uint16_)),
47 uint32_v_(DBusAdaptor::Uint32ToVariant(ex_uint32_)),
48 int16_v_(DBusAdaptor::Int16ToVariant(ex_int16_)),
49 int32_v_(DBusAdaptor::Int32ToVariant(ex_int32_)),
50 string_v_(DBusAdaptor::StringToVariant(ex_string_)),
51 strings_v_(DBusAdaptor::StringsToVariant(ex_strings_)),
Chris Masone8fe2c7e2011-06-09 15:51:19 -070052 device_(new MockDevice(&control_interface_,
53 &dispatcher_,
54 &manager_,
55 "mock",
56 0)),
57 service_(new MockService(&control_interface_,
58 &dispatcher_,
Chris Masone8fe2c7e2011-06-09 15:51:19 -070059 "mock")) {
Chris Masoneb925cc82011-06-22 15:39:57 -070060 ex_stringmap_[ex_string_] = ex_string_;
61 stringmap_v_ = DBusAdaptor::StringmapToVariant(ex_stringmap_);
Chris Masone8fe2c7e2011-06-09 15:51:19 -070062 }
63
Chris Masoned0ceb8c2011-06-02 10:05:39 -070064 virtual ~DBusAdaptorTest() {}
Chris Masone8fe2c7e2011-06-09 15:51:19 -070065
Chris Masone8fe2c7e2011-06-09 15:51:19 -070066 protected:
Chris Masoneb925cc82011-06-22 15:39:57 -070067 bool ex_bool_;
68 uint8 ex_byte_;
69 uint16 ex_uint16_;
70 uint32 ex_uint32_;
71 int16 ex_int16_;
72 int32 ex_int32_;
73 string ex_string_;
74 map<string, string> ex_stringmap_;
75 vector<map<string, string> > ex_stringmaps_;
76 vector<string> ex_strings_;
77
78 ::DBus::Variant bool_v_;
79 ::DBus::Variant byte_v_;
80 ::DBus::Variant int16_v_;
81 ::DBus::Variant int32_v_;
82 ::DBus::Variant string_v_;
83 ::DBus::Variant stringmap_v_;
84 ::DBus::Variant stringmaps_v_;
85 ::DBus::Variant strings_v_;
86 ::DBus::Variant uint16_v_;
87 ::DBus::Variant uint32_v_;
88
Chris Masone8fe2c7e2011-06-09 15:51:19 -070089 DeviceRefPtr device_;
90 ServiceRefPtr service_;
Chris Masoned0ceb8c2011-06-02 10:05:39 -070091};
92
93TEST_F(DBusAdaptorTest, Conversions) {
Chris Masoneb925cc82011-06-22 15:39:57 -070094 EXPECT_EQ(0, PropertyStoreTest::kBoolV.reader().get_bool());
95 EXPECT_EQ(ex_bool_, bool_v_.reader().get_bool());
Chris Masoned0ceb8c2011-06-02 10:05:39 -070096
Chris Masoneb925cc82011-06-22 15:39:57 -070097 EXPECT_EQ(0, PropertyStoreTest::kByteV.reader().get_byte());
98 EXPECT_EQ(ex_byte_, byte_v_.reader().get_byte());
Chris Masoned0ceb8c2011-06-02 10:05:39 -070099
Chris Masoneb925cc82011-06-22 15:39:57 -0700100 EXPECT_EQ(0, PropertyStoreTest::kUint16V.reader().get_uint16());
101 EXPECT_EQ(ex_uint16_, uint16_v_.reader().get_uint16());
Chris Masoned0ceb8c2011-06-02 10:05:39 -0700102
Chris Masoneb925cc82011-06-22 15:39:57 -0700103 EXPECT_EQ(0, PropertyStoreTest::kInt16V.reader().get_int16());
104 EXPECT_EQ(ex_int16_, int16_v_.reader().get_int16());
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700105
Chris Masoneb925cc82011-06-22 15:39:57 -0700106 EXPECT_EQ(0, PropertyStoreTest::kUint32V.reader().get_uint32());
107 EXPECT_EQ(ex_uint32_, uint32_v_.reader().get_uint32());
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700108
Chris Masoneb925cc82011-06-22 15:39:57 -0700109 EXPECT_EQ(0, PropertyStoreTest::kInt32V.reader().get_int32());
110 EXPECT_EQ(ex_int32_, int32_v_.reader().get_int32());
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700111
Chris Masoneb925cc82011-06-22 15:39:57 -0700112 EXPECT_EQ(string(""), PropertyStoreTest::kStringV.reader().get_string());
113 EXPECT_EQ(ex_string_, string_v_.reader().get_string());
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700114
Chris Masoneb925cc82011-06-22 15:39:57 -0700115 EXPECT_EQ(ex_stringmap_[ex_string_],
116 (stringmap_v_.operator map<string, string>()[ex_string_]));
117 EXPECT_EQ(ex_strings_[0], strings_v_.operator vector<string>()[0]);
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700118}
119
120TEST_F(DBusAdaptorTest, Signatures) {
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700121 EXPECT_TRUE(DBusAdaptor::IsBool(bool_v_.signature()));
122 EXPECT_TRUE(DBusAdaptor::IsByte(byte_v_.signature()));
123 EXPECT_TRUE(DBusAdaptor::IsInt16(int16_v_.signature()));
124 EXPECT_TRUE(DBusAdaptor::IsInt32(int32_v_.signature()));
125 EXPECT_TRUE(DBusAdaptor::IsString(string_v_.signature()));
126 EXPECT_TRUE(DBusAdaptor::IsStringmap(stringmap_v_.signature()));
127 EXPECT_TRUE(DBusAdaptor::IsStrings(strings_v_.signature()));
128 EXPECT_TRUE(DBusAdaptor::IsUint16(uint16_v_.signature()));
129 EXPECT_TRUE(DBusAdaptor::IsUint32(uint32_v_.signature()));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700130
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700131 EXPECT_FALSE(DBusAdaptor::IsBool(byte_v_.signature()));
132 EXPECT_FALSE(DBusAdaptor::IsStrings(string_v_.signature()));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700133}
134
135TEST_F(DBusAdaptorTest, Dispatch) {
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700136 MockPropertyStore store;
mukesh agrawala903e412011-06-28 17:07:11 -0700137 ::DBus::Error e1, e2, e3, e4, e5, e6, e7, e8, e9, e10;
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700138
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700139 EXPECT_CALL(store, Contains(_)).WillRepeatedly(Return(true));
140 EXPECT_CALL(store, SetBoolProperty("", _, _)).WillOnce(Return(true));
141 EXPECT_CALL(store, SetInt16Property("", _, _)).WillOnce(Return(true));
142 EXPECT_CALL(store, SetInt32Property("", _, _)).WillOnce(Return(true));
143 EXPECT_CALL(store, SetStringProperty("", _, _))
144 .WillOnce(Return(true));
145 EXPECT_CALL(store, SetStringmapProperty("", _, _))
146 .WillOnce(Return(true));
147 EXPECT_CALL(store, SetStringsProperty("", _, _))
148 .WillOnce(Return(true));
149 EXPECT_CALL(store, SetUint8Property("", _, _)).WillOnce(Return(true));
150 EXPECT_CALL(store, SetUint16Property("", _, _)).WillOnce(Return(true));
151 EXPECT_CALL(store, SetUint32Property("", _, _)).WillOnce(Return(true));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700152
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700153 string string_path("/false/path");
154 ::DBus::Path path(string_path);
155 ::DBus::Variant path_v = DBusAdaptor::PathToVariant(path);
156 EXPECT_CALL(store, SetStringProperty("", StrEq(string_path), _))
157 .WillOnce(Return(true));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700158
mukesh agrawala903e412011-06-28 17:07:11 -0700159 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", bool_v_, e1));
160 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", path_v, e2));
161 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", string_v_, e3));
162 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", strings_v_, e4));
163 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", int16_v_, e5));
164 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", int32_v_, e6));
165 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", uint16_v_, e7));
166 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", uint32_v_, e8));
167 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", stringmap_v_, e9));
168 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", byte_v_, e10));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700169
Chris Masoned0ceb8c2011-06-02 10:05:39 -0700170}
171
172} // namespace shill