1 /* libsecret - GLib wrapper for Secret Service
3 * Copyright 2011 Red Hat Inc.
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.
12 * Author: Stef Walter <stefw@gnome.org>
18 #include "secret-item.h"
19 #include "secret-service.h"
20 #include "secret-private.h"
21 #include "secret-prompt.h"
23 #include "mock-service.h"
25 #include "egg/egg-testing.h"
33 SecretService *service;
41 const gchar *mock_script = data;
43 mock_service_start (mock_script, &error);
44 g_assert_no_error (error);
46 test->service = secret_service_get_sync (SECRET_SERVICE_NONE, NULL, &error);
47 g_assert_no_error (error);
48 g_object_add_weak_pointer (G_OBJECT (test->service), (gpointer *)&test->service);
55 g_object_unref (test->service);
56 secret_service_disconnect ();
57 g_assert (test->service == NULL);
63 on_async_result (GObject *source,
67 GAsyncResult **ret = user_data;
68 g_assert (ret != NULL);
69 g_assert (*ret == NULL);
70 *ret = g_object_ref (result);
71 egg_test_wait_stop ();
75 on_idle_increment (gpointer user_data)
77 guint *value = user_data;
83 test_perform_sync (Test *test,
92 /* Verify that main loop does not run during this call */
93 increment_id = g_idle_add (on_idle_increment, &value);
95 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/simple");
97 retval = secret_prompt_perform_sync (prompt, NULL, NULL, NULL, &error);
98 g_assert_no_error (error);
99 g_assert (retval != NULL);
100 g_variant_unref (retval);
101 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
103 g_assert_cmpuint (value, ==, 0);
104 g_source_remove (increment_id);
106 g_object_unref (prompt);
107 g_assert (prompt == NULL);
111 test_perform_run (Test *test,
112 gconstpointer unused)
114 SecretPrompt *prompt;
115 GError *error = NULL;
120 /* Verify that main loop does run during this call */
121 increment_id = g_idle_add (on_idle_increment, &value);
123 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/simple");
125 retval = secret_prompt_run (prompt, 0, NULL, NULL, &error);
126 g_assert_no_error (error);
127 g_assert (retval != NULL);
128 g_variant_unref (retval);
129 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
131 g_assert_cmpuint (value, >, 0);
132 g_source_remove (increment_id);
134 /* Make sure everything completes */
135 egg_test_wait_idle ();
137 g_object_unref (prompt);
138 g_assert (prompt == NULL);
142 test_perform_async (Test *test,
143 gconstpointer unused)
145 SecretPrompt *prompt;
146 GError *error = NULL;
147 GAsyncResult *result = NULL;
150 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/simple");
151 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
153 secret_prompt_perform (prompt, 0, NULL, NULL, on_async_result, &result);
154 g_assert (result == NULL);
158 retval = secret_prompt_perform_finish (prompt, result, &error);
159 g_assert_no_error (error);
160 g_assert (retval != NULL);
161 g_variant_unref (retval);
162 g_object_unref (result);
164 /* Make sure everything completes */
165 egg_test_wait_idle ();
167 g_object_unref (prompt);
168 g_assert (prompt == NULL);
172 test_perform_cancel (Test *test,
173 gconstpointer unused)
175 SecretPrompt *prompt;
176 GError *error = NULL;
177 GAsyncResult *result = NULL;
178 GCancellable *cancellable;
181 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/delay");
182 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
184 cancellable = g_cancellable_new ();
185 secret_prompt_perform (prompt, 0, NULL, cancellable, on_async_result, &result);
186 g_assert (result == NULL);
188 g_cancellable_cancel (cancellable);
189 g_object_unref (cancellable);
193 retval = secret_prompt_perform_finish (prompt, result, &error);
194 g_assert_no_error (error);
195 g_assert (retval != NULL);
196 g_variant_unref (retval);
198 g_object_unref (result);
199 g_object_unref (prompt);
201 /* Due to GDBus threading races */
202 egg_test_wait_until (100);
204 g_assert (prompt == NULL);
208 test_perform_fail (Test *test,
209 gconstpointer unused)
211 SecretPrompt *prompt;
212 GError *error = NULL;
215 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/error");
216 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
218 retval = secret_prompt_perform_sync (prompt, NULL, NULL, NULL, &error);
219 g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_NOT_SUPPORTED);
220 g_assert (retval == NULL);
222 g_object_unref (prompt);
223 g_assert (prompt == NULL);
227 test_perform_vanish (Test *test,
228 gconstpointer unused)
230 SecretPrompt *prompt;
231 GError *error = NULL;
234 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/vanish");
235 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
237 retval = secret_prompt_perform_sync (prompt, NULL, NULL, NULL, &error);
238 g_assert_no_error (error);
239 g_assert (retval == NULL);
241 g_object_unref (prompt);
242 g_assert (prompt == NULL);
246 test_prompt_result (Test *test,
247 gconstpointer unused)
249 SecretPrompt *prompt;
250 GError *error = NULL;
253 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/result");
254 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
256 retval = secret_prompt_perform_sync (prompt, 0, NULL, G_VARIANT_TYPE_STRING, &error);
257 g_assert_no_error (error);
258 g_assert (retval != NULL);
259 g_assert_cmpstr (g_variant_get_string (retval, NULL), ==, "Special Result");
260 g_variant_unref (retval);
262 g_object_unref (prompt);
263 g_assert (prompt == NULL);
267 test_prompt_window_id (Test *test,
268 gconstpointer unused)
270 SecretPrompt *prompt;
271 GError *error = NULL;
274 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/window");
275 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
277 retval = secret_prompt_perform_sync (prompt, "555", NULL, G_VARIANT_TYPE_STRING, &error);
278 g_assert_no_error (error);
279 g_assert (retval != NULL);
280 g_assert_cmpstr (g_variant_get_string (retval, NULL), ==, "555");
281 g_variant_unref (retval);
283 g_object_unref (prompt);
284 g_assert (prompt == NULL);
288 test_service_sync (Test *test,
289 gconstpointer unused)
291 SecretPrompt *prompt;
292 GError *error = NULL;
295 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/simple");
296 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
298 retval = secret_service_prompt_sync (test->service, prompt, NULL, NULL, &error);
299 g_assert_no_error (error);
300 g_assert (retval != NULL);
301 g_variant_unref (retval);
303 g_object_unref (prompt);
304 g_assert (prompt == NULL);
308 test_service_async (Test *test,
309 gconstpointer unused)
311 SecretPrompt *prompt;
312 GError *error = NULL;
313 GAsyncResult *result = NULL;
316 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/simple");
317 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
319 secret_service_prompt (test->service, prompt, NULL, NULL, on_async_result, &result);
320 g_assert (result == NULL);
324 retval = secret_service_prompt_finish (test->service, result, &error);
325 g_assert_no_error (error);
326 g_assert (retval != NULL);
327 g_variant_unref (retval);
328 g_object_unref (result);
330 /* Make sure everything completes */
331 egg_test_wait_idle ();
333 g_object_unref (prompt);
334 g_assert (prompt == NULL);
338 test_service_fail (Test *test,
339 gconstpointer unused)
341 SecretPrompt *prompt;
342 GError *error = NULL;
343 GAsyncResult *result = NULL;
346 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/error");
347 g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
349 secret_service_prompt (test->service, prompt, NULL, NULL, on_async_result, &result);
350 g_assert (result == NULL);
354 retval = secret_service_prompt_finish (test->service, result, &error);
355 g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_NOT_SUPPORTED);
356 g_assert (retval == NULL);
357 g_object_unref (result);
359 /* Make sure everything completes */
360 egg_test_wait_idle ();
362 g_object_unref (prompt);
363 g_assert (prompt == NULL);
367 test_service_path (Test *test,
368 gconstpointer unused)
370 GError *error = NULL;
371 GAsyncResult *result = NULL;
372 SecretPrompt *prompt;
375 prompt = _secret_prompt_instance (test->service, "/org/freedesktop/secrets/prompts/simple");
377 secret_service_prompt (test->service, prompt, NULL, NULL, on_async_result, &result);
378 g_assert (result == NULL);
380 g_object_unref (prompt);
383 retval = secret_service_prompt_finish (test->service, result, &error);
384 g_assert_no_error (error);
385 g_assert (retval != NULL);
386 g_variant_unref (retval);
387 g_object_unref (result);
389 /* Make sure everything completes */
390 egg_test_wait_idle ();
394 null_log_handler (const gchar *log_domain, GLogLevelFlags log_level,
395 const gchar *message, gpointer user_data)
401 main (int argc, char **argv)
403 g_test_init (&argc, &argv, NULL);
404 g_set_prgname ("test-prompt");
405 #if !GLIB_CHECK_VERSION(2,35,0)
409 /* Suppress these messages in tests */
410 g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG,
411 null_log_handler, NULL);
413 g_test_add ("/prompt/run", Test, "mock-service-prompt.py", setup, test_perform_run, teardown);
414 g_test_add ("/prompt/perform-sync", Test, "mock-service-prompt.py", setup, test_perform_sync, teardown);
415 g_test_add ("/prompt/perform-async", Test, "mock-service-prompt.py", setup, test_perform_async, teardown);
416 g_test_add ("/prompt/perform-cancel", Test, "mock-service-prompt.py", setup, test_perform_cancel, teardown);
417 g_test_add ("/prompt/perform-fail", Test, "mock-service-prompt.py", setup, test_perform_fail, teardown);
418 g_test_add ("/prompt/perform-vanish", Test, "mock-service-prompt.py", setup, test_perform_vanish, teardown);
419 g_test_add ("/prompt/result", Test, "mock-service-prompt.py", setup, test_prompt_result, teardown);
420 g_test_add ("/prompt/window-id", Test, "mock-service-prompt.py", setup, test_prompt_window_id, teardown);
422 g_test_add ("/prompt/service-sync", Test, "mock-service-prompt.py", setup, test_service_sync, teardown);
423 g_test_add ("/prompt/service-async", Test, "mock-service-prompt.py", setup, test_service_async, teardown);
424 g_test_add ("/prompt/service-path", Test, "mock-service-prompt.py", setup, test_service_path, teardown);
425 g_test_add ("/prompt/service-fail", Test, "mock-service-prompt.py", setup, test_service_fail, teardown);
427 return egg_tests_run_with_loop ();