Branch data Line data Source code
1 : : /* libsecret - GLib wrapper for Secret Service
2 : : *
3 : : * Copyright 2011 Collabora Ltd.
4 : : *
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.
9 : : *
10 : : * See the included COPYING file for more information.
11 : : */
12 : :
13 : :
14 : : #include "config.h"
15 : :
16 : : #undef G_DISABLE_ASSERT
17 : :
18 : : #include "secret-item.h"
19 : : #include "secret-service.h"
20 : : #include "secret-paths.h"
21 : : #include "secret-private.h"
22 : :
23 : : #include "mock-service.h"
24 : :
25 : : #include "egg/egg-testing.h"
26 : :
27 : : #include <glib.h>
28 : :
29 : : #include <errno.h>
30 : : #include <stdlib.h>
31 : :
32 : : #ifdef WITH_CRYPTO
33 : : #define SESSION_ALGO "dh-ietf1024-sha256-aes128-cbc-pkcs7"
34 : : #else
35 : : #define SESSION_ALGO "plain"
36 : : #endif
37 : :
38 : : typedef struct {
39 : : SecretService *service;
40 : : } Test;
41 : :
42 : : static void
43 : 6 : setup (Test *test,
44 : : gconstpointer data)
45 : : {
46 : 6 : GError *error = NULL;
47 : 6 : const gchar *mock_script = data;
48 : :
49 : 6 : mock_service_start (mock_script, &error);
50 [ - + ]: 6 : g_assert_no_error (error);
51 : :
52 : 6 : test->service = secret_service_get_sync (SECRET_SERVICE_NONE, NULL, &error);
53 [ - + ]: 6 : g_assert_no_error (error);
54 : 6 : g_object_add_weak_pointer (G_OBJECT (test->service), (gpointer *)&test->service);
55 : 6 : }
56 : :
57 : : static void
58 : 6 : teardown (Test *test,
59 : : gconstpointer unused)
60 : : {
61 : 6 : g_object_unref (test->service);
62 : 6 : secret_service_disconnect ();
63 [ - + ]: 6 : g_assert_null (test->service);
64 : :
65 : 6 : mock_service_stop ();
66 : 6 : }
67 : :
68 : : static void
69 : 1 : test_ensure (Test *test,
70 : : gconstpointer unused)
71 : : {
72 : 1 : GError *error = NULL;
73 : : gboolean ret;
74 : :
75 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), ==, NULL);
76 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, NULL);
77 : :
78 : 1 : ret = secret_service_ensure_session_sync (test->service, NULL, &error);
79 [ - + ]: 1 : g_assert_no_error (error);
80 [ - + ]: 1 : g_assert_true (ret);
81 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), !=, NULL);
82 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, SESSION_ALGO);
83 : 1 : }
84 : :
85 : : static void
86 : 1 : test_ensure_twice (Test *test,
87 : : gconstpointer unused)
88 : : {
89 : 1 : GError *error = NULL;
90 : : gchar *path;
91 : : gboolean ret;
92 : :
93 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), ==, NULL);
94 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, NULL);
95 : :
96 : 1 : ret = secret_service_ensure_session_sync (test->service, NULL, &error);
97 [ - + ]: 1 : g_assert_no_error (error);
98 [ - + ]: 1 : g_assert_true (ret);
99 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), !=, NULL);
100 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, SESSION_ALGO);
101 : :
102 : 1 : path = g_strdup (secret_service_get_session_dbus_path (test->service));
103 : 1 : ret = secret_service_ensure_session_sync (test->service, NULL, &error);
104 [ - + ]: 1 : g_assert_no_error (error);
105 [ - + ]: 1 : g_assert_true (ret);
106 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), ==, path);
107 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, SESSION_ALGO);
108 : :
109 : 1 : g_free (path);
110 : 1 : }
111 : :
112 : : static void
113 : 1 : test_ensure_plain (Test *test,
114 : : gconstpointer unused)
115 : : {
116 : 1 : GError *error = NULL;
117 : : gboolean ret;
118 : :
119 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), ==, NULL);
120 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, NULL);
121 : :
122 : 1 : ret = secret_service_ensure_session_sync (test->service, NULL, &error);
123 [ - + ]: 1 : g_assert_no_error (error);
124 : :
125 [ - + ]: 1 : g_assert_true (ret);
126 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), !=, NULL);
127 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, "plain");
128 : 1 : }
129 : :
130 : : static void
131 : 4 : on_complete_get_result (GObject *source,
132 : : GAsyncResult *result,
133 : : gpointer user_data)
134 : : {
135 : 4 : GAsyncResult **ret = user_data;
136 [ - + ]: 4 : g_assert_nonnull (ret);
137 [ - + ]: 4 : g_assert_null (*ret);
138 : 4 : *ret = g_object_ref (result);
139 : 4 : egg_test_wait_stop ();
140 : 4 : }
141 : :
142 : : static void
143 : 1 : test_ensure_async_plain (Test *test,
144 : : gconstpointer unused)
145 : : {
146 : 1 : GAsyncResult *result = NULL;
147 : 1 : GError *error = NULL;
148 : : gboolean ret;
149 : :
150 : 1 : secret_service_ensure_session (test->service, NULL, on_complete_get_result, &result);
151 [ - + ]: 1 : egg_test_wait ();
152 : :
153 [ - + + - : 1 : g_assert_true (G_IS_ASYNC_RESULT (result));
- + - + ]
154 : 1 : ret = secret_service_ensure_session_finish (test->service, result, &error);
155 [ - + ]: 1 : g_assert_no_error (error);
156 : :
157 [ - + ]: 1 : g_assert_true (ret);
158 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), !=, NULL);
159 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, "plain");
160 : :
161 : 1 : g_object_unref (result);
162 : 1 : }
163 : :
164 : : static void
165 : 1 : test_ensure_async_aes (Test *test,
166 : : gconstpointer unused)
167 : : {
168 : 1 : GAsyncResult *result = NULL;
169 : 1 : GError *error = NULL;
170 : : gboolean ret;
171 : :
172 : 1 : secret_service_ensure_session (test->service, NULL, on_complete_get_result, &result);
173 : 1 : egg_test_wait_until (500);
174 : :
175 [ - + + - : 1 : g_assert_true (G_IS_ASYNC_RESULT (result));
- + - + ]
176 : 1 : ret = secret_service_ensure_session_finish (test->service, result, &error);
177 [ - + ]: 1 : g_assert_no_error (error);
178 : :
179 [ - + ]: 1 : g_assert_true (ret);
180 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), !=, NULL);
181 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, SESSION_ALGO);
182 : :
183 : 1 : g_object_unref (result);
184 : 1 : }
185 : :
186 : : static void
187 : 1 : test_ensure_async_twice (Test *test,
188 : : gconstpointer unused)
189 : : {
190 : 1 : GAsyncResult *result = NULL;
191 : 1 : GError *error = NULL;
192 : : gboolean ret;
193 : : gchar *path;
194 : :
195 : 1 : secret_service_ensure_session (test->service, NULL, on_complete_get_result, &result);
196 : 1 : egg_test_wait_until (500);
197 : :
198 [ - + + - : 1 : g_assert_true (G_IS_ASYNC_RESULT (result));
- + - + ]
199 : 1 : ret = secret_service_ensure_session_finish (test->service, result, &error);
200 [ - + ]: 1 : g_assert_no_error (error);
201 : :
202 [ - + ]: 1 : g_assert_true (ret);
203 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), !=, NULL);
204 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, "plain");
205 : :
206 : 1 : g_object_unref (result);
207 : 1 : result = NULL;
208 : :
209 : 1 : path = g_strdup (secret_service_get_session_dbus_path (test->service));
210 : 1 : secret_service_ensure_session (test->service, NULL, on_complete_get_result, &result);
211 : 1 : egg_test_wait_until (500);
212 : :
213 [ - + + - : 1 : g_assert_true (G_IS_ASYNC_RESULT (result));
- + - + ]
214 : 1 : ret = secret_service_ensure_session_finish (test->service, result, &error);
215 [ - + ]: 1 : g_assert_no_error (error);
216 : :
217 [ - + ]: 1 : g_assert_true (ret);
218 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_dbus_path (test->service), ==, path);
219 [ - + ]: 1 : g_assert_cmpstr (secret_service_get_session_algorithms (test->service), ==, "plain");
220 : :
221 : 1 : g_object_unref (result);
222 : 1 : g_free (path);
223 : 1 : }
224 : :
225 : : int
226 : 1 : main (int argc, char **argv)
227 : : {
228 : 1 : g_test_init (&argc, &argv, NULL);
229 : 1 : g_set_prgname ("test-session");
230 : :
231 : 1 : g_test_add ("/session/ensure-aes", Test, "mock-service-normal.py", setup, test_ensure, teardown);
232 : 1 : g_test_add ("/session/ensure-twice", Test, "mock-service-normal.py", setup, test_ensure_twice, teardown);
233 : 1 : g_test_add ("/session/ensure-plain", Test, "mock-service-only-plain.py", setup, test_ensure_plain, teardown);
234 : 1 : g_test_add ("/session/ensure-async-aes", Test, "mock-service-normal.py", setup, test_ensure_async_aes, teardown);
235 : 1 : g_test_add ("/session/ensure-async-plain", Test, "mock-service-only-plain.py", setup, test_ensure_async_plain, teardown);
236 : 1 : g_test_add ("/session/ensure-async-twice", Test, "mock-service-only-plain.py", setup, test_ensure_async_twice, teardown);
237 : :
238 : 1 : return egg_tests_run_with_loop ();
239 : : }
|