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