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