1 /* GSecret - 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 "gsecret-item.h"
17 #include "gsecret-service.h"
18 #include "gsecret-private.h"
20 #include "egg/egg-testing.h"
27 static gchar *MOCK_NAME = "org.mock.Service";
31 GDBusConnection *connection;
32 GSecretService *service;
40 const gchar *mock_script = data;
42 "python", (gchar *)mock_script,
47 g_spawn_async (SRCDIR, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &test->pid, &error);
48 g_assert_no_error (error);
49 g_usleep (200 * 1000);
51 test->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
52 g_assert_no_error (error);
54 test->service = _gsecret_service_bare_instance (test->connection, MOCK_NAME);
63 g_clear_object (&test->service);
66 if (kill (test->pid, SIGTERM) < 0)
67 g_error ("kill() failed: %s", g_strerror (errno));
68 g_spawn_close_pid (test->pid);
70 g_dbus_connection_flush_sync (test->connection, NULL, &error);
71 g_assert_no_error (error);
72 g_clear_object (&test->connection);
76 test_ensure (Test *test,
82 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, NULL);
83 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, NULL);
85 path = gsecret_service_ensure_session_sync (test->service, NULL, &error);
86 g_assert_no_error (error);
87 g_assert (path != NULL);
88 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, path);
89 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, "dh-ietf1024-sha256-aes128-cbc-pkcs7");
93 test_ensure_twice (Test *test,
99 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, NULL);
100 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, NULL);
102 path = gsecret_service_ensure_session_sync (test->service, NULL, &error);
103 g_assert_no_error (error);
104 g_assert (path != NULL);
105 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, path);
106 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, "dh-ietf1024-sha256-aes128-cbc-pkcs7");
108 path = gsecret_service_ensure_session_sync (test->service, NULL, &error);
109 g_assert_no_error (error);
110 g_assert (path != NULL);
111 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, path);
112 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, "dh-ietf1024-sha256-aes128-cbc-pkcs7");
116 test_ensure_plain (Test *test,
117 gconstpointer unused)
119 GError *error = NULL;
122 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, NULL);
123 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, NULL);
125 path = gsecret_service_ensure_session_sync (test->service, NULL, &error);
126 g_assert_no_error (error);
128 g_assert (path != NULL);
129 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, path);
130 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, "plain");
134 on_complete_get_result (GObject *source,
135 GAsyncResult *result,
138 GAsyncResult **ret = user_data;
139 g_assert (ret != NULL);
140 g_assert (*ret == NULL);
141 *ret = g_object_ref (result);
145 test_ensure_async_plain (Test *test,
146 gconstpointer unused)
148 GAsyncResult *result = NULL;
149 GError *error = NULL;
152 gsecret_service_ensure_session (test->service, NULL, on_complete_get_result, &result);
153 egg_test_wait_until (500);
155 g_assert (G_IS_ASYNC_RESULT (result));
156 path = gsecret_service_ensure_session_finish (test->service, result, &error);
157 g_assert_no_error (error);
159 g_assert (path != NULL);
160 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, path);
161 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, "plain");
163 g_object_unref (result);
167 test_ensure_async_aes (Test *test,
168 gconstpointer unused)
170 GAsyncResult *result = NULL;
171 GError *error = NULL;
174 gsecret_service_ensure_session (test->service, NULL, on_complete_get_result, &result);
175 egg_test_wait_until (500);
177 g_assert (G_IS_ASYNC_RESULT (result));
178 path = gsecret_service_ensure_session_finish (test->service, result, &error);
179 g_assert_no_error (error);
181 g_assert (path != NULL);
182 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, path);
183 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, "dh-ietf1024-sha256-aes128-cbc-pkcs7");
185 g_object_unref (result);
189 test_ensure_async_twice (Test *test,
190 gconstpointer unused)
192 GAsyncResult *result = NULL;
193 GError *error = NULL;
196 gsecret_service_ensure_session (test->service, NULL, on_complete_get_result, &result);
197 egg_test_wait_until (500);
199 g_assert (G_IS_ASYNC_RESULT (result));
200 path = gsecret_service_ensure_session_finish (test->service, result, &error);
201 g_assert_no_error (error);
203 g_assert (path != NULL);
204 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, path);
205 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, "plain");
207 g_object_unref (result);
210 gsecret_service_ensure_session (test->service, NULL, on_complete_get_result, &result);
211 egg_test_wait_until (500);
213 g_assert (G_IS_ASYNC_RESULT (result));
214 path = gsecret_service_ensure_session_finish (test->service, result, &error);
215 g_assert_no_error (error);
217 g_assert (path != NULL);
218 g_assert_cmpstr (gsecret_service_get_session_path (test->service), ==, path);
219 g_assert_cmpstr (gsecret_service_get_session_algorithms (test->service), ==, "plain");
221 g_object_unref (result);
225 main (int argc, char **argv)
227 g_test_init (&argc, &argv, NULL);
228 g_set_prgname ("test-session");
231 g_test_add ("/session/ensure-aes", Test, "mock-service-normal.py", setup, test_ensure, teardown);
232 g_test_add ("/session/ensure-twice", Test, "mock-service-normal.py", setup, test_ensure_twice, teardown);
233 g_test_add ("/session/ensure-plain", Test, "mock-service-only-plain.py", setup, test_ensure_plain, teardown);
234 g_test_add ("/session/ensure-async-aes", Test, "mock-service-normal.py", setup, test_ensure_async_aes, teardown);
235 g_test_add ("/session/ensure-async-plain", Test, "mock-service-only-plain.py", setup, test_ensure_async_plain, teardown);
236 g_test_add ("/session/ensure-async-twice", Test, "mock-service-only-plain.py", setup, test_ensure_async_twice, teardown);
238 return egg_tests_run_with_loop ();