-remove trailing whitespace
[oweals/gnunet.git] / src / identity / test_identity_defaults.c
1 /*
2      This file is part of GNUnet.
3      (C) 2013 Christian Grothoff (and other contributing authors)
4
5      GNUnet is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published
7      by the Free Software Foundation; either version 3, or (at your
8      option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      General Public License for more details.
14
15      You should have received a copy of the GNU General Public License
16      along with GNUnet; see the file COPYING.  If not, write to the
17      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18      Boston, MA 02111-1307, USA.
19 */
20
21 /**
22  * @file identity/test_identity.c
23  * @brief testcase for identity service
24  * @author Christian Grothoff
25  */
26 #include "platform.h"
27 #include "gnunet_common.h"
28 #include "gnunet_util_lib.h"
29 #include "gnunet_identity_service.h"
30 #include "gnunet_testing_lib.h"
31
32
33 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
34
35
36 /**
37  * Return value from 'main'.
38  */
39 static int res;
40
41 /**
42  * Handle to identity service.
43  */
44 static struct GNUNET_IDENTITY_Handle *h;
45
46 /**
47  * Handle to identity operation.
48  */
49 static struct GNUNET_IDENTITY_Operation *op;
50
51 /**
52  * Handle for task for timeout termination.
53  */
54 static GNUNET_SCHEDULER_TaskIdentifier endbadly_task;
55
56
57 /**
58  * Clean up all resources used.
59  */
60 static void
61 cleanup ()
62 {
63   if (NULL != op)
64   {
65     GNUNET_IDENTITY_cancel (op);
66     op = NULL;
67   }
68   if (NULL != h)
69   {
70     GNUNET_IDENTITY_disconnect (h);
71     h = NULL;
72   }
73   GNUNET_SCHEDULER_shutdown ();
74 }
75
76
77 /**
78  * Termiante the testcase (failure).
79  *
80  * @param cls NULL
81  * @param tc scheduler context
82  */
83 static void
84 endbadly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
85 {
86   cleanup ();
87   res = 1;
88 }
89
90
91 /**
92  * Termiante the testcase (success).
93  *
94  * @param cls NULL
95  * @param tc scheduler context
96  */
97 static void
98 end_normally (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
99 {
100   cleanup ();
101   res = 0;
102 }
103
104
105 /**
106  * Finish the testcase (successfully).
107  */
108 static void
109 end ()
110 {
111   if (endbadly_task != GNUNET_SCHEDULER_NO_TASK)
112   {
113     GNUNET_SCHEDULER_cancel (endbadly_task);
114     endbadly_task = GNUNET_SCHEDULER_NO_TASK;
115   }
116   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
117                                 &end_normally, NULL);
118 }
119
120
121 /**
122  * Continuation called from successful delete operation.
123  *
124  * @param cls NULL
125  * @param emsg (should also be NULL)
126  */
127 static void
128 delete_cont (void *cls,
129              const char *emsg)
130 {
131   op = NULL;
132   GNUNET_assert (NULL == emsg);
133   end ();
134 }
135
136
137 /**
138  * Continuation called from expected-to-fail rename operation.
139  *
140  * @param cls NULL
141  * @param emsg (should also be NULL)
142  */
143 static void
144 get_cb (void *cls,
145         struct GNUNET_IDENTITY_Ego *ego,
146         void **ctx,
147         const char *identifier)
148 {
149   GNUNET_assert (NULL != ego);
150   GNUNET_assert (NULL != identifier);
151   GNUNET_assert (0 == strcmp (identifier, "test-id"));
152   op = GNUNET_IDENTITY_delete (h,
153                                "test-id",
154                                &delete_cont,
155                                NULL);
156 }
157
158
159 /**
160  * Main function of the test, run from scheduler.
161  *
162  * @param cls NULL
163  * @param cfg configuration we use (also to connect to identity service)
164  * @param peer handle to access more of the peer (not used)
165  */
166 static void
167 run_get (void *cls,
168          const struct GNUNET_CONFIGURATION_Handle *cfg,
169          struct GNUNET_TESTING_Peer *peer)
170 {
171   endbadly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
172                                                 &endbadly, NULL);
173   h = GNUNET_IDENTITY_connect (cfg, NULL, NULL);
174   GNUNET_assert (NULL != h);
175   op = GNUNET_IDENTITY_get (h,
176                             "test-service",
177                             &get_cb,
178                             NULL);
179 }
180
181
182 /**
183  * Continuation called from successful rename operation.
184  *
185  * @param cls NULL
186  * @param emsg (should also be NULL)
187  */
188 static void
189 success_set_cont (void *cls,
190                   const char *emsg)
191 {
192   op = NULL;
193   GNUNET_assert (NULL == emsg);
194   end ();
195 }
196
197
198 /**
199  * Called with events about egos.
200  *
201  * @param cls NULL
202  * @param ego ego handle
203  * @param ego_ctx context for application to store data for this ego
204  *                 (during the lifetime of this process, initially NULL)
205  * @param identifier identifier assigned by the user for this ego,
206  *                   NULL if the user just deleted the ego and it
207  *                   must thus no longer be used
208  */
209 static void
210 notification_cb (void *cls,
211                  struct GNUNET_IDENTITY_Ego *ego,
212                  void **ctx,
213                  const char *identifier)
214 {
215   if (NULL == ego)
216     return; /* skip first call */
217   op = GNUNET_IDENTITY_set (h,
218                             "test-service",
219                             ego,
220                             &success_set_cont,
221                             NULL);
222 }
223
224
225 /**
226  * Called with events about created ego.
227  *
228  * @param cls NULL
229  * @param emsg error message
230  */
231 static void
232 create_cb (void *cls,
233            const char *emsg)
234 {
235   GNUNET_assert (NULL == emsg);
236   op = NULL;
237 }
238
239
240 /**
241  * Main function of the test, run from scheduler.
242  *
243  * @param cls NULL
244  * @param cfg configuration we use (also to connect to identity service)
245  * @param peer handle to access more of the peer (not used)
246  */
247 static void
248 run_set (void *cls,
249          const struct GNUNET_CONFIGURATION_Handle *cfg,
250          struct GNUNET_TESTING_Peer *peer)
251 {
252   endbadly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
253                                                 &endbadly, NULL);
254   h = GNUNET_IDENTITY_connect (cfg, &notification_cb, NULL);
255   GNUNET_assert (NULL != h);
256   op = GNUNET_IDENTITY_create (h,
257                                "test-id",
258                                &create_cb,
259                                NULL);
260
261 }
262
263
264 int
265 main (int argc, char *argv[])
266 {
267   GNUNET_DISK_directory_remove ("/tmp/test-identity-service");
268   res = 1;
269   if (0 !=
270       GNUNET_TESTING_service_run ("test-identity-defaults",
271                                   "identity",
272                                   "test_identity.conf",
273                                   &run_set,
274                                   NULL))
275     return 1;
276   if (0 !=
277       GNUNET_TESTING_service_run ("test-identity-defaults",
278                                   "identity",
279                                   "test_identity.conf",
280                                   &run_get,
281                                   NULL))
282     return 1;
283   GNUNET_DISK_directory_remove ("/tmp/test-identity-service");
284   return res;
285 }
286
287
288 /* end of test_identity.c */