• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 The Weave 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 
5 #ifndef LIBWEAVE_SRC_PRIVET_MOCK_DELEGATES_H_
6 #define LIBWEAVE_SRC_PRIVET_MOCK_DELEGATES_H_
7 
8 #include <set>
9 #include <string>
10 #include <utility>
11 
12 #include <base/values.h>
13 #include <gmock/gmock.h>
14 #include <gtest/gtest.h>
15 
16 #include "src/config.h"
17 #include "src/privet/cloud_delegate.h"
18 #include "src/privet/device_delegate.h"
19 #include "src/privet/security_delegate.h"
20 #include "src/privet/wifi_delegate.h"
21 
22 using testing::_;
23 using testing::Return;
24 using testing::ReturnRef;
25 using testing::SetArgPointee;
26 
27 namespace weave {
28 
29 namespace privet {
30 
31 struct TestUserId : public UserAppId {
TestUserIdTestUserId32   TestUserId(const std::string& user_id)
33       : UserAppId{AuthType::kAnonymous, {user_id.begin(), user_id.end()}, {}} {}
34 };
35 
ACTION_TEMPLATE(RunCallback,HAS_1_TEMPLATE_PARAMS (int,k),AND_0_VALUE_PARAMS ())36 ACTION_TEMPLATE(RunCallback,
37                 HAS_1_TEMPLATE_PARAMS(int, k),
38                 AND_0_VALUE_PARAMS()) {
39   return std::get<k>(args).Run();
40 }
41 
ACTION_TEMPLATE(RunCallback,HAS_1_TEMPLATE_PARAMS (int,k),AND_1_VALUE_PARAMS (p0))42 ACTION_TEMPLATE(RunCallback,
43                 HAS_1_TEMPLATE_PARAMS(int, k),
44                 AND_1_VALUE_PARAMS(p0)) {
45   return std::get<k>(args).Run(p0);
46 }
47 
48 class MockDeviceDelegate : public DeviceDelegate {
49   using IntPair = std::pair<uint16_t, uint16_t>;
50 
51  public:
52   MOCK_CONST_METHOD0(GetHttpEnpoint, IntPair());
53   MOCK_CONST_METHOD0(GetHttpsEnpoint, IntPair());
54   MOCK_CONST_METHOD0(GetHttpRequestTimeout, base::TimeDelta());
55   MOCK_METHOD3(PostDelayedTask,
56                void(const tracked_objects::Location&,
57                     const base::Closure&,
58                     base::TimeDelta));
59 
MockDeviceDelegate()60   MockDeviceDelegate() {
61     EXPECT_CALL(*this, GetHttpEnpoint())
62         .WillRepeatedly(Return(std::make_pair(0, 0)));
63     EXPECT_CALL(*this, GetHttpsEnpoint())
64         .WillRepeatedly(Return(std::make_pair(0, 0)));
65   }
66 };
67 
68 class MockSecurityDelegate : public SecurityDelegate {
69  public:
70   MOCK_METHOD7(CreateAccessToken,
71                bool(AuthType,
72                     const std::string&,
73                     AuthScope,
74                     std::string*,
75                     AuthScope*,
76                     base::TimeDelta*,
77                     ErrorPtr*));
78   MOCK_CONST_METHOD3(ParseAccessToken,
79                      bool(const std::string&, UserInfo*, ErrorPtr*));
80   MOCK_CONST_METHOD0(GetPairingTypes, std::set<PairingType>());
81   MOCK_CONST_METHOD0(GetCryptoTypes, std::set<CryptoType>());
82   MOCK_CONST_METHOD0(GetAuthTypes, std::set<AuthType>());
83   MOCK_METHOD1(ClaimRootClientAuthToken, std::string(ErrorPtr*));
84   MOCK_METHOD2(ConfirmClientAuthToken, bool(const std::string&, ErrorPtr*));
85   MOCK_METHOD5(
86       StartPairing,
87       bool(PairingType, CryptoType, std::string*, std::string*, ErrorPtr*));
88   MOCK_METHOD5(ConfirmPairing,
89                bool(const std::string&,
90                     const std::string&,
91                     std::string*,
92                     std::string*,
93                     ErrorPtr*));
94   MOCK_METHOD2(CancelPairing, bool(const std::string&, ErrorPtr*));
95   MOCK_METHOD0(CreateSessionId, std::string());
96 
MockSecurityDelegate()97   MockSecurityDelegate() {
98     EXPECT_CALL(*this, CreateAccessToken(_, _, _, _, _, _, _))
99         .WillRepeatedly(DoAll(
100             SetArgPointee<3>("GuestAccessToken"),
101             SetArgPointee<4>(AuthScope::kViewer),
102             SetArgPointee<5>(base::TimeDelta::FromSeconds(15)), Return(true)));
103 
104     EXPECT_CALL(*this, ClaimRootClientAuthToken(_))
105         .WillRepeatedly(Return("RootClientAuthToken"));
106 
107     EXPECT_CALL(*this, ConfirmClientAuthToken("DerivedClientAuthToken", _))
108         .WillRepeatedly(Return(true));
109 
110     EXPECT_CALL(*this, ParseAccessToken(_, _, _))
111         .WillRepeatedly(DoAll(SetArgPointee<1>(UserInfo{
112                                   AuthScope::kViewer,
113                                   UserAppId{AuthType::kLocal,
114                                             {'1', '2', '3', '4', '5', '6', '7'},
115                                             {}}}),
116                               Return(true)));
117 
118     EXPECT_CALL(*this, GetPairingTypes())
119         .WillRepeatedly(Return(std::set<PairingType>{
120             PairingType::kPinCode, PairingType::kEmbeddedCode,
121         }));
122 
123     EXPECT_CALL(*this, GetCryptoTypes())
124         .WillRepeatedly(Return(std::set<CryptoType>{
125             CryptoType::kSpake_p224,
126         }));
127     EXPECT_CALL(*this, GetAuthTypes())
128         .WillRepeatedly(Return(std::set<AuthType>{
129             AuthType::kAnonymous, AuthType::kPairing, AuthType::kLocal,
130         }));
131 
132     EXPECT_CALL(*this, StartPairing(_, _, _, _, _))
133         .WillRepeatedly(DoAll(SetArgPointee<2>("testSession"),
134                               SetArgPointee<3>("testCommitment"),
135                               Return(true)));
136 
137     EXPECT_CALL(*this, ConfirmPairing(_, _, _, _, _))
138         .WillRepeatedly(DoAll(SetArgPointee<2>("testFingerprint"),
139                               SetArgPointee<3>("testSignature"), Return(true)));
140     EXPECT_CALL(*this, CancelPairing(_, _)).WillRepeatedly(Return(true));
141     EXPECT_CALL(*this, CreateSessionId()).WillRepeatedly(Return("SessionId"));
142   }
143 };
144 
145 class MockWifiDelegate : public WifiDelegate {
146  public:
147   MOCK_CONST_METHOD0(GetConnectionState, const ConnectionState&());
148   MOCK_CONST_METHOD0(GetSetupState, const SetupState&());
149   MOCK_METHOD3(ConfigureCredentials,
150                bool(const std::string&, const std::string&, ErrorPtr*));
151   MOCK_CONST_METHOD0(GetCurrentlyConnectedSsid, std::string());
152   MOCK_CONST_METHOD0(GetHostedSsid, std::string());
153   MOCK_CONST_METHOD0(GetTypes, std::set<WifiType>());
154 
MockWifiDelegate()155   MockWifiDelegate() {
156     EXPECT_CALL(*this, GetConnectionState())
157         .WillRepeatedly(ReturnRef(connection_state_));
158     EXPECT_CALL(*this, GetSetupState()).WillRepeatedly(ReturnRef(setup_state_));
159     EXPECT_CALL(*this, GetCurrentlyConnectedSsid())
160         .WillRepeatedly(Return("TestSsid"));
161     EXPECT_CALL(*this, GetHostedSsid()).WillRepeatedly(Return(""));
162     EXPECT_CALL(*this, GetTypes())
163         .WillRepeatedly(Return(std::set<WifiType>{WifiType::kWifi24}));
164   }
165 
166   ConnectionState connection_state_{ConnectionState::kOffline};
167   SetupState setup_state_{SetupState::kNone};
168 };
169 
170 class MockCloudDelegate : public CloudDelegate {
171  public:
172   MOCK_CONST_METHOD0(GetDeviceId, std::string());
173   MOCK_CONST_METHOD0(GetModelId, std::string());
174   MOCK_CONST_METHOD0(GetName, std::string());
175   MOCK_CONST_METHOD0(GetDescription, std::string());
176   MOCK_CONST_METHOD0(GetLocation, std::string());
177   MOCK_METHOD3(UpdateDeviceInfo,
178                void(const std::string&,
179                     const std::string&,
180                     const std::string&));
181   MOCK_CONST_METHOD0(GetOemName, std::string());
182   MOCK_CONST_METHOD0(GetModelName, std::string());
183   MOCK_CONST_METHOD0(GetAnonymousMaxScope, AuthScope());
184   MOCK_CONST_METHOD0(GetConnectionState, const ConnectionState&());
185   MOCK_CONST_METHOD0(GetSetupState, const SetupState&());
186   MOCK_METHOD3(Setup, bool(const std::string&, const std::string&, ErrorPtr*));
187   MOCK_CONST_METHOD0(GetCloudId, std::string());
188   MOCK_CONST_METHOD0(GetLegacyState, const base::DictionaryValue&());
189   MOCK_CONST_METHOD0(GetLegacyCommandDef, const base::DictionaryValue&());
190   MOCK_CONST_METHOD0(GetComponents, const base::DictionaryValue&());
191   MOCK_CONST_METHOD2(FindComponent,
192                      const base::DictionaryValue*(const std::string& path,
193                                                   ErrorPtr* error));
194   MOCK_CONST_METHOD0(GetTraits, const base::DictionaryValue&());
195   MOCK_METHOD3(AddCommand,
196                void(const base::DictionaryValue&,
197                     const UserInfo&,
198                     const CommandDoneCallback&));
199   MOCK_METHOD3(GetCommand,
200                void(const std::string&,
201                     const UserInfo&,
202                     const CommandDoneCallback&));
203   MOCK_METHOD3(CancelCommand,
204                void(const std::string&,
205                     const UserInfo&,
206                     const CommandDoneCallback&));
207   MOCK_METHOD2(ListCommands, void(const UserInfo&, const CommandDoneCallback&));
208 
MockCloudDelegate()209   MockCloudDelegate() {
210     EXPECT_CALL(*this, GetDeviceId()).WillRepeatedly(Return("TestId"));
211     EXPECT_CALL(*this, GetModelId()).WillRepeatedly(Return("ABMID"));
212     EXPECT_CALL(*this, GetName()).WillRepeatedly(Return("TestDevice"));
213     EXPECT_CALL(*this, GetDescription()).WillRepeatedly(Return(""));
214     EXPECT_CALL(*this, GetLocation()).WillRepeatedly(Return(""));
215     EXPECT_CALL(*this, UpdateDeviceInfo(_, _, _)).WillRepeatedly(Return());
216     EXPECT_CALL(*this, GetOemName()).WillRepeatedly(Return("Chromium"));
217     EXPECT_CALL(*this, GetModelName()).WillRepeatedly(Return("Brillo"));
218     EXPECT_CALL(*this, GetAnonymousMaxScope())
219         .WillRepeatedly(Return(AuthScope::kUser));
220     EXPECT_CALL(*this, GetConnectionState())
221         .WillRepeatedly(ReturnRef(connection_state_));
222     EXPECT_CALL(*this, GetSetupState()).WillRepeatedly(ReturnRef(setup_state_));
223     EXPECT_CALL(*this, GetCloudId()).WillRepeatedly(Return("TestCloudId"));
224     test_dict_.Set("test", new base::DictionaryValue);
225     EXPECT_CALL(*this, GetLegacyState()).WillRepeatedly(ReturnRef(test_dict_));
226     EXPECT_CALL(*this, GetLegacyCommandDef())
227         .WillRepeatedly(ReturnRef(test_dict_));
228     EXPECT_CALL(*this, GetTraits()).WillRepeatedly(ReturnRef(test_dict_));
229     EXPECT_CALL(*this, GetComponents()).WillRepeatedly(ReturnRef(test_dict_));
230     EXPECT_CALL(*this, FindComponent(_, _)).Times(0);
231   }
232 
233   ConnectionState connection_state_{ConnectionState::kOnline};
234   SetupState setup_state_{SetupState::kNone};
235   base::DictionaryValue test_dict_;
236 };
237 
238 }  // namespace privet
239 }  // namespace weave
240 
241 #endif  // LIBWEAVE_SRC_PRIVET_MOCK_DELEGATES_H_
242