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::AllOf; | |
24 using testing::DoAll; | |
25 using testing::ElementsAreArray; | |
26 using testing::Invoke; | |
27 using testing::Return; | |
28 using testing::StrictMock; | |
29 | |
30 const char kKWalletInterface[] = "org.kde.KWallet"; | |
31 const char kKLauncherInterface[] = "org.kde.KLauncher"; | |
32 | |
33 dbus::Response* RespondBool(bool value) { | |
34 std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
35 dbus::MessageWriter writer(response.get()); | |
36 writer.AppendBool(value); | |
37 return response.release(); | |
38 } | |
39 | |
40 dbus::Response* RespondString(const std::string& value) { | |
41 std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
42 dbus::MessageWriter writer(response.get()); | |
43 writer.AppendString(value); | |
44 return response.release(); | |
45 } | |
46 | |
47 dbus::Response* RespondBytes(const std::vector<uint8_t>& bytes) { | |
48 std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
49 dbus::MessageWriter writer(response.get()); | |
50 writer.AppendArrayOfBytes(bytes.data(), bytes.size()); | |
51 return response.release(); | |
52 } | |
53 | |
54 dbus::Response* RespondArrayOfStrings(const std::vector<std::string>& strings) { | |
55 std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
56 dbus::MessageWriter writer(response.get()); | |
57 writer.AppendArrayOfStrings(strings); | |
58 return response.release(); | |
59 } | |
60 | |
61 dbus::Response* RespondInt32(int value) { | |
62 std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
63 dbus::MessageWriter writer(response.get()); | |
64 writer.AppendInt32(value); | |
65 return response.release(); | |
66 } | |
67 | |
68 dbus::Response* RespondEmpty() { | |
69 return dbus::Response::CreateEmpty().release(); | |
70 } | |
71 | |
72 class KWalletDBusTest | |
73 : public testing::TestWithParam<base::nix::DesktopEnvironment> { | |
74 public: | |
75 KWalletDBusTest() : desktop_env_(GetParam()), kwallet_dbus_(desktop_env_) { | |
76 if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5) { | |
77 dbus_service_name_ = "org.kde.kwalletd5"; | |
78 dbus_path_ = "/modules/kwalletd5"; | |
79 kwalletd_name_ = "kwalletd5"; | |
80 } else { | |
81 dbus_service_name_ = "org.kde.kwalletd"; | |
82 dbus_path_ = "/modules/kwalletd"; | |
83 kwalletd_name_ = "kwalletd"; | |
84 } | |
85 | |
86 dbus::Bus::Options options; | |
87 options.bus_type = dbus::Bus::SESSION; | |
88 mock_session_bus_ = new dbus::MockBus(options); | |
89 | |
90 mock_klauncher_proxy_ = new StrictMock<dbus::MockObjectProxy>( | |
91 mock_session_bus_.get(), "org.kde.klauncher", | |
92 dbus::ObjectPath("/KLauncher")); | |
93 mock_kwallet_proxy_ = new StrictMock<dbus::MockObjectProxy>( | |
94 mock_session_bus_.get(), dbus_service_name_, | |
95 dbus::ObjectPath(dbus_path_)); | |
96 | |
97 // The kwallet proxy is aquired once, when preparing |kwallet_dbus_| | |
98 EXPECT_CALL( | |
99 *mock_session_bus_.get(), | |
100 GetObjectProxy(dbus_service_name_, dbus::ObjectPath(dbus_path_))) | |
101 .WillOnce(Return(mock_kwallet_proxy_.get())); | |
102 | |
103 kwallet_dbus_.SetSessionBus(mock_session_bus_); | |
104 | |
105 testing::Mock::VerifyAndClearExpectations(mock_session_bus_.get()); | |
106 } | |
107 | |
108 protected: | |
109 const base::nix::DesktopEnvironment desktop_env_; | |
110 scoped_refptr<dbus::MockBus> mock_session_bus_; | |
111 scoped_refptr<dbus::MockObjectProxy> mock_klauncher_proxy_; | |
112 scoped_refptr<dbus::MockObjectProxy> mock_kwallet_proxy_; | |
113 KWalletDBus kwallet_dbus_; | |
114 | |
115 std::string dbus_service_name_; | |
116 std::string dbus_path_; | |
117 std::string kwalletd_name_; | |
118 | |
119 private: | |
120 DISALLOW_COPY_AND_ASSIGN(KWalletDBusTest); | |
121 }; | |
122 | |
123 INSTANTIATE_TEST_CASE_P(, | |
124 KWalletDBusTest, | |
125 ::testing::Values(base::nix::DESKTOP_ENVIRONMENT_KDE4, | |
126 base::nix::DESKTOP_ENVIRONMENT_KDE5)); | |
127 | |
128 // Matches a method call to the specified dbus target. | |
129 MATCHER_P2(Calls, interface, member, "") { | |
130 return arg->GetMember() == member && arg->GetInterface() == interface; | |
131 } | |
132 | |
133 // Pops items from the dbus message and compares them to the expected values. | |
134 MATCHER_P3(ArgumentsAreIntStringString, int_1, str_2, str_3, "") { | |
135 dbus::MessageReader reader(arg); | |
136 | |
137 int i; | |
138 EXPECT_TRUE(reader.PopInt32(&i)); | |
139 if (int_1 != i) | |
140 return false; | |
141 | |
142 std::string str; | |
143 EXPECT_TRUE(reader.PopString(&str)); | |
144 if (str_2 != str) | |
145 return false; | |
146 | |
147 EXPECT_TRUE(reader.PopString(&str)); | |
148 if (str_3 != str) | |
149 return false; | |
150 | |
151 return true; | |
152 } | |
153 | |
154 // Pops items from the dbus message and compares them to the expected values. | |
155 MATCHER_P4(ArgumentsAreIntStringStringString, int_1, str_2, str_3, str_4, "") { | |
156 dbus::MessageReader reader(arg); | |
157 | |
158 int i; | |
159 EXPECT_TRUE(reader.PopInt32(&i)); | |
160 if (int_1 != i) | |
161 return false; | |
162 | |
163 std::string str; | |
164 EXPECT_TRUE(reader.PopString(&str)); | |
165 if (str_2 != str) | |
166 return false; | |
167 | |
168 EXPECT_TRUE(reader.PopString(&str)); | |
169 if (str_3 != str) | |
170 return false; | |
171 | |
172 EXPECT_TRUE(reader.PopString(&str)); | |
173 if (str_4 != str) | |
174 return false; | |
175 | |
176 return true; | |
177 } | |
178 | |
179 // Pops items from the dbus message and compares them to the expected values. | |
180 MATCHER_P5(ArgumentsAreIntStringStringBytesString, | |
181 int_1, | |
182 str_2, | |
183 str_3, | |
184 vec_4, | |
185 str_5, | |
186 "") { | |
187 dbus::MessageReader reader(arg); | |
188 | |
189 int i; | |
190 EXPECT_TRUE(reader.PopInt32(&i)); | |
191 if (int_1 != i) | |
192 return false; | |
193 | |
194 std::string str; | |
195 EXPECT_TRUE(reader.PopString(&str)); | |
196 if (str_2 != str) | |
197 return false; | |
198 | |
199 EXPECT_TRUE(reader.PopString(&str)); | |
200 if (str_3 != str) | |
201 return false; | |
202 | |
203 const uint8_t* bytes = nullptr; | |
204 size_t length = 0; | |
205 EXPECT_TRUE(reader.PopArrayOfBytes(&bytes, &length)); | |
206 std::vector<uint8_t> vec; | |
207 vec.assign(bytes, bytes + length); | |
208 if (vec_4 != vec) | |
209 return false; | |
210 | |
211 EXPECT_TRUE(reader.PopString(&str)); | |
212 if (str_5 != str) | |
213 return false; | |
214 | |
215 return true; | |
216 } | |
217 | |
218 // Pops items from the dbus message and compares them to the expected values. | |
219 MATCHER_P3(ArgumentsAreStringInt64String, str_1, int_2, str_3, "") { | |
220 dbus::MessageReader reader(arg); | |
221 | |
222 std::string str; | |
223 EXPECT_TRUE(reader.PopString(&str)); | |
224 if (str_1 != str) | |
225 return false; | |
226 | |
227 int64_t i; | |
228 EXPECT_TRUE(reader.PopInt64(&i)); | |
229 if (int_2 != i) | |
230 return false; | |
231 | |
232 EXPECT_TRUE(reader.PopString(&str)); | |
233 if (str_3 != str) | |
234 return false; | |
235 | |
236 return true; | |
237 } | |
238 | |
239 // Pops items from the dbus message and compares them to the expected values. | |
240 MATCHER_P5(ArgumentsAreStringStringsStringsStringBool, | |
241 str_1, | |
242 vec_2, | |
243 vec_3, | |
244 str_4, | |
245 bool_5, | |
246 "") { | |
247 dbus::MessageReader reader(arg); | |
248 | |
249 std::string str; | |
250 EXPECT_TRUE(reader.PopString(&str)); | |
251 if (str_1 != str) | |
252 return false; | |
253 | |
254 std::vector<std::string> strings; | |
255 EXPECT_TRUE(reader.PopArrayOfStrings(&strings)); | |
256 if (vec_2 != strings) | |
257 return false; | |
258 | |
259 EXPECT_TRUE(reader.PopArrayOfStrings(&strings)); | |
260 if (vec_3 != strings) | |
261 return false; | |
262 | |
263 EXPECT_TRUE(reader.PopString(&str)); | |
264 if (str_4 != str) | |
265 return false; | |
266 | |
267 bool b; | |
268 EXPECT_TRUE(reader.PopBool(&b)); | |
269 if (bool_5 != b) | |
270 return false; | |
271 | |
272 return true; | |
273 } | |
274 | |
275 TEST_P(KWalletDBusTest, StartWalletd) { | |
276 // The receiver of the message takes ownership of the response object. | |
277 dbus::Response* response_success = RespondEmpty(); | |
278 dbus::MessageWriter writer(response_success); | |
279 writer.AppendInt32(0); // return code | |
280 writer.AppendString("dbus_name"); | |
281 writer.AppendString(std::string()); // error message | |
282 writer.AppendInt32(100); // pid | |
283 | |
284 EXPECT_CALL( | |
285 *mock_session_bus_.get(), | |
286 GetObjectProxy("org.kde.klauncher", dbus::ObjectPath("/KLauncher"))) | |
287 .WillOnce(Return(mock_klauncher_proxy_.get())); | |
288 | |
289 EXPECT_CALL( | |
290 *mock_klauncher_proxy_.get(), | |
291 MockCallMethodAndBlock( | |
292 AllOf(Calls(kKLauncherInterface, "start_service_by_desktop_name"), | |
293 ArgumentsAreStringStringsStringsStringBool( | |
294 kwalletd_name_, std::vector<std::string>(), | |
295 std::vector<std::string>(), std::string(), false)), | |
296 _)) | |
297 .WillOnce(Return(response_success)); | |
298 | |
299 EXPECT_TRUE(kwallet_dbus_.StartKWalletd()); | |
300 } | |
301 | |
302 TEST_P(KWalletDBusTest, StartWalletdErrorRead) { | |
303 EXPECT_CALL( | |
304 *mock_session_bus_.get(), | |
305 GetObjectProxy("org.kde.klauncher", dbus::ObjectPath("/KLauncher"))) | |
306 .WillOnce(Return(mock_klauncher_proxy_.get())); | |
307 | |
308 EXPECT_CALL( | |
309 *mock_klauncher_proxy_.get(), | |
310 MockCallMethodAndBlock( | |
311 Calls(kKLauncherInterface, "start_service_by_desktop_name"), _)) | |
312 .WillOnce(Return(RespondEmpty())); | |
313 | |
314 EXPECT_FALSE(kwallet_dbus_.StartKWalletd()); | |
315 } | |
316 | |
317 TEST_P(KWalletDBusTest, StartWalletdErrorContact) { | |
318 EXPECT_CALL( | |
319 *mock_session_bus_.get(), | |
320 GetObjectProxy("org.kde.klauncher", dbus::ObjectPath("/KLauncher"))) | |
321 .WillRepeatedly(Return(mock_klauncher_proxy_.get())); | |
322 | |
323 EXPECT_CALL( | |
324 *mock_klauncher_proxy_.get(), | |
325 MockCallMethodAndBlock( | |
326 Calls(kKLauncherInterface, "start_service_by_desktop_name"), _)) | |
327 .WillOnce(Return(nullptr)); | |
328 | |
329 EXPECT_FALSE(kwallet_dbus_.StartKWalletd()); | |
330 } | |
331 | |
332 TEST_P(KWalletDBusTest, IsEnabledTrue) { | |
333 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
334 MockCallMethodAndBlock(Calls(kKWalletInterface, "isEnabled"), _)) | |
335 .WillOnce(Return(RespondBool(true))); | |
336 | |
337 bool is_enabled = false; | |
338 EXPECT_EQ(KWalletDBus::Error::SUCCESS, kwallet_dbus_.IsEnabled(&is_enabled)); | |
339 EXPECT_TRUE(is_enabled); | |
340 } | |
341 | |
342 TEST_P(KWalletDBusTest, IsEnabledFalse) { | |
343 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
344 MockCallMethodAndBlock(Calls(kKWalletInterface, "isEnabled"), _)) | |
345 .WillOnce(Return(RespondBool(false))); | |
346 | |
347 bool is_enabled = true; | |
348 EXPECT_EQ(KWalletDBus::Error::SUCCESS, kwallet_dbus_.IsEnabled(&is_enabled)); | |
349 EXPECT_FALSE(is_enabled); | |
350 } | |
351 | |
352 TEST_P(KWalletDBusTest, IsEnabledErrorRead) { | |
353 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
354 MockCallMethodAndBlock(Calls(kKWalletInterface, "isEnabled"), _)) | |
355 .WillOnce(Return(RespondEmpty())); | |
356 | |
357 bool is_enabled = true; | |
358 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
359 kwallet_dbus_.IsEnabled(&is_enabled)); | |
360 } | |
361 | |
362 TEST_P(KWalletDBusTest, IsEnabledErrorContact) { | |
363 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
364 MockCallMethodAndBlock(Calls(kKWalletInterface, "isEnabled"), _)) | |
365 .WillOnce(Return(nullptr)); | |
366 | |
367 bool is_enabled = true; | |
368 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
369 kwallet_dbus_.IsEnabled(&is_enabled)); | |
370 } | |
371 | |
372 TEST_P(KWalletDBusTest, NetworkWallet) { | |
373 EXPECT_CALL( | |
374 *mock_kwallet_proxy_.get(), | |
375 MockCallMethodAndBlock(Calls(kKWalletInterface, "networkWallet"), _)) | |
376 .WillOnce(Return(RespondString("mock_wallet"))); | |
377 | |
378 std::string wallet; | |
379 EXPECT_EQ(KWalletDBus::Error::SUCCESS, kwallet_dbus_.NetworkWallet(&wallet)); | |
380 EXPECT_EQ("mock_wallet", wallet); | |
381 } | |
382 | |
383 TEST_P(KWalletDBusTest, NetworkWalletErrorRead) { | |
384 EXPECT_CALL( | |
385 *mock_kwallet_proxy_.get(), | |
386 MockCallMethodAndBlock(Calls(kKWalletInterface, "networkWallet"), _)) | |
387 .WillOnce(Return(RespondEmpty())); | |
388 | |
389 std::string wallet; | |
390 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
391 kwallet_dbus_.NetworkWallet(&wallet)); | |
392 } | |
393 | |
394 TEST_P(KWalletDBusTest, NetworkWalletErrorContact) { | |
395 EXPECT_CALL( | |
396 *mock_kwallet_proxy_.get(), | |
397 MockCallMethodAndBlock(Calls(kKWalletInterface, "networkWallet"), _)) | |
398 .WillOnce(Return(nullptr)); | |
399 | |
400 std::string wallet; | |
401 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
402 kwallet_dbus_.NetworkWallet(&wallet)); | |
403 } | |
404 | |
405 TEST_P(KWalletDBusTest, Open) { | |
406 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
407 MockCallMethodAndBlock( | |
408 AllOf(Calls(kKWalletInterface, "open"), | |
409 ArgumentsAreStringInt64String("wallet", 0, "app")), | |
410 _)) | |
411 .WillOnce(Return(RespondInt32(1234))); | |
412 | |
413 int ret; | |
414 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
415 kwallet_dbus_.Open("wallet", "app", &ret)); | |
416 EXPECT_EQ(1234, ret); | |
417 } | |
418 | |
419 TEST_P(KWalletDBusTest, OpenErrorRead) { | |
420 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
421 MockCallMethodAndBlock(Calls(kKWalletInterface, "open"), _)) | |
422 .WillOnce(Return(RespondEmpty())); | |
423 | |
424 int ret; | |
425 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
426 kwallet_dbus_.Open("wallet", "app", &ret)); | |
427 } | |
428 | |
429 TEST_P(KWalletDBusTest, OpenErrorContact) { | |
430 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
431 MockCallMethodAndBlock(Calls(kKWalletInterface, "open"), _)) | |
432 .WillOnce(Return(nullptr)); | |
433 | |
434 int ret; | |
435 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
436 kwallet_dbus_.Open("wallet", "app", &ret)); | |
437 } | |
438 | |
439 TEST_P(KWalletDBusTest, HasEntry) { | |
440 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
441 MockCallMethodAndBlock(AllOf(Calls(kKWalletInterface, "hasEntry"), | |
442 ArgumentsAreIntStringStringString( | |
443 123, "folder", "realm", "app")), | |
444 _)) | |
445 .WillOnce(Return(RespondBool(true))); | |
446 | |
447 bool has_entry = false; | |
448 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
449 kwallet_dbus_.HasEntry(123, "folder", "realm", "app", &has_entry)); | |
450 EXPECT_TRUE(has_entry); | |
451 } | |
452 | |
453 TEST_P(KWalletDBusTest, HasEntryErrorRead) { | |
454 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
455 MockCallMethodAndBlock(Calls(kKWalletInterface, "hasEntry"), _)) | |
456 .WillOnce(Return(RespondEmpty())); | |
457 | |
458 bool has_entry = false; | |
459 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
460 kwallet_dbus_.HasEntry(123, "folder", "realm", "app", &has_entry)); | |
461 } | |
462 | |
463 TEST_P(KWalletDBusTest, HasEntryErrorContact) { | |
464 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
465 MockCallMethodAndBlock(Calls(kKWalletInterface, "hasEntry"), _)) | |
466 .WillOnce(Return(nullptr)); | |
467 | |
468 bool has_entry = false; | |
469 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
470 kwallet_dbus_.HasEntry(123, "folder", "realm", "app", &has_entry)); | |
471 } | |
472 | |
473 TEST_P(KWalletDBusTest, ReadEntry) { | |
474 const std::vector<uint8_t> bytes_expected = {1, 2, 1, 2}; | |
475 EXPECT_CALL( | |
476 *mock_kwallet_proxy_.get(), | |
477 MockCallMethodAndBlock(AllOf(Calls(kKWalletInterface, "readEntry"), | |
478 ArgumentsAreIntStringStringString( | |
479 123, "folder", "realm", "app")), | |
480 _)) | |
481 .WillOnce(Return(RespondBytes(bytes_expected))); | |
482 | |
483 std::vector<uint8_t> bytes; | |
484 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
485 kwallet_dbus_.ReadEntry(123, "folder", "realm", "app", &bytes)); | |
486 EXPECT_EQ(bytes_expected, bytes); | |
487 } | |
488 | |
489 TEST_P(KWalletDBusTest, ReadEntryErrorRead) { | |
490 std::vector<uint8_t> bytes_expected = {1, 2, 1, 2}; | |
491 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
492 MockCallMethodAndBlock(Calls(kKWalletInterface, "readEntry"), _)) | |
493 .WillOnce(Return(RespondEmpty())); | |
494 | |
495 std::vector<uint8_t> bytes; | |
496 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
497 kwallet_dbus_.ReadEntry(123, "folder", "realm", "app", &bytes)); | |
498 } | |
499 | |
500 TEST_P(KWalletDBusTest, ReadEntryErrorContact) { | |
501 std::vector<uint8_t> bytes_expected = {1, 2, 1, 2}; | |
502 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
503 MockCallMethodAndBlock(Calls(kKWalletInterface, "readEntry"), _)) | |
504 .WillOnce(Return(nullptr)); | |
505 | |
506 std::vector<uint8_t> bytes; | |
507 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
508 kwallet_dbus_.ReadEntry(123, "folder", "realm", "app", &bytes)); | |
509 } | |
510 | |
511 TEST_P(KWalletDBusTest, EntryList) { | |
512 std::vector<std::string> strings_expected = {"one", "two"}; | |
513 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
514 MockCallMethodAndBlock( | |
515 AllOf(Calls(kKWalletInterface, "entryList"), | |
516 ArgumentsAreIntStringString(123, "folder", "app")), | |
517 _)) | |
518 .WillOnce(Return(RespondArrayOfStrings(strings_expected))); | |
519 | |
520 std::vector<std::string> strings; | |
521 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
522 kwallet_dbus_.EntryList(123, "folder", "app", &strings)); | |
523 EXPECT_EQ(strings_expected, strings); | |
524 } | |
525 | |
526 TEST_P(KWalletDBusTest, EntryListErrorRead) { | |
527 std::vector<std::string> strings_expected = {"one", "two"}; | |
528 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
529 MockCallMethodAndBlock(Calls(kKWalletInterface, "entryList"), _)) | |
530 .WillOnce(Return(RespondEmpty())); | |
531 | |
532 std::vector<std::string> strings; | |
533 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
534 kwallet_dbus_.EntryList(123, "folder", "app", &strings)); | |
535 } | |
536 | |
537 TEST_P(KWalletDBusTest, EntryListErrorContact) { | |
538 std::vector<std::string> strings_expected = {"one", "two"}; | |
539 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
540 MockCallMethodAndBlock(Calls(kKWalletInterface, "entryList"), _)) | |
541 .WillOnce(Return(nullptr)); | |
542 | |
543 std::vector<std::string> strings; | |
544 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
545 kwallet_dbus_.EntryList(123, "folder", "app", &strings)); | |
546 } | |
547 | |
548 TEST_P(KWalletDBusTest, RemoveEntry) { | |
549 EXPECT_CALL( | |
550 *mock_kwallet_proxy_.get(), | |
551 MockCallMethodAndBlock(AllOf(Calls(kKWalletInterface, "removeEntry"), | |
552 ArgumentsAreIntStringStringString( | |
553 123, "folder", "realm", "app")), | |
554 _)) | |
555 .WillOnce(Return(RespondInt32(0))); | |
556 | |
557 int ret; | |
558 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
559 kwallet_dbus_.RemoveEntry(123, "folder", "realm", "app", &ret)); | |
560 EXPECT_EQ(0, ret); | |
561 } | |
562 | |
563 TEST_P(KWalletDBusTest, RemoveEntryErrorRead) { | |
564 EXPECT_CALL( | |
565 *mock_kwallet_proxy_.get(), | |
566 MockCallMethodAndBlock(Calls(kKWalletInterface, "removeEntry"), _)) | |
567 .WillOnce(Return(RespondEmpty())); | |
568 | |
569 int ret; | |
570 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
571 kwallet_dbus_.RemoveEntry(123, "folder", "realm", "app", &ret)); | |
572 } | |
573 | |
574 TEST_P(KWalletDBusTest, RemoveEntryErrorContact) { | |
575 EXPECT_CALL( | |
576 *mock_kwallet_proxy_.get(), | |
577 MockCallMethodAndBlock(Calls(kKWalletInterface, "removeEntry"), _)) | |
578 .WillOnce(Return(nullptr)); | |
579 | |
580 int ret; | |
581 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
582 kwallet_dbus_.RemoveEntry(123, "folder", "realm", "app", &ret)); | |
583 } | |
584 | |
585 TEST_P(KWalletDBusTest, WriteEntry) { | |
586 std::vector<uint8_t> bytes = {1, 2, 3, 1}; | |
587 EXPECT_CALL( | |
588 *mock_kwallet_proxy_.get(), | |
589 MockCallMethodAndBlock(AllOf(Calls(kKWalletInterface, "writeEntry"), | |
590 ArgumentsAreIntStringStringBytesString( | |
591 123, "folder", "realm", bytes, "app")), | |
592 _)) | |
593 .WillOnce(Return(RespondInt32(0))); | |
594 | |
595 int ret; | |
596 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
597 kwallet_dbus_.WriteEntry(123, "folder", "realm", "app", | |
598 bytes.data(), bytes.size(), &ret)); | |
599 EXPECT_EQ(0, ret); | |
600 } | |
601 | |
602 TEST_P(KWalletDBusTest, WriteEntryErrorRead) { | |
603 std::vector<uint8_t> bytes = {1, 2, 3, 1}; | |
604 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
605 MockCallMethodAndBlock(Calls(kKWalletInterface, "writeEntry"), _)) | |
606 .WillOnce(Return(RespondEmpty())); | |
607 | |
608 int ret; | |
609 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
610 kwallet_dbus_.WriteEntry(123, "folder", "realm", "app", | |
611 bytes.data(), bytes.size(), &ret)); | |
612 } | |
613 | |
614 TEST_P(KWalletDBusTest, WriteEntryErrorContact) { | |
615 std::vector<uint8_t> bytes = {1, 2, 3, 1}; | |
616 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
617 MockCallMethodAndBlock(Calls(kKWalletInterface, "writeEntry"), _)) | |
618 .WillOnce(Return(nullptr)); | |
619 | |
620 int ret; | |
621 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
622 kwallet_dbus_.WriteEntry(123, "folder", "realm", "app", | |
623 bytes.data(), bytes.size(), &ret)); | |
624 } | |
625 | |
626 TEST_P(KWalletDBusTest, HasFolder) { | |
627 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
628 MockCallMethodAndBlock( | |
629 AllOf(Calls(kKWalletInterface, "hasFolder"), | |
630 ArgumentsAreIntStringString(123, "wallet", "app")), | |
631 _)) | |
632 .WillOnce(Return(RespondBool(true))); | |
633 | |
634 bool has_folder = false; | |
635 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
636 kwallet_dbus_.HasFolder(123, "wallet", "app", &has_folder)); | |
637 EXPECT_EQ(true, has_folder); | |
638 } | |
639 | |
640 TEST_P(KWalletDBusTest, HasFolderErrorRead) { | |
641 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
642 MockCallMethodAndBlock(Calls(kKWalletInterface, "hasFolder"), _)) | |
643 .WillOnce(Return(RespondEmpty())); | |
644 | |
645 bool has_folder = false; | |
646 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
647 kwallet_dbus_.HasFolder(123, "wallet", "app", &has_folder)); | |
648 } | |
649 | |
650 TEST_P(KWalletDBusTest, HasFolderErrorContact) { | |
651 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
652 MockCallMethodAndBlock(Calls(kKWalletInterface, "hasFolder"), _)) | |
653 .WillOnce(Return(nullptr)); | |
654 | |
655 bool has_folder = false; | |
656 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
657 kwallet_dbus_.HasFolder(123, "wallet", "app", &has_folder)); | |
658 } | |
659 | |
660 TEST_P(KWalletDBusTest, CreateFolder) { | |
661 EXPECT_CALL(*mock_kwallet_proxy_.get(), | |
662 MockCallMethodAndBlock( | |
663 AllOf(Calls(kKWalletInterface, "createFolder"), | |
664 ArgumentsAreIntStringString(123, "folder", "app")), | |
665 _)) | |
666 .WillOnce(Return(RespondBool(true))); | |
667 | |
668 bool created_folder = false; | |
669 EXPECT_EQ(KWalletDBus::Error::SUCCESS, | |
670 kwallet_dbus_.CreateFolder(123, "folder", "app", &created_folder)); | |
671 EXPECT_EQ(true, created_folder); | |
672 } | |
673 | |
674 TEST_P(KWalletDBusTest, CreateFolderErrorRead) { | |
675 EXPECT_CALL( | |
676 *mock_kwallet_proxy_.get(), | |
677 MockCallMethodAndBlock(Calls(kKWalletInterface, "createFolder"), _)) | |
678 .WillOnce(Return(RespondEmpty())); | |
679 | |
680 bool created_folder = false; | |
681 EXPECT_EQ(KWalletDBus::Error::CANNOT_READ, | |
682 kwallet_dbus_.CreateFolder(123, "folder", "app", &created_folder)); | |
683 } | |
684 | |
685 TEST_P(KWalletDBusTest, CreateFolderErrorContact) { | |
686 EXPECT_CALL( | |
687 *mock_kwallet_proxy_.get(), | |
688 MockCallMethodAndBlock(Calls(kKWalletInterface, "createFolder"), _)) | |
689 .WillOnce(Return(nullptr)); | |
690 | |
691 bool created_folder = false; | |
692 EXPECT_EQ(KWalletDBus::Error::CANNOT_CONTACT, | |
693 kwallet_dbus_.CreateFolder(123, "folder", "app", &created_folder)); | |
694 } | |
695 | |
696 } // namespace | |
OLD | NEW |