diff options
author | Christian Grothoff <christian@grothoff.org> | 2010-03-28 15:22:14 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2010-03-28 15:22:14 +0000 |
commit | 49ede7a464271d2fed12da3ec8bf6a1dde2b4e75 (patch) | |
tree | 1c87ce208e97dd4fd5622372fb5f6336a126729c /src/fs/test_fs_namespace.c | |
parent | 8e8ff40c08bb8382eb4e4869d2a8dd6c7d23bd4a (diff) | |
download | gnunet-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.c | 239 |
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 | ||
34 | static struct GNUNET_SCHEDULER_Handle *sched; | 38 | static struct GNUNET_SCHEDULER_Handle *sched; |
35 | 39 | ||
36 | static struct PeerContext p1; | 40 | static struct PeerContext p1; |
37 | 41 | ||
42 | static GNUNET_HashCode nsid; | ||
43 | |||
44 | static struct GNUNET_FS_Uri *sks_expect_uri; | ||
45 | |||
46 | static struct GNUNET_FS_Uri *ksk_expect_uri; | ||
47 | |||
38 | static struct GNUNET_FS_Handle *fs; | 48 | static struct GNUNET_FS_Handle *fs; |
39 | 49 | ||
50 | static struct GNUNET_FS_SearchContext *sks_search; | ||
51 | |||
52 | static struct GNUNET_FS_SearchContext *ksk_search; | ||
53 | |||
54 | static int update_started; | ||
55 | |||
56 | static int err; | ||
40 | 57 | ||
41 | struct PeerContext | 58 | struct PeerContext |
42 | { | 59 | { |
@@ -79,21 +96,131 @@ stop_arm (struct PeerContext *p) | |||
79 | } | 96 | } |
80 | 97 | ||
81 | 98 | ||
82 | #if 0 | ||
83 | static void | 99 | static void |
84 | spcb (void *cls, | 100 | abort_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 | ||
113 | static void | ||
114 | abort_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 | ||
93 | static void * | 132 | static void * |
94 | progress_cb (void *cls, | 133 | progress_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 | ||
174 | static void | 339 | static void |
340 | ns_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 | |||
354 | static void | ||
175 | testNamespace () | 355 | testNamespace () |
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 | ||
209 | static void | 389 | static void |
210 | run (void *cls, | 390 | run (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 */ |