blob: 22fd803e8266f78fa3a40c6021c4a251cae812d7 [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()
36 : 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),
Chris Masone8fe2c7e2011-06-09 15:51:19 -070044 device_(new MockDevice(&control_interface_,
45 &dispatcher_,
46 &manager_,
47 "mock",
48 0)),
49 service_(new MockService(&control_interface_,
50 &dispatcher_,
51 device_,
52 "mock")) {
53 ex_stringmap[ex_string] = ex_string;
54
Chris Masone3bd3c8c2011-06-13 08:20:26 -070055 bool_v_ = DBusAdaptor::BoolToVariant(ex_bool);
56 byte_v_ = DBusAdaptor::ByteToVariant(ex_byte);
57 uint16_v_ = DBusAdaptor::Uint16ToVariant(ex_uint16);
58 uint32_v_ = DBusAdaptor::Uint32ToVariant(ex_uint32);
59 int16_v_ = DBusAdaptor::Int16ToVariant(ex_int16);
60 int32_v_ = DBusAdaptor::Int32ToVariant(ex_int32);
61 string_v_ = DBusAdaptor::StringToVariant(ex_string);
62 stringmap_v_ = DBusAdaptor::StringmapToVariant(ex_stringmap);
63 strings_v_ = DBusAdaptor::StringsToVariant(ex_strings);
Chris Masone8fe2c7e2011-06-09 15:51:19 -070064 }
65
Chris Masoned0ceb8c2011-06-02 10:05:39 -070066 virtual ~DBusAdaptorTest() {}
Chris Masone8fe2c7e2011-06-09 15:51:19 -070067
68 bool ex_bool;
69 uint8 ex_byte;
70 uint16 ex_uint16;
71 uint32 ex_uint32;
72 int16 ex_int16;
73 int32 ex_int32;
74 string ex_string;
75 map<string, string> ex_stringmap;
76 vector<string> ex_strings;
77
Chris Masone8fe2c7e2011-06-09 15:51:19 -070078 protected:
Chris Masone8fe2c7e2011-06-09 15:51:19 -070079 DeviceRefPtr device_;
80 ServiceRefPtr service_;
Chris Masoned0ceb8c2011-06-02 10:05:39 -070081};
82
83TEST_F(DBusAdaptorTest, Conversions) {
Chris Masone8fe2c7e2011-06-09 15:51:19 -070084 EXPECT_EQ(0, DBusAdaptor::BoolToVariant(0).reader().get_bool());
Chris Masone3bd3c8c2011-06-13 08:20:26 -070085 EXPECT_EQ(ex_bool, bool_v_.reader().get_bool());
Chris Masoned0ceb8c2011-06-02 10:05:39 -070086
Chris Masone8fe2c7e2011-06-09 15:51:19 -070087 EXPECT_EQ(0, DBusAdaptor::ByteToVariant(0).reader().get_byte());
Chris Masone3bd3c8c2011-06-13 08:20:26 -070088 EXPECT_EQ(ex_byte, byte_v_.reader().get_byte());
Chris Masoned0ceb8c2011-06-02 10:05:39 -070089
Chris Masone8fe2c7e2011-06-09 15:51:19 -070090 EXPECT_EQ(0, DBusAdaptor::Uint16ToVariant(0).reader().get_uint16());
Chris Masone3bd3c8c2011-06-13 08:20:26 -070091 EXPECT_EQ(ex_uint16, uint16_v_.reader().get_uint16());
Chris Masoned0ceb8c2011-06-02 10:05:39 -070092
Chris Masone8fe2c7e2011-06-09 15:51:19 -070093 EXPECT_EQ(0, DBusAdaptor::Int16ToVariant(0).reader().get_int16());
Chris Masone3bd3c8c2011-06-13 08:20:26 -070094 EXPECT_EQ(ex_int16, int16_v_.reader().get_int16());
Chris Masone8fe2c7e2011-06-09 15:51:19 -070095
96 EXPECT_EQ(0, DBusAdaptor::Uint32ToVariant(0).reader().get_uint32());
Chris Masone3bd3c8c2011-06-13 08:20:26 -070097 EXPECT_EQ(ex_uint32, uint32_v_.reader().get_uint32());
Chris Masone8fe2c7e2011-06-09 15:51:19 -070098
99 EXPECT_EQ(0, DBusAdaptor::Int32ToVariant(0).reader().get_int32());
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700100 EXPECT_EQ(ex_int32, int32_v_.reader().get_int32());
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700101
102 EXPECT_EQ(string(""), DBusAdaptor::StringToVariant("").reader().get_string());
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700103 EXPECT_EQ(ex_string, string_v_.reader().get_string());
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700104
105 EXPECT_EQ(ex_stringmap[ex_string],
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700106 (stringmap_v_.operator map<string, string>()[ex_string]));
107 EXPECT_EQ(ex_strings[0], strings_v_.operator vector<string>()[0]);
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700108}
109
110TEST_F(DBusAdaptorTest, Signatures) {
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700111 EXPECT_TRUE(DBusAdaptor::IsBool(bool_v_.signature()));
112 EXPECT_TRUE(DBusAdaptor::IsByte(byte_v_.signature()));
113 EXPECT_TRUE(DBusAdaptor::IsInt16(int16_v_.signature()));
114 EXPECT_TRUE(DBusAdaptor::IsInt32(int32_v_.signature()));
115 EXPECT_TRUE(DBusAdaptor::IsString(string_v_.signature()));
116 EXPECT_TRUE(DBusAdaptor::IsStringmap(stringmap_v_.signature()));
117 EXPECT_TRUE(DBusAdaptor::IsStrings(strings_v_.signature()));
118 EXPECT_TRUE(DBusAdaptor::IsUint16(uint16_v_.signature()));
119 EXPECT_TRUE(DBusAdaptor::IsUint32(uint32_v_.signature()));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700120
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700121 EXPECT_FALSE(DBusAdaptor::IsBool(byte_v_.signature()));
122 EXPECT_FALSE(DBusAdaptor::IsStrings(string_v_.signature()));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700123}
124
125TEST_F(DBusAdaptorTest, Dispatch) {
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700126 MockPropertyStore store;
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700127 ::DBus::Error error;
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700128
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700129 EXPECT_CALL(store, Contains(_)).WillRepeatedly(Return(true));
130 EXPECT_CALL(store, SetBoolProperty("", _, _)).WillOnce(Return(true));
131 EXPECT_CALL(store, SetInt16Property("", _, _)).WillOnce(Return(true));
132 EXPECT_CALL(store, SetInt32Property("", _, _)).WillOnce(Return(true));
133 EXPECT_CALL(store, SetStringProperty("", _, _))
134 .WillOnce(Return(true));
135 EXPECT_CALL(store, SetStringmapProperty("", _, _))
136 .WillOnce(Return(true));
137 EXPECT_CALL(store, SetStringsProperty("", _, _))
138 .WillOnce(Return(true));
139 EXPECT_CALL(store, SetUint8Property("", _, _)).WillOnce(Return(true));
140 EXPECT_CALL(store, SetUint16Property("", _, _)).WillOnce(Return(true));
141 EXPECT_CALL(store, SetUint32Property("", _, _)).WillOnce(Return(true));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700142
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700143 string string_path("/false/path");
144 ::DBus::Path path(string_path);
145 ::DBus::Variant path_v = DBusAdaptor::PathToVariant(path);
146 EXPECT_CALL(store, SetStringProperty("", StrEq(string_path), _))
147 .WillOnce(Return(true));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700148
Chris Masone3bd3c8c2011-06-13 08:20:26 -0700149 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", bool_v_, error));
150 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", path_v, error));
151 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", string_v_, error));
152 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", strings_v_, error));
153 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", int16_v_, error));
154 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", int32_v_, error));
155 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", uint16_v_, error));
156 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", uint32_v_, error));
157 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", stringmap_v_, error));
158 EXPECT_TRUE(DBusAdaptor::DispatchOnType(&store, "", byte_v_, error));
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700159
Chris Masoned0ceb8c2011-06-02 10:05:39 -0700160}
161
162} // namespace shill