aboutsummaryrefslogtreecommitdiff
path: root/src/fs/test_fs_namespace.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2010-03-28 15:22:14 +0000
committerChristian Grothoff <christian@grothoff.org>2010-03-28 15:22:14 +0000
commit49ede7a464271d2fed12da3ec8bf6a1dde2b4e75 (patch)
tree1c87ce208e97dd4fd5622372fb5f6336a126729c /src/fs/test_fs_namespace.c
parent8e8ff40c08bb8382eb4e4869d2a8dd6c7d23bd4a (diff)
downloadgnunet-49ede7a464271d2fed12da3ec8bf6a1dde2b4e75.tar.gz
gnunet-49ede7a464271d2fed12da3ec8bf6a1dde2b4e75.zip
working on fs, bugfixes
Diffstat (limited to 'src/fs/test_fs_namespace.c')
-rw-r--r--src/fs/test_fs_namespace.c239
1 files changed, 212 insertions, 27 deletions
diff --git a/src/fs/test_fs_namespace.c b/src/fs/test_fs_namespace.c
index ea9e00c90..6014e4394 100644
--- a/src/fs/test_fs_namespace.c
+++ b/src/fs/test_fs_namespace.c
@@ -22,21 +22,38 @@
22 * @file fs/test_fs_namespace.c 22 * @file fs/test_fs_namespace.c
23 * @brief Test for fs_namespace.c 23 * @brief Test for fs_namespace.c
24 * @author Christian Grothoff 24 * @author Christian Grothoff
25 *
26 * TODO:
27 * - add timeout task
25 */ 28 */
26
27#include "platform.h" 29#include "platform.h"
28#include "gnunet_util_lib.h" 30#include "gnunet_util_lib.h"
29#include "gnunet_arm_service.h" 31#include "gnunet_arm_service.h"
30#include "gnunet_fs_service.h" 32#include "gnunet_fs_service.h"
31 33
34#define VERBOSE GNUNET_YES
35
32#define START_ARM GNUNET_YES 36#define START_ARM GNUNET_YES
33 37
34static struct GNUNET_SCHEDULER_Handle *sched; 38static struct GNUNET_SCHEDULER_Handle *sched;
35 39
36static struct PeerContext p1; 40static struct PeerContext p1;
37 41
42static GNUNET_HashCode nsid;
43
44static struct GNUNET_FS_Uri *sks_expect_uri;
45
46static struct GNUNET_FS_Uri *ksk_expect_uri;
47
38static struct GNUNET_FS_Handle *fs; 48static struct GNUNET_FS_Handle *fs;
39 49
50static struct GNUNET_FS_SearchContext *sks_search;
51
52static struct GNUNET_FS_SearchContext *ksk_search;
53
54static int update_started;
55
56static int err;
40 57
41struct PeerContext 58struct PeerContext
42{ 59{
@@ -79,21 +96,131 @@ stop_arm (struct PeerContext *p)
79} 96}
80 97
81 98
82#if 0
83static void 99static void
84spcb (void *cls, 100abort_ksk_search_task (void *cls,
85 const char *name, 101 const struct GNUNET_SCHEDULER_TaskContext *tc)
86 const GNUNET_HashCode * key)
87{ 102{
103 if (ksk_search != NULL)
104 {
105 GNUNET_FS_search_stop (ksk_search);
106 ksk_search = NULL;
107 if (sks_search == NULL)
108 GNUNET_FS_stop (fs);
109 }
88} 110}
89#endif
90 111
91 112
113static void
114abort_sks_search_task (void *cls,
115 const struct GNUNET_SCHEDULER_TaskContext *tc)
116{
117 struct GNUNET_FS_Namespace *ns;
118
119 if (sks_search != NULL)
120 {
121 GNUNET_FS_search_stop (sks_search);
122 sks_search = NULL;
123 ns = GNUNET_FS_namespace_create (fs,
124 "testNamespace");
125 GNUNET_assert (GNUNET_OK == GNUNET_FS_namespace_delete (ns, GNUNET_YES));
126 if (ksk_search == NULL)
127 GNUNET_FS_stop (fs);
128 }
129}
130
92 131
93static void * 132static void *
94progress_cb (void *cls, 133progress_cb (void *cls,
95 const struct GNUNET_FS_ProgressInfo *event) 134 const struct GNUNET_FS_ProgressInfo *event)
96{ 135{
136 switch (event->status)
137 {
138 case GNUNET_FS_STATUS_SEARCH_RESULT:
139 if (sks_search == event->value.search.sc)
140 {
141 fprintf (stderr,
142 "Search result for sks received\n");
143 if (! GNUNET_FS_uri_test_equal (sks_expect_uri,
144 event->value.search.specifics.result.uri))
145 {
146 fprintf (stderr,
147 "Wrong result for sks search!\n");
148 err = 1;
149 }
150 /* give system 1ms to initiate update search! */
151 GNUNET_SCHEDULER_add_delayed (sched,
152 GNUNET_TIME_UNIT_MILLISECONDS,
153 &abort_sks_search_task,
154 NULL);
155 }
156 else if (ksk_search == event->value.search.sc)
157 {
158 fprintf (stderr,
159 "Search result for ksk received\n");
160 if (! GNUNET_FS_uri_test_equal (ksk_expect_uri,
161 event->value.search.specifics.result.uri))
162 {
163 fprintf (stderr,
164 "Wrong result for ksk search!\n");
165 err = 1;
166 }
167 GNUNET_SCHEDULER_add_continuation (sched,
168 &abort_ksk_search_task,
169 NULL,
170 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
171 }
172 else
173 {
174 fprintf (stderr,
175 "Search result received!?\n");
176 GNUNET_break (0);
177 }
178 break;
179 case GNUNET_FS_STATUS_SEARCH_ERROR:
180 fprintf (stderr,
181 "Error searching file: %s\n",
182 event->value.search.specifics.error.message);
183 if (sks_search == event->value.search.sc)
184 GNUNET_SCHEDULER_add_continuation (sched,
185 &abort_sks_search_task,
186 NULL,
187 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
188 else if (ksk_search == event->value.search.sc)
189 GNUNET_SCHEDULER_add_continuation (sched,
190 &abort_ksk_search_task,
191 NULL,
192 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
193 else
194 GNUNET_break (0);
195 break;
196 case GNUNET_FS_STATUS_SEARCH_START:
197 fprintf (stderr,
198 "Search start event for `%s' received\n",
199 (const char*) event->value.search.cctx);
200 GNUNET_assert ( (NULL == event->value.search.cctx) ||
201 (0 == strcmp ("sks_search", event->value.search.cctx)) ||
202 (0 == strcmp ("ksk_search", event->value.search.cctx)));
203 if (NULL == event->value.search.cctx)
204 {
205 GNUNET_assert (sks_search == event->value.search.pctx);
206 update_started = GNUNET_YES;
207 }
208 GNUNET_assert (1 == event->value.search.anonymity);
209 break;
210 case GNUNET_FS_STATUS_SEARCH_RESULT_STOPPED:
211 break;
212 case GNUNET_FS_STATUS_SEARCH_STOPPED:
213 fprintf (stderr,
214 "Search stop event received\n");
215 GNUNET_assert ( (ksk_search == event->value.search.sc) ||
216 (sks_search == event->value.search.sc));
217 break;
218 default:
219 fprintf (stderr,
220 "Unexpected event: %d\n",
221 event->status);
222 break;
223 }
97 return NULL; 224 return NULL;
98} 225}
99 226
@@ -103,11 +230,39 @@ publish_cont (void *cls,
103 const struct GNUNET_FS_Uri *ksk_uri, 230 const struct GNUNET_FS_Uri *ksk_uri,
104 const char *emsg) 231 const char *emsg)
105{ 232{
106 struct GNUNET_FS_SearchContext *search; 233 char *msg;
107 234 struct GNUNET_FS_Uri *sks_uri;
108 GNUNET_assert (NULL == emsg); 235 char sbuf[1024];
236 struct GNUNET_CRYPTO_HashAsciiEncoded enc;
237
238 if (NULL != emsg)
239 {
240 fprintf (stderr, "Error publishing: %s\n", emsg);
241 err = 1;
242 GNUNET_FS_stop (fs);
243 return;
244 }
245 GNUNET_CRYPTO_hash_to_enc (&nsid,
246 &enc);
247 GNUNET_snprintf (sbuf,
248 sizeof (sbuf),
249 "gnunet://fs/sks/%s/this",
250 &enc);
251 sks_uri = GNUNET_FS_uri_parse (sbuf, &msg);
252 if (msg != NULL)
253 {
254 fprintf (stderr, "failed to parse URI `%s': %s\n",
255 sbuf,
256 msg);
257 err = 1;
258 GNUNET_FS_stop (fs);
259 return;
260 }
109 fprintf (stderr, "Starting keyword search...\n"); 261 fprintf (stderr, "Starting keyword search...\n");
110 search = GNUNET_FS_search_start (fs, ksk_uri, 1, NULL); 262 ksk_search = GNUNET_FS_search_start (fs, ksk_uri, 1, "ksk_search");
263 fprintf (stderr, "Starting namespace search...\n") ;
264 sks_search = GNUNET_FS_search_start (fs, sks_uri, 1, "sks_search");
265 GNUNET_FS_uri_destroy (sks_uri);
111} 266}
112 267
113 268
@@ -127,6 +282,7 @@ sks_cont (void *cls,
127 ksk_uri = GNUNET_FS_uri_parse ("gnunet://fs/ksk/ns-search", &msg); 282 ksk_uri = GNUNET_FS_uri_parse ("gnunet://fs/ksk/ns-search", &msg);
128 GNUNET_assert (NULL == msg); 283 GNUNET_assert (NULL == msg);
129 fprintf (stderr, "Advertising update 'this' namespace entry under keyword...\n"); 284 fprintf (stderr, "Advertising update 'this' namespace entry under keyword...\n");
285 ksk_expect_uri = GNUNET_FS_uri_dup (uri);
130 GNUNET_FS_publish_ksk (fs, 286 GNUNET_FS_publish_ksk (fs,
131 ksk_uri, 287 ksk_uri,
132 meta, 288 meta,
@@ -136,6 +292,7 @@ sks_cont (void *cls,
136 GNUNET_FS_PUBLISH_OPTION_NONE, 292 GNUNET_FS_PUBLISH_OPTION_NONE,
137 &publish_cont, 293 &publish_cont,
138 NULL); 294 NULL);
295 GNUNET_FS_uri_destroy (ksk_uri);
139 GNUNET_CONTAINER_meta_data_destroy (meta); 296 GNUNET_CONTAINER_meta_data_destroy (meta);
140} 297}
141 298
@@ -149,18 +306,26 @@ adv_cont (void *cls,
149 struct GNUNET_FS_Namespace *ns; 306 struct GNUNET_FS_Namespace *ns;
150 struct GNUNET_TIME_Absolute expiration; 307 struct GNUNET_TIME_Absolute expiration;
151 308
309 if (NULL != emsg)
310 {
311 fprintf (stderr, "Error publishing: %s\n", emsg);
312 err = 1;
313 GNUNET_FS_stop (fs);
314 return;
315 }
152 expiration = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_MINUTES); 316 expiration = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_MINUTES);
153 ns = GNUNET_FS_namespace_create (fs, 317 ns = GNUNET_FS_namespace_create (fs,
154 "testNamespace"); 318 "testNamespace");
155 meta = GNUNET_CONTAINER_meta_data_create (); 319 meta = GNUNET_CONTAINER_meta_data_create ();
156 GNUNET_assert (NULL == emsg); 320 GNUNET_assert (NULL == emsg);
157 fprintf (stderr, "Advertising update 'this->next' namespace update...\n"); 321 fprintf (stderr, "Advertising update 'this->next' namespace update...\n");
322 sks_expect_uri = GNUNET_FS_uri_dup (uri);
158 GNUNET_FS_publish_sks (fs, 323 GNUNET_FS_publish_sks (fs,
159 ns, 324 ns,
160 "this", 325 "this",
161 "next", 326 "next",
162 meta, 327 meta,
163 uri, /* FIXME: this is non-sense (use CHK URI!) */ 328 uri, /* FIXME: this is non-sense (use CHK URI!?) */
164 expiration, 329 expiration,
165 1, 1, 330 1, 1,
166 GNUNET_FS_PUBLISH_OPTION_NONE, 331 GNUNET_FS_PUBLISH_OPTION_NONE,
@@ -172,17 +337,43 @@ adv_cont (void *cls,
172 337
173 338
174static void 339static void
340ns_iterator (void *cls,
341 const char *name,
342 const GNUNET_HashCode *id)
343{
344 int *ok = cls;
345
346 if (0 != strcmp (name,
347 "testNamespace"))
348 return;
349 *ok = GNUNET_YES;
350 nsid = *id;
351}
352
353
354static void
175testNamespace () 355testNamespace ()
176{ 356{
177 struct GNUNET_FS_Namespace *ns; 357 struct GNUNET_FS_Namespace *ns;
178 struct GNUNET_TIME_Absolute expiration; 358 struct GNUNET_TIME_Absolute expiration;
179 struct GNUNET_CONTAINER_MetaData *meta; 359 struct GNUNET_CONTAINER_MetaData *meta;
360 int ok;
180 361
181 expiration = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_MINUTES);
182 meta = GNUNET_CONTAINER_meta_data_create ();
183 ns = GNUNET_FS_namespace_create (fs, 362 ns = GNUNET_FS_namespace_create (fs,
184 "testNamespace"); 363 "testNamespace");
364 ok = GNUNET_NO;
365 GNUNET_FS_namespace_list (fs, &ns_iterator, &ok);
366 if (GNUNET_NO == ok)
367 {
368 fprintf (stderr, "namespace_list failed to find namespace!\n");
369 GNUNET_FS_namespace_delete (ns, GNUNET_YES);
370 GNUNET_FS_stop (fs);
371 err = 1;
372 return;
373 }
185 fprintf (stderr, "Advertising namespace root...\n"); 374 fprintf (stderr, "Advertising namespace root...\n");
375 expiration = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_MINUTES);
376 meta = GNUNET_CONTAINER_meta_data_create ();
186 GNUNET_FS_namespace_advertise (fs, 377 GNUNET_FS_namespace_advertise (fs,
187 ns, 378 ns,
188 meta, 379 meta,
@@ -194,17 +385,6 @@ testNamespace ()
194 GNUNET_CONTAINER_meta_data_destroy (meta); 385 GNUNET_CONTAINER_meta_data_destroy (meta);
195} 386}
196 387
197#if 0
198 fprintf (stderr, "Completed namespace search...\n");
199 GNUNET_assert (GNUNET_OK == GNUNET_FS_namespace_delete (NULL, cfg, &pid));
200 GNUNET_assert (GNUNET_SYSERR == GNUNET_FS_namespace_delete (NULL, cfg, &pid));
201 GNUNET_FS_uri_destroy (rootURI);
202 GNUNET_FS_uri_destroy (advURI);
203 GNUNET_assert (match == 1);
204 return 0;
205}
206#endif
207
208 388
209static void 389static void
210run (void *cls, 390run (void *cls,
@@ -214,7 +394,7 @@ run (void *cls,
214 const struct GNUNET_CONFIGURATION_Handle *cfg) 394 const struct GNUNET_CONFIGURATION_Handle *cfg)
215{ 395{
216 sched = s; 396 sched = s;
217 setup_peer (&p1, "test_fs_download_data.conf"); 397 setup_peer (&p1, "test_fs_namespace_data.conf");
218 fs = GNUNET_FS_start (sched, 398 fs = GNUNET_FS_start (sched,
219 cfg, 399 cfg,
220 "test-fs-namespace", 400 "test-fs-namespace",
@@ -253,10 +433,15 @@ main (int argc, char *argv[])
253 argvx, "test-fs-namespace", 433 argvx, "test-fs-namespace",
254 "nohelp", options, &run, NULL); 434 "nohelp", options, &run, NULL);
255 stop_arm (&p1); 435 stop_arm (&p1);
436 if (GNUNET_YES != update_started)
437 {
438 fprintf (stderr,
439 "Update search never started!\n");
440 err = 1;
441 }
256 GNUNET_DISK_directory_remove ("/tmp/gnunet-test-fs-namespace/"); 442 GNUNET_DISK_directory_remove ("/tmp/gnunet-test-fs-namespace/");
257 return 0; 443 return err;
258} 444}
259 445
260 446
261
262/* end of test_fs_namespace.c */ 447/* end of test_fs_namespace.c */