OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 The Chromium 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 #include "chrome/browser/password_manager/kwallet_dbus.h" | |
6 | |
7 #include <memory> | |
8 #include <string> | |
9 | |
10 #include "base/logging.h" | |
11 #include "base/nix/xdg_util.h" | |
12 #include "dbus/message.h" | |
13 #include "dbus/mock_bus.h" | |
14 #include "dbus/mock_object_proxy.h" | |
15 #include "dbus/object_path.h" | |
16 #include "dbus/object_proxy.h" | |
17 #include "testing/gmock/include/gmock/gmock.h" | |
18 #include "testing/gtest/include/gtest/gtest.h" | |
19 | |
20 namespace { | |
21 | |
22 using testing::_; | |
23 using testing::Return; | |
24 using testing::Invoke; | |
25 using testing::DoAll; | |
26 using testing::ElementsAreArray; | |
27 | |
28 const char kKWalletInterface[] = "org.kde.KWallet"; | |
29 const char kKLauncherInterface[] = "org.kde.KLauncher"; | |
30 | |
31 dbus::Response* RespondBool(bool value) { | |
32 std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
33 dbus::MessageWriter writer(response.get()); | |
34 writer.AppendBool(value); | |
35 return response.release(); | |
36 } | |
37 | |
38 dbus::Response* RespondString(const std::string& value) { | |
39 std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
40 dbus::MessageWriter writer(response.get()); | |
41 writer.AppendString(value); | |
42 return response.release(); | |
43 } | |
44 | |
45 dbus::Response* RespondBytes(const uint8_t* bytes, int count) { | |
vasilii
2016/06/17 14:43:41
Why not passing const::vector here?
cfroussios
2016/06/20 13:00:43
Done.
| |
46 std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
47 dbus::MessageWriter writer(response.get()); | |
48 writer.AppendArrayOfBytes(bytes, count); | |
49 return response.release(); | |
50 } | |
51 | |
52 dbus::Response* RespondArrayOfStrings(const std::vector<std::string>& strings) { | |
53 std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
54 dbus::MessageWriter writer(response.get()); | |
55 writer.AppendArrayOfStrings(strings); | |
56 return response.release(); | |
57 } | |
58 | |
59 dbus::Response* RespondInt32(int value) { | |
60 std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
61 dbus::MessageWriter writer(response.get()); | |
62 writer.AppendInt32(value); | |
63 return response.release(); | |
64 } | |
65 | |
66 dbus::Response* RespondEmpty() { | |
67 return dbus::Response::CreateEmpty().release(); | |
68 } | |
69 | |
70 class KWalletDBusTest | |
71 : public testing::TestWithParam<base::nix::DesktopEnvironment> { | |
72 public: | |
73 KWalletDBusTest() : desktop_env_(GetParam()), kwallet_dbus_(desktop_env_) { | |
74 if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5) { | |
75 dbus_service_name_ = "org.kde.kwalletd5"; | |
76 dbus_path_ = "/modules/kwalletd5"; | |
77 kwalletd_name_ = "kwalletd5"; | |
78 } else { | |
79 dbus_service_name_ = "org.kde.kwalletd"; | |
80 dbus_path_ = "/modules/kwalletd"; | |
81 kwalletd_name_ = "kwalletd"; | |
82 } | |
83 | |
84 dbus::Bus::Options options; | |
85 options.bus_type = dbus::Bus::SESSION; | |
86 mock_session_bus_ = new dbus::MockBus(options); | |
87 | |
88 mock_klauncher_proxy_ = | |
89 new dbus::MockObjectProxy(mock_session_bus_.get(), "org.kde.klauncher", | |
90 dbus::ObjectPath("/KLauncher")); | |
91 mock_kwallet_proxy_ = | |
92 new dbus::MockObjectProxy(mock_session_bus_.get(), dbus_service_name_, | |
93 dbus::ObjectPath(dbus_path_)); | |
94 | |
95 // The kwallet proxy is aquired once, when preparing |kwallet_dbus_| | |
96 EXPECT_CALL( | |
97 *mock_session_bus_.get(), | |
98 GetObjectProxy(dbus_service_name_, dbus::ObjectPath(dbus_path_))) | |
99 .WillOnce(Return(mock_kwallet_proxy_.get())); | |
100 | |
101 kwallet_dbus_.SetSessionBus(mock_session_bus_); | |
102 | |
103 // No unexpected calls. | |
104 EXPECT_CALL(*mock_kwallet_proxy_.get(), MockCallMethodAndBlock(_, _)) | |
105 .Times(0); | |
106 | |
107 testing::Mock::VerifyAndClearExpectations(mock_session_bus_.get()); | |
108 } | |
109 | |
110 protected: | |
111 const base::nix::DesktopEnvironment desktop_env_; | |
112 scoped_refptr<dbus::MockBus> mock_session_bus_; | |
113 scoped_refptr<dbus::MockObjectProxy> mock_klauncher_proxy_; | |
114 scoped_refptr<dbus::MockObjectProxy> mock_kwallet_proxy_; | |
115 KWalletDBus kwallet_dbus_; | |
116 | |
117 std::string dbus_service_name_; | |
118 std::string dbus_path_; | |
119 std::string kwalletd_name_; | |
120 | |
121 private: | |
122 DISALLOW_COPY_AND_ASSIGN(KWalletDBusTest); | |
123 }; | |
124 | |
125 INSTANTIATE_TEST_CASE_P(, | |
126 KWalletDBusTest, | |
127 ::testing::Values(base::nix::DESKTOP_ENVIRONMENT_KDE4, | |
128 base::nix::DESKTOP_ENVIRONMENT_KDE5)); | |
129 | |
130 // Matches a method call to the specified dbus target. | |
131 MATCHER_P2(Calls, interface, member, "") { | |
132 return arg->GetMember() == member && arg->GetInterface() == interface; | |
133 } | |
134 | |
135 // Pops items from the dbus message and compares them to the expected values. | |
136 ACTION_P3(PopIntStringString, int_1, str_2, str_3) { | |
137 dbus::MessageReader reader(arg0); | |
138 | |
139 int i; | |
140 EXPECT_TRUE(reader.PopInt32(&i)); | |
141 EXPECT_EQ(int_1, i); | |
142 | |
143 std::string str; | |
144 EXPECT_TRUE(reader.PopString(&str)); | |
145 EXPECT_EQ(str_2, str); | |
146 | |
147 EXPECT_TRUE(reader.PopString(&str)); | |
148 EXPECT_EQ(str_3, str); | |
149 } | |
150 | |
151 // Pops items from the dbus message and compares them to the expected values. | |
152 ACTION_P4(PopIntStringStringString, int_1, str_2, str_3, str_4) { | |
153 dbus::MessageReader reader(arg0); | |
154 | |
155 int i; | |
156 EXPECT_TRUE(reader.PopInt32(&i)); | |
157 EXPECT_EQ(int_1, i); | |
158 std::string str; | |
159 | |
160 EXPECT_TRUE(reader.PopString(&str)); | |
161 EXPECT_EQ(str_2, str); | |
162 | |
163 EXPECT_TRUE(reader.PopString(&str)); | |
164 EXPECT_EQ(str_3, str); | |
165 | |
166 EXPECT_TRUE(reader.PopString(&str)); | |
167 EXPECT_EQ(str_4, str); | |
168 } | |
169 | |
170 // Pops items from the dbus message and compares them to the expected values. | |
171 ACTION_P5(PopIntStringStringVectorString, int_1, str_2, str_3, vec_4, str_5) { | |
172 dbus::MessageReader reader(arg0); | |
173 | |
174 int i; | |
175 EXPECT_TRUE(reader.PopInt32(&i)); | |
176 EXPECT_EQ(int_1, i); | |
177 | |
178 std::string str; | |
179 EXPECT_TRUE(reader.PopString(&str)); | |
180 EXPECT_EQ(str_2, str); | |
181 | |
182 EXPECT_TRUE(reader.PopString(&str)); | |
183 EXPECT_EQ(str_3, str); | |
184 | |
185 const uint8_t* bytes = nullptr; | |
186 size_t length = 0; | |
187 EXPECT_TRUE(reader.PopArrayOfBytes(&bytes, &length)); | |
188 EXPECT_EQ(vec_4.size(), length); | |
189 EXPECT_THAT(vec_4, ElementsAreArray(bytes, length)); | |
190 | |
191 EXPECT_TRUE(reader.PopString(&str)); | |
192 EXPECT_EQ(str_5, str); | |
193 } | |
194 | |
195 // Pops items from the dbus message and compares them to the expected values. | |
196 ACTION_P3(PopStringInt64String, str_1, int_2, str_3) { | |
197 dbus::MessageReader reader(arg0); | |
198 | |
199 std::string str; | |
200 EXPECT_TRUE(reader.PopString(&str)); | |
201 EXPECT_EQ(str_1, str); | |
202 | |
203 int64_t i; | |
204 EXPECT_TRUE(reader.PopInt64(&i)); | |
205 EXPECT_EQ(int_2, i); | |
206 | |
207 EXPECT_TRUE(reader.PopString(&str)); | |
208 EXPECT_EQ(str_3, str); | |
209 } | |
210 | |
211 // Pops items from the dbus message and compares them to the expected values. | |
212 ACTION_P5(PopStringStringsStringsStringBool, | |
213 str_1, | |
214 vec_2, | |
215 vec_3, | |
216 str_4, | |
217 bool_5) { | |
218 dbus::MessageReader reader(arg0); | |
219 | |
220 std::string str; | |
221 EXPECT_TRUE(reader.PopString(&str)); | |
222 EXPECT_EQ(str_1, str); | |
223 | |
224 std::vector<std::string> strings; | |
225 EXPECT_TRUE(reader.PopArrayOfStrings(&strings)); | |
226 EXPECT_EQ(vec_2, strings); | |
227 | |
228 EXPECT_TRUE(reader.PopArrayOfStrings(&strings)); | |
229 EXPECT_EQ(vec_3, strings); | |
230 | |
231 EXPECT_TRUE(reader.PopString(&str)); | |
232 EXPECT_EQ(str_4, str); | |
233 | |
234 bool b; | |
235 EXPECT_TRUE(reader.PopBool(&b)); | |
236 EXPECT_EQ(bool_5, b); | |
237 } | |
238 | |
239 TEST_P(KWalletDBusTest, StartWalletd) { | |
240 // The receiver of the message takes ownership of the response object. | |
241 dbus::Response* response_success = dbus::Response::CreateEmpty().release(); | |
vasilii
2016/06/17 14:43:41
RespondEmpty()?
cfroussios
2016/06/20 13:00:43
Done.
| |
242 dbus::MessageWriter writer(response_success); | |
243 writer.AppendInt32(0); // return code | |
244 writer.AppendString("dbus_name"); | |
245 writer.AppendString(std::string()); // error message | |
246 writer.AppendInt32(100); // pid | |
247 | |
248 const std::vector<std::string> empty; | |
vasilii
2016/06/17 14:43:41
I don't think it makes test more readable.
cfroussios
2016/06/20 13:00:43
Done.
| |
249 | |
250 EXPECT_CALL( | |
251 *mock_session_bus_.get(), | |
252 GetObjectProxy("org.kde.klauncher", dbus::ObjectPath("/KLauncher"))) | |
253 .WillOnce(Return(mock_klauncher_proxy_.get())); | |
254 | |
255 EXPECT_CALL( | |
256 *mock_klauncher_proxy_.get(), | |
257 MockCallMethodAndBlock( | |
258 Calls(kKLauncherInterface, "start_service_by_desktop_name"), _)) | |
259 .WillOnce(DoAll(PopStringStringsStringsStringBool( | |
260 kwalletd_name_, empty, empty, std::string(), false), | |
261 Return(response_success))); | |
262 | |
263 EXPECT_TRUE(kwallet_dbus_.StartKWalletd()); | |
264 } | |
265 | |
266 TEST_P(KWalletDBusTest, StartWalletdErrors) { | |
267 EXPECT_CALL( | |
268 *mock_session_bus_.get(), | |
269 GetObjectProxy("org.kde.klauncher", dbus::ObjectPath("/KLauncher"))) | |
270 .Times(2) | |
271 .WillRepeatedly(Return(mock_klauncher_proxy_.get())); | |
272 | |
273 EXPECT_CALL( | |
274 *mock_klauncher_proxy_.get(), | |
275 MockCallMethodAndBlock( | |
276 Calls(kKLauncherInterface, "start_service_by_desktop_name"), _)) | |
277 .WillOnce(Return(RespondEmpty())) | |
278 .WillOnce(Return(nullptr)); | |
vasilii
2016/06/17 14:43:41
You definitely merged two tests together here. The
cfroussios
2016/06/20 13:00:43
Done.
| |
279 | |
280 EXPECT_FALSE(kwallet_dbus_.StartKWalletd()); | |
281 EXPECT_FALSE(kwallet_dbus_.StartKWalletd()); | |
282 } | |
283 | |
284 TEST_P(KWalletDBusTest, IsEnabled) { | |
285 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
286 MockCallMethodAndBlock(Calls(kKWalletInterface, "isEnabled"), _)) | |
287 .WillOnce(Return(RespondBool(false))) | |
288 .WillOnce(Return(RespondBool(true))); | |
289 | |
290 bool is_enabled = true; | |
291 EXPECT_EQ(KWalletDBus::Error::SUCCESS, kwallet_dbus_.IsEnabled(&is_enabled)); | |
292 EXPECT_FALSE(is_enabled); | |
293 | |
294 is_enabled = false; | |
295 EXPECT_EQ(KWalletDBus::Error::SUCCESS, kwallet_dbus_.IsEnabled(&is_enabled)); | |
296 EXPECT_TRUE(is_enabled); | |
297 } | |
298 | |
299 TEST_P(KWalletDBusTest, IsEnabledErrors) { | |
300 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
301 MockCallMethodAndBlock(Calls(kKWalletInterface, "isEnabled"), _)) | |
302 .WillOnce(Return(RespondEmpty())) | |
303 .WillOnce(Return(nullptr)); | |
304 | |
305 bool is_enabled = true; | |
306 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
307 kwallet_dbus_.IsEnabled(&is_enabled)); | |
308 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
309 kwallet_dbus_.IsEnabled(&is_enabled)); | |
310 } | |
311 | |
312 TEST_P(KWalletDBusTest, NetworkWallet) { | |
313 EXPECT_CALL( | |
314 *mock_kwallet_proxy_.get(), | |
315 MockCallMethodAndBlock(Calls(kKWalletInterface, "networkWallet"), _)) | |
316 .WillOnce(Return(RespondString("mock_wallet"))); | |
317 | |
318 std::string wallet; | |
319 EXPECT_EQ(KWalletDBus::Error::SUCCESS, kwallet_dbus_.NetworkWallet(&wallet)); | |
320 EXPECT_EQ("mock_wallet", wallet); | |
321 } | |
322 | |
323 TEST_P(KWalletDBusTest, Open) { | |
324 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
325 MockCallMethodAndBlock(Calls(kKWalletInterface, "open"), _)) | |
326 .WillOnce(DoAll(PopStringInt64String("wallet", 0, "app"), | |
327 Return(RespondInt32(1234)))); | |
328 | |
329 int ret; | |
330 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
331 kwallet_dbus_.Open("wallet", "app", &ret)); | |
332 EXPECT_EQ(1234, ret); | |
333 } | |
334 | |
335 TEST_P(KWalletDBusTest, OpenErrors) { | |
336 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
337 MockCallMethodAndBlock(Calls(kKWalletInterface, "open"), _)) | |
338 .WillOnce(Return(RespondEmpty())) | |
339 .WillOnce(Return(nullptr)); | |
340 | |
341 int ret; | |
342 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
343 kwallet_dbus_.Open("wallet", "app", &ret)); | |
344 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
345 kwallet_dbus_.Open("wallet", "app", &ret)); | |
346 } | |
347 | |
348 TEST_P(KWalletDBusTest, NetworkWalletErrors) { | |
349 EXPECT_CALL( | |
350 *mock_kwallet_proxy_.get(), | |
351 MockCallMethodAndBlock(Calls(kKWalletInterface, "networkWallet"), _)) | |
352 .WillOnce(Return(RespondEmpty())) | |
353 .WillOnce(Return(nullptr)); | |
354 | |
355 std::string wallet; | |
356 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
357 kwallet_dbus_.NetworkWallet(&wallet)); | |
358 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
359 kwallet_dbus_.NetworkWallet(&wallet)); | |
360 } | |
361 | |
362 TEST_P(KWalletDBusTest, HasEntry) { | |
363 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
364 MockCallMethodAndBlock(Calls(kKWalletInterface, "hasEntry"), _)) | |
365 .WillOnce(DoAll(PopIntStringStringString(123, "folder", "realm", "app"), | |
366 Return(RespondBool(true)))); | |
367 | |
368 bool has_entry = false; | |
369 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
370 kwallet_dbus_.HasEntry(123, "folder", "realm", "app", &has_entry)); | |
371 EXPECT_TRUE(has_entry); | |
372 } | |
373 | |
374 TEST_P(KWalletDBusTest, HasEntryErrors) { | |
375 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
376 MockCallMethodAndBlock(Calls(kKWalletInterface, "hasEntry"), _)) | |
377 .WillOnce(Return(RespondEmpty())) | |
378 .WillOnce(Return(nullptr)); | |
379 | |
380 bool has_entry = false; | |
381 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
382 kwallet_dbus_.HasEntry(123, "folder", "realm", "app", &has_entry)); | |
383 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
384 kwallet_dbus_.HasEntry(123, "folder", "realm", "app", &has_entry)); | |
385 } | |
386 | |
387 TEST_P(KWalletDBusTest, ReadEntry) { | |
388 std::vector<uint8_t> bytes_expected = {1, 2, 1, 2}; | |
389 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
390 MockCallMethodAndBlock(Calls(kKWalletInterface, "readEntry"), _)) | |
391 .WillOnce(DoAll( | |
392 PopIntStringStringString(123, "folder", "realm", "app"), | |
393 Return(RespondBytes(bytes_expected.data(), bytes_expected.size())))); | |
394 | |
395 std::vector<uint8_t> bytes; | |
396 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
397 kwallet_dbus_.ReadEntry(123, "folder", "realm", "app", &bytes)); | |
398 EXPECT_EQ(bytes_expected, bytes); | |
399 } | |
400 | |
401 TEST_P(KWalletDBusTest, ReadEntryErrors) { | |
402 std::vector<uint8_t> bytes_expected = {1, 2, 1, 2}; | |
403 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
404 MockCallMethodAndBlock(Calls(kKWalletInterface, "readEntry"), _)) | |
405 .WillOnce(Return(RespondEmpty())) | |
406 .WillOnce(Return(nullptr)); | |
407 | |
408 std::vector<uint8_t> bytes; | |
409 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
410 kwallet_dbus_.ReadEntry(123, "folder", "realm", "app", &bytes)); | |
411 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
412 kwallet_dbus_.ReadEntry(123, "folder", "realm", "app", &bytes)); | |
413 } | |
414 | |
415 TEST_P(KWalletDBusTest, EntryList) { | |
416 std::vector<std::string> strings_expected = {"one", "two"}; | |
417 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
418 MockCallMethodAndBlock(Calls(kKWalletInterface, "entryList"), _)) | |
419 .WillOnce(DoAll(PopIntStringString(123, "folder", "app"), | |
420 Return(RespondArrayOfStrings(strings_expected)))); | |
421 | |
422 std::vector<std::string> strings; | |
423 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
424 kwallet_dbus_.EntryList(123, "folder", "app", &strings)); | |
425 EXPECT_EQ(strings_expected, strings); | |
426 } | |
427 | |
428 TEST_P(KWalletDBusTest, EntryListErrors) { | |
429 std::vector<std::string> strings_expected = {"one", "two"}; | |
430 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
431 MockCallMethodAndBlock(Calls(kKWalletInterface, "entryList"), _)) | |
432 .WillOnce(Return(RespondEmpty())) | |
433 .WillOnce(Return(nullptr)); | |
434 | |
435 std::vector<std::string> strings; | |
436 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
437 kwallet_dbus_.EntryList(123, "folder", "app", &strings)); | |
438 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
439 kwallet_dbus_.EntryList(123, "folder", "app", &strings)); | |
440 } | |
441 | |
442 TEST_P(KWalletDBusTest, RemoveEntry) { | |
443 EXPECT_CALL( | |
444 *mock_kwallet_proxy_.get(), | |
445 MockCallMethodAndBlock(Calls(kKWalletInterface, "removeEntry"), _)) | |
446 .WillOnce(DoAll(PopIntStringStringString(123, "folder", "realm", "app"), | |
447 Return(RespondInt32(0)))); | |
448 | |
449 int ret; | |
450 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
451 kwallet_dbus_.RemoveEntry(123, "folder", "realm", "app", &ret)); | |
452 EXPECT_EQ(0, ret); | |
453 } | |
454 | |
455 TEST_P(KWalletDBusTest, RemoveEntryErrors) { | |
456 EXPECT_CALL( | |
457 *mock_kwallet_proxy_.get(), | |
458 MockCallMethodAndBlock(Calls(kKWalletInterface, "removeEntry"), _)) | |
459 .WillOnce(Return(RespondEmpty())) | |
460 .WillOnce(Return(nullptr)); | |
461 | |
462 int ret; | |
463 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
464 kwallet_dbus_.RemoveEntry(123, "folder", "realm", "app", &ret)); | |
465 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
466 kwallet_dbus_.RemoveEntry(123, "folder", "realm", "app", &ret)); | |
467 } | |
468 | |
469 TEST_P(KWalletDBusTest, WriteEntry) { | |
470 std::vector<uint8_t> bytes = {1, 2, 3, 1}; | |
471 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
472 MockCallMethodAndBlock(Calls(kKWalletInterface, "writeEntry"), _)) | |
473 .WillOnce(DoAll( | |
474 PopIntStringStringVectorString(123, "folder", "realm", bytes, "app"), | |
475 Return(RespondInt32(0)))); | |
476 | |
477 int ret; | |
478 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
479 kwallet_dbus_.WriteEntry(123, "folder", "realm", "app", | |
480 bytes.data(), bytes.size(), &ret)); | |
481 EXPECT_EQ(0, ret); | |
482 } | |
483 | |
484 TEST_P(KWalletDBusTest, WriteEntryErrors) { | |
485 std::vector<uint8_t> bytes = {1, 2, 3, 1}; | |
486 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
487 MockCallMethodAndBlock(Calls(kKWalletInterface, "writeEntry"), _)) | |
488 .WillOnce(Return(RespondEmpty())) | |
489 .WillOnce(Return(nullptr)); | |
490 | |
491 int ret; | |
492 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
493 kwallet_dbus_.WriteEntry(123, "folder", "realm", "app", | |
494 bytes.data(), bytes.size(), &ret)); | |
495 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
496 kwallet_dbus_.WriteEntry(123, "folder", "realm", "app", | |
497 bytes.data(), bytes.size(), &ret)); | |
498 } | |
499 | |
500 TEST_P(KWalletDBusTest, HasFolder) { | |
501 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
502 MockCallMethodAndBlock(Calls(kKWalletInterface, "hasFolder"), _)) | |
503 .WillOnce(DoAll(PopIntStringString(123, "wallet", "app"), | |
504 Return(RespondBool(true)))); | |
505 | |
506 bool has_folder = false; | |
507 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
508 kwallet_dbus_.HasFolder(123, "wallet", "app", &has_folder)); | |
509 EXPECT_EQ(true, has_folder); | |
510 } | |
511 | |
512 TEST_P(KWalletDBusTest, HasFolderErrors) { | |
513 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
514 MockCallMethodAndBlock(Calls(kKWalletInterface, "hasFolder"), _)) | |
515 .WillOnce(Return(RespondEmpty())) | |
516 .WillOnce(Return(nullptr)); | |
517 | |
518 bool has_folder = false; | |
519 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
520 kwallet_dbus_.HasFolder(123, "wallet", "app", &has_folder)); | |
521 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
522 kwallet_dbus_.HasFolder(123, "wallet", "app", &has_folder)); | |
523 } | |
524 | |
525 TEST_P(KWalletDBusTest, CreateFolder) { | |
526 EXPECT_CALL( | |
527 *mock_kwallet_proxy_.get(), | |
528 MockCallMethodAndBlock(Calls(kKWalletInterface, "createFolder"), _)) | |
529 .WillOnce(DoAll(PopIntStringString(123, "folder", "app"), | |
530 Return(RespondBool(true)))); | |
531 | |
532 bool created_folder = false; | |
533 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
534 kwallet_dbus_.CreateFolder(123, "folder", "app", &created_folder)); | |
535 EXPECT_EQ(true, created_folder); | |
536 } | |
537 | |
538 TEST_P(KWalletDBusTest, CreateFolderErrors) { | |
539 EXPECT_CALL( | |
540 *mock_kwallet_proxy_.get(), | |
541 MockCallMethodAndBlock(Calls(kKWalletInterface, "createFolder"), _)) | |
542 .WillOnce(Return(RespondEmpty())) | |
543 .WillOnce(Return(nullptr)); | |
544 | |
545 bool created_folder = false; | |
546 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
547 kwallet_dbus_.CreateFolder(123, "folder", "app", &created_folder)); | |
548 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
549 kwallet_dbus_.CreateFolder(123, "folder", "app", &created_folder)); | |
550 } | |
551 | |
552 } // namespace | |
OLD | NEW |