1 /* libsecret - GLib wrapper for Secret Service
3 * Copyright 2011 Collabora Ltd.
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published
7 * by the Free Software Foundation; either version 2 of the licence or (at
8 * your option) any later version.
10 * See the included COPYING file for more information.
16 #include "secret-collection.h"
17 #include "secret-item.h"
18 #include "secret-service.h"
19 #include "secret-paths.h"
20 #include "secret-private.h"
22 #include "mock-service.h"
24 #include "egg/egg-testing.h"
32 SecretService *service;
36 setup_mock (Test *test,
40 const gchar *mock_script = data;
42 mock_service_start (mock_script, &error);
43 g_assert_no_error (error);
47 teardown_mock (Test *test,
54 on_complete_get_result (GObject *source,
58 GAsyncResult **ret = user_data;
59 g_assert (ret != NULL);
60 g_assert (*ret == NULL);
61 *ret = g_object_ref (result);
62 egg_test_wait_stop ();
68 SecretService *service1;
69 SecretService *service2;
70 SecretService *service3;
73 /* Both these sohuld point to the same thing */
75 service1 = secret_service_get_sync (SECRET_SERVICE_NONE, NULL, &error);
76 g_assert_no_error (error);
78 service2 = secret_service_get_sync (SECRET_SERVICE_NONE, NULL, &error);
79 g_assert_no_error (error);
81 g_assert (SECRET_IS_SERVICE (service1));
82 g_assert (service1 == service2);
84 g_object_unref (service1);
85 g_assert (G_IS_OBJECT (service1));
87 g_object_unref (service2);
88 secret_service_disconnect ();
89 egg_assert_not_object (service2);
91 /* Services were disconnected, so this should create a new one */
92 service3 = secret_service_get_sync (SECRET_SERVICE_NONE, NULL, &error);
93 g_assert (SECRET_IS_SERVICE (service3));
94 g_assert_no_error (error);
96 g_object_unref (service3);
97 secret_service_disconnect ();
98 egg_assert_not_object (service3);
102 test_get_async (void)
104 SecretService *service1;
105 SecretService *service2;
106 SecretService *service3;
107 GAsyncResult *result = NULL;
108 GError *error = NULL;
110 /* Both these sohuld point to the same thing */
112 secret_service_get (SECRET_SERVICE_NONE, NULL, on_complete_get_result, &result);
113 g_assert (result == NULL);
115 service1 = secret_service_get_finish (result, &error);
116 g_assert_no_error (error);
117 g_clear_object (&result);
119 secret_service_get (SECRET_SERVICE_NONE, NULL, on_complete_get_result, &result);
120 g_assert (result == NULL);
122 service2 = secret_service_get_finish (result, &error);
123 g_assert_no_error (error);
124 g_clear_object (&result);
126 g_assert (SECRET_IS_SERVICE (service1));
127 g_assert (service1 == service2);
129 g_object_unref (service1);
130 g_assert (G_IS_OBJECT (service1));
132 g_object_unref (service2);
133 secret_service_disconnect ();
134 egg_assert_not_object (service2);
136 /* Services were unreffed, so this should create a new one */
137 secret_service_get (SECRET_SERVICE_NONE, NULL, on_complete_get_result, &result);
138 g_assert (result == NULL);
140 service3 = secret_service_get_finish (result, &error);
141 g_assert_no_error (error);
142 g_clear_object (&result);
144 g_object_unref (service3);
145 secret_service_disconnect ();
146 egg_assert_not_object (service3);
150 test_get_more_sync (Test *test,
153 SecretService *service;
154 SecretService *service2;
155 GError *error = NULL;
159 service = secret_service_get_sync (SECRET_SERVICE_NONE, NULL, &error);
160 g_assert_no_error (error);
162 g_assert_cmpuint (secret_service_get_flags (service), ==, SECRET_SERVICE_NONE);
164 service2 = secret_service_get_sync (SECRET_SERVICE_LOAD_COLLECTIONS, NULL, &error);
165 g_assert_no_error (error);
167 g_assert (SECRET_IS_SERVICE (service));
168 g_assert (service == service2);
170 g_assert_cmpuint (secret_service_get_flags (service), ==, SECRET_SERVICE_LOAD_COLLECTIONS);
171 collections = secret_service_get_collections (service);
172 g_assert (collections != NULL);
173 g_list_free_full (collections, g_object_unref);
175 g_object_unref (service2);
177 service2 = secret_service_get_sync (SECRET_SERVICE_OPEN_SESSION, NULL, &error);
178 g_assert_no_error (error);
180 g_assert_cmpuint (secret_service_get_flags (service), ==, SECRET_SERVICE_OPEN_SESSION | SECRET_SERVICE_LOAD_COLLECTIONS);
181 path = secret_service_get_session_dbus_path (service);
182 g_assert (path != NULL);
184 g_object_unref (service2);
186 g_object_unref (service);
187 secret_service_disconnect ();
188 egg_assert_not_object (service);
192 test_get_more_async (Test *test,
195 GAsyncResult *result = NULL;
196 SecretService *service;
197 GError *error = NULL;
201 secret_service_get (SECRET_SERVICE_LOAD_COLLECTIONS | SECRET_SERVICE_OPEN_SESSION, NULL, on_complete_get_result, &result);
202 g_assert (result == NULL);
206 service = secret_service_get_finish (result, &error);
207 g_assert_no_error (error);
208 g_object_unref (result);
211 g_assert_cmpuint (secret_service_get_flags (service), ==, SECRET_SERVICE_OPEN_SESSION | SECRET_SERVICE_LOAD_COLLECTIONS);
212 path = secret_service_get_session_dbus_path (service);
213 g_assert (path != NULL);
215 collections = secret_service_get_collections (service);
216 g_assert (collections != NULL);
217 g_list_free_full (collections, g_object_unref);
219 g_object_unref (service);
220 secret_service_disconnect ();
221 egg_assert_not_object (service);
223 /* Now get a session with just collections */
225 secret_service_get (SECRET_SERVICE_LOAD_COLLECTIONS, NULL, on_complete_get_result, &result);
226 g_assert (result == NULL);
230 service = secret_service_get_finish (result, &error);
231 g_assert_no_error (error);
232 g_object_unref (result);
234 g_assert_cmpuint (secret_service_get_flags (service), ==, SECRET_SERVICE_LOAD_COLLECTIONS);
235 path = secret_service_get_session_dbus_path (service);
236 g_assert (path == NULL);
238 collections = secret_service_get_collections (service);
239 g_assert (collections != NULL);
240 g_list_free_full (collections, g_object_unref);
242 g_object_unref (service);
243 secret_service_disconnect ();
244 egg_assert_not_object (service);
250 SecretService *service1;
251 SecretService *service2;
252 GError *error = NULL;
254 /* Both these sohuld point to different things */
256 service1 = secret_service_new_sync (SECRET_TYPE_SERVICE, NULL,
257 SECRET_SERVICE_NONE, NULL, &error);
258 g_assert_no_error (error);
260 service2 = secret_service_new_sync (SECRET_TYPE_SERVICE, NULL,
261 SECRET_SERVICE_NONE, NULL, &error);
262 g_assert_no_error (error);
264 g_assert (SECRET_IS_SERVICE (service1));
265 g_assert (SECRET_IS_SERVICE (service2));
266 g_assert (service1 != service2);
268 g_object_unref (service1);
269 egg_assert_not_object (service1);
271 g_object_unref (service2);
272 egg_assert_not_object (service2);
276 test_new_async (void)
278 SecretService *service1;
279 SecretService *service2;
280 GAsyncResult *result = NULL;
281 GError *error = NULL;
283 /* Both these sohuld point to different things */
285 secret_service_new (SECRET_TYPE_SERVICE, NULL, SECRET_SERVICE_NONE,
286 NULL, on_complete_get_result, &result);
287 g_assert (result == NULL);
289 service1 = secret_service_new_finish (result, &error);
290 g_assert_no_error (error);
291 g_clear_object (&result);
293 secret_service_new (SECRET_TYPE_SERVICE, NULL, SECRET_SERVICE_NONE, NULL,
294 on_complete_get_result, &result);
295 g_assert (result == NULL);
297 service2 = secret_service_new_finish (result, &error);
298 g_assert_no_error (error);
299 g_clear_object (&result);
301 g_assert (SECRET_IS_SERVICE (service1));
302 g_assert (SECRET_IS_SERVICE (service2));
303 g_assert (service1 != service2);
305 g_object_unref (service1);
306 egg_assert_not_object (service1);
308 g_object_unref (service2);
309 egg_assert_not_object (service2);
313 test_new_more_sync (Test *test,
316 SecretService *service;
317 GError *error = NULL;
321 service = secret_service_new_sync (SECRET_TYPE_SERVICE, NULL, SECRET_SERVICE_NONE,
323 g_assert_no_error (error);
324 g_assert (SECRET_IS_SERVICE (service));
326 g_assert_cmpuint (secret_service_get_flags (service), ==, SECRET_SERVICE_NONE);
327 g_assert (secret_service_get_collections (service) == NULL);
328 g_assert (secret_service_get_session_dbus_path (service) == NULL);
330 g_object_unref (service);
331 egg_assert_not_object (service);
333 service = secret_service_new_sync (SECRET_TYPE_SERVICE, NULL,
334 SECRET_SERVICE_LOAD_COLLECTIONS, NULL, &error);
335 g_assert_no_error (error);
336 g_assert (SECRET_IS_SERVICE (service));
338 g_assert_cmpuint (secret_service_get_flags (service), ==, SECRET_SERVICE_LOAD_COLLECTIONS);
339 collections = secret_service_get_collections (service);
340 g_assert (collections != NULL);
341 g_list_free_full (collections, g_object_unref);
342 g_assert (secret_service_get_session_dbus_path (service) == NULL);
344 g_object_unref (service);
345 egg_assert_not_object (service);
347 service = secret_service_new_sync (SECRET_TYPE_SERVICE, NULL,
348 SECRET_SERVICE_OPEN_SESSION, NULL, &error);
349 g_assert_no_error (error);
350 g_assert (SECRET_IS_SERVICE (service));
352 g_assert_cmpuint (secret_service_get_flags (service), ==, SECRET_SERVICE_OPEN_SESSION);
353 g_assert (secret_service_get_collections (service) == NULL);
354 path = secret_service_get_session_dbus_path (service);
355 g_assert (path != NULL);
357 g_object_unref (service);
358 egg_assert_not_object (service);
362 test_new_more_async (Test *test,
365 GAsyncResult *result = NULL;
366 SecretService *service;
367 GError *error = NULL;
371 secret_service_new (SECRET_TYPE_SERVICE, NULL,
372 SECRET_SERVICE_LOAD_COLLECTIONS | SECRET_SERVICE_OPEN_SESSION, NULL, on_complete_get_result, &result);
373 g_assert (result == NULL);
377 service = secret_service_new_finish (result, &error);
378 g_assert_no_error (error);
379 g_object_unref (result);
382 g_assert_cmpuint (secret_service_get_flags (service), ==, SECRET_SERVICE_OPEN_SESSION | SECRET_SERVICE_LOAD_COLLECTIONS);
383 path = secret_service_get_session_dbus_path (service);
384 g_assert (path != NULL);
386 collections = secret_service_get_collections (service);
387 g_assert (collections != NULL);
388 g_list_free_full (collections, g_object_unref);
390 g_object_unref (service);
391 egg_assert_not_object (service);
393 /* Now get a session with just collections */
395 secret_service_new (SECRET_TYPE_SERVICE, NULL, SECRET_SERVICE_LOAD_COLLECTIONS,
396 NULL, on_complete_get_result, &result);
397 g_assert (result == NULL);
401 service = secret_service_new_finish (result, &error);
402 g_assert_no_error (error);
403 g_object_unref (result);
405 g_assert_cmpuint (secret_service_get_flags (service), ==, SECRET_SERVICE_LOAD_COLLECTIONS);
406 path = secret_service_get_session_dbus_path (service);
407 g_assert (path == NULL);
409 collections = secret_service_get_collections (service);
410 g_assert (collections != NULL);
411 g_list_free_full (collections, g_object_unref);
413 g_object_unref (service);
414 egg_assert_not_object (service);
418 test_connect_async (Test *test,
421 GError *error = NULL;
422 GAsyncResult *result = NULL;
423 SecretService *service;
426 /* Passing false, not session */
427 secret_service_get (SECRET_SERVICE_NONE, NULL, on_complete_get_result, &result);
428 g_assert (result == NULL);
432 service = secret_service_get_finish (result, &error);
433 g_assert (SECRET_IS_SERVICE (service));
434 g_assert_no_error (error);
435 g_object_unref (result);
437 path = secret_service_get_session_dbus_path (service);
438 g_assert (path == NULL);
440 g_object_unref (service);
441 secret_service_disconnect ();
442 egg_assert_not_object (service);
446 test_connect_ensure_async (Test *test,
449 GError *error = NULL;
450 GAsyncResult *result = NULL;
451 SecretService *service;
454 /* Passing true, ensures session is established */
455 secret_service_get (SECRET_SERVICE_OPEN_SESSION, NULL, on_complete_get_result, &result);
456 g_assert (result == NULL);
460 service = secret_service_get_finish (result, &error);
461 g_assert_no_error (error);
462 g_assert (SECRET_IS_SERVICE (service));
463 g_object_unref (result);
465 path = secret_service_get_session_dbus_path (service);
466 g_assert (path != NULL);
468 g_object_unref (service);
469 secret_service_disconnect ();
470 egg_assert_not_object (service);
474 test_ensure_sync (Test *test,
477 GError *error = NULL;
478 SecretService *service;
479 SecretServiceFlags flags;
482 /* Passing true, ensures session is established */
483 service = secret_service_new_sync (SECRET_TYPE_SERVICE, NULL,
484 SECRET_SERVICE_NONE, NULL, &error);
485 g_assert_no_error (error);
486 g_assert (service != NULL);
488 flags = secret_service_get_flags (service);
489 g_assert_cmpuint (flags, ==, SECRET_SERVICE_NONE);
491 ret = secret_service_load_collections_sync (service, NULL, &error);
492 g_assert_no_error (error);
493 g_assert (ret == TRUE);
495 g_object_get (service, "flags", &flags, NULL);
496 g_assert_cmpuint (flags, ==, SECRET_SERVICE_LOAD_COLLECTIONS);
498 ret = secret_service_ensure_session_sync (service, NULL, &error);
499 g_assert_no_error (error);
500 g_assert (ret == TRUE);
502 flags = secret_service_get_flags (service);
503 g_assert_cmpuint (flags, ==, SECRET_SERVICE_OPEN_SESSION | SECRET_SERVICE_LOAD_COLLECTIONS);
505 g_object_unref (service);
506 egg_assert_not_object (service);
510 test_ensure_async (Test *test,
513 GAsyncResult *result = NULL;
514 SecretServiceFlags flags;
515 SecretService *service;
516 GError *error = NULL;
519 /* Passing true, ensures session is established */
520 service = secret_service_new_sync (SECRET_TYPE_SERVICE, NULL,
521 SECRET_SERVICE_NONE, NULL, &error);
522 g_assert_no_error (error);
523 g_assert (service != NULL);
525 flags = secret_service_get_flags (service);
526 g_assert_cmpuint (flags, ==, SECRET_SERVICE_NONE);
528 secret_service_load_collections (service, NULL, on_complete_get_result, &result);
529 g_assert (result == NULL);
533 ret = secret_service_load_collections_finish (service, result, &error);
534 g_assert_no_error (error);
535 g_assert (ret == TRUE);
536 g_object_unref (result);
539 g_object_get (service, "flags", &flags, NULL);
540 g_assert_cmpuint (flags, ==, SECRET_SERVICE_LOAD_COLLECTIONS);
542 secret_service_ensure_session (service, NULL, on_complete_get_result, &result);
543 g_assert (result == NULL);
547 ret = secret_service_ensure_session_finish (service, result, &error);
548 g_assert_no_error (error);
549 g_assert (ret == TRUE);
550 g_object_unref (result);
553 flags = secret_service_get_flags (service);
554 g_assert_cmpuint (flags, ==, SECRET_SERVICE_OPEN_SESSION | SECRET_SERVICE_LOAD_COLLECTIONS);
556 g_object_unref (service);
557 egg_assert_not_object (service);
561 main (int argc, char **argv)
563 g_test_init (&argc, &argv, NULL);
564 g_set_prgname ("test-service");
567 g_test_add_func ("/service/get-sync", test_get_sync);
568 g_test_add_func ("/service/get-async", test_get_async);
569 g_test_add ("/service/get-more-sync", Test, "mock-service-normal.py", setup_mock, test_get_more_sync, teardown_mock);
570 g_test_add ("/service/get-more-async", Test, "mock-service-normal.py", setup_mock, test_get_more_async, teardown_mock);
572 g_test_add_func ("/service/new-sync", test_new_sync);
573 g_test_add_func ("/service/new-async", test_new_async);
574 g_test_add ("/service/new-more-sync", Test, "mock-service-normal.py", setup_mock, test_new_more_sync, teardown_mock);
575 g_test_add ("/service/new-more-async", Test, "mock-service-normal.py", setup_mock, test_new_more_async, teardown_mock);
577 g_test_add ("/service/connect-sync", Test, "mock-service-normal.py", setup_mock, test_connect_async, teardown_mock);
578 g_test_add ("/service/connect-ensure-sync", Test, "mock-service-normal.py", setup_mock, test_connect_ensure_async, teardown_mock);
579 g_test_add ("/service/ensure-sync", Test, "mock-service-normal.py", setup_mock, test_ensure_sync, teardown_mock);
580 g_test_add ("/service/ensure-async", Test, "mock-service-normal.py", setup_mock, test_ensure_async, teardown_mock);
582 return egg_tests_run_with_loop ();