Branch data Line data Source code
1 : : /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2 : : /*
3 : : Copyright (C) 2011 Collabora Ltd
4 : :
5 : : The Gnome Keyring Library is free software; you can redistribute it and/or
6 : : modify it under the terms of the GNU Library General Public License as
7 : : published by the Free Software Foundation; either version 2 of the
8 : : License, or (at your option) any later version.
9 : :
10 : : The Gnome Keyring Library is distributed in the hope that it will be useful,
11 : : but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 : : Library General Public License for more details.
14 : :
15 : : You should have received a copy of the GNU Library General Public
16 : : License along with the Gnome Library; see the file COPYING.LIB. If not,
17 : : see <http://www.gnu.org/licenses/>.
18 : :
19 : : Author: Stef Walter <stefw@collabora.co.uk>
20 : : */
21 : :
22 : : #include "config.h"
23 : :
24 : : #include "gcr/gcr.h"
25 : :
26 : : #include "egg/egg-testing.h"
27 : :
28 : : #include <glib.h>
29 : :
30 : : #include <errno.h>
31 : :
32 : : typedef struct {
33 : : GcrSecretExchange *caller;
34 : : GcrSecretExchange *callee;
35 : : } Test;
36 : :
37 : : static void
38 : 3 : setup (Test *test, gconstpointer unused)
39 : : {
40 : 3 : test->caller = gcr_secret_exchange_new (NULL);
41 [ - + + - : 3 : g_assert (GCR_IS_SECRET_EXCHANGE (test->caller));
+ - - + ]
42 : 3 : g_object_add_weak_pointer (G_OBJECT (test->caller), (gpointer *)&test->caller);
43 : :
44 : 3 : test->callee = gcr_secret_exchange_new (NULL);
45 [ - + + - : 3 : g_assert (GCR_IS_SECRET_EXCHANGE (test->callee));
+ - - + ]
46 : 3 : g_object_add_weak_pointer (G_OBJECT (test->callee), (gpointer *)&test->callee);
47 : 3 : }
48 : :
49 : : static void
50 : 3 : teardown (Test *test,
51 : : gconstpointer unused)
52 : : {
53 : 3 : g_object_unref (test->caller);
54 [ - + ]: 3 : g_assert (test->caller == NULL);
55 : :
56 : 3 : g_object_unref (test->callee);
57 [ - + ]: 3 : g_assert (test->callee == NULL);
58 : 3 : }
59 : :
60 : : static void
61 : 1 : test_perform_exchange (Test *test,
62 : : gconstpointer unused)
63 : : {
64 : : gchar *exchange;
65 : :
66 : 1 : exchange = gcr_secret_exchange_begin (test->caller);
67 [ - + ]: 1 : g_assert (exchange);
68 : :
69 [ - + ]: 1 : if (!gcr_secret_exchange_receive (test->callee, exchange))
70 : 0 : g_assert_not_reached ();
71 : :
72 : 1 : g_free (exchange);
73 : :
74 : 1 : exchange = gcr_secret_exchange_send (test->callee, "the secret", -1);
75 [ - + ]: 1 : g_assert (exchange);
76 : :
77 [ - + ]: 1 : if (!gcr_secret_exchange_receive (test->caller, exchange))
78 : 0 : g_assert_not_reached ();
79 : :
80 [ - + ]: 1 : g_assert_cmpstr (gcr_secret_exchange_get_secret (test->caller, NULL), ==, "the secret");
81 : :
82 : 1 : g_free (exchange);
83 : 1 : }
84 : :
85 : : static void
86 : 1 : test_perform_reverse (Test *test,
87 : : gconstpointer unused)
88 : : {
89 : : gchar *exchange;
90 : :
91 : 1 : exchange = gcr_secret_exchange_begin (test->caller);
92 [ - + ]: 1 : g_assert (exchange);
93 : :
94 [ - + ]: 1 : if (!gcr_secret_exchange_receive (test->callee, exchange))
95 : 0 : g_assert_not_reached ();
96 : :
97 : 1 : g_free (exchange);
98 : :
99 : 1 : exchange = gcr_secret_exchange_send (test->callee, NULL, -1);
100 [ - + ]: 1 : g_assert (exchange);
101 : :
102 [ - + ]: 1 : if (!gcr_secret_exchange_receive (test->caller, exchange))
103 : 0 : g_assert_not_reached ();
104 : :
105 : 1 : g_free (exchange);
106 : :
107 [ - + ]: 1 : g_assert (gcr_secret_exchange_get_secret (test->caller, NULL) == NULL);
108 : :
109 : 1 : exchange = gcr_secret_exchange_send (test->caller, "reverse secret", -1);
110 [ - + ]: 1 : g_assert (exchange);
111 : :
112 [ - + ]: 1 : if (!gcr_secret_exchange_receive (test->callee, exchange))
113 : 0 : g_assert_not_reached ();
114 : :
115 : 1 : g_free (exchange);
116 : :
117 [ - + ]: 1 : g_assert_cmpstr (gcr_secret_exchange_get_secret (test->callee, NULL), ==, "reverse secret");
118 : 1 : }
119 : :
120 : : static void
121 : 1 : test_perform_multiple (Test *test,
122 : : gconstpointer unused)
123 : : {
124 : : gchar *exchange;
125 : :
126 : 1 : exchange = gcr_secret_exchange_begin (test->caller);
127 [ - + ]: 1 : g_assert (exchange);
128 : :
129 [ - + ]: 1 : if (!gcr_secret_exchange_receive (test->callee, exchange))
130 : 0 : g_assert_not_reached ();
131 : :
132 : 1 : g_free (exchange);
133 : :
134 : 1 : exchange = gcr_secret_exchange_send (test->callee, "first secret", -1);
135 [ - + ]: 1 : g_assert (exchange);
136 : :
137 [ - + ]: 1 : if (!gcr_secret_exchange_receive (test->caller, exchange))
138 : 0 : g_assert_not_reached ();
139 : :
140 : 1 : g_free (exchange);
141 : :
142 [ - + ]: 1 : g_assert_cmpstr (gcr_secret_exchange_get_secret (test->caller, NULL), ==, "first secret");
143 : :
144 : 1 : exchange = gcr_secret_exchange_send (test->callee, "second secret", -1);
145 [ - + ]: 1 : g_assert (exchange);
146 : :
147 [ - + ]: 1 : if (!gcr_secret_exchange_receive (test->caller, exchange))
148 : 0 : g_assert_not_reached ();
149 : :
150 : 1 : g_free (exchange);
151 : :
152 [ - + ]: 1 : g_assert_cmpstr (gcr_secret_exchange_get_secret (test->caller, NULL), ==, "second secret");
153 : 1 : }
154 : :
155 : : int
156 : 1 : main (int argc, char **argv)
157 : : {
158 : 1 : g_test_init (&argc, &argv, NULL);
159 : 1 : g_set_prgname ("test-secret-exchange");
160 : :
161 : 1 : g_test_add ("/gcr/secret-exchange/perform-exchange", Test, NULL, setup, test_perform_exchange, teardown);
162 : 1 : g_test_add ("/gcr/secret-exchange/perform-reverse", Test, NULL, setup, test_perform_reverse, teardown);
163 : 1 : g_test_add ("/gcr/secret-exchange/perform-multiple", Test, NULL, setup, test_perform_multiple, teardown);
164 : :
165 : 1 : return g_test_run ();
166 : : }
|