aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2010-02-18 22:42:38 +0000
committerChristian Grothoff <christian@grothoff.org>2010-02-18 22:42:38 +0000
commit631883da2649becb1ca9664b0305e458ace64ebf (patch)
tree2e45685b624ea489fd559753069c55ccdbff29fa /src
parent370a327990af109e75cd510c99b8e2843041a690 (diff)
downloadgnunet-631883da2649becb1ca9664b0305e458ace64ebf.tar.gz
gnunet-631883da2649becb1ca9664b0305e458ace64ebf.zip
done with first draft of FS test library
Diffstat (limited to 'src')
-rw-r--r--src/fs/test_fs_lib.c148
1 files changed, 142 insertions, 6 deletions
diff --git a/src/fs/test_fs_lib.c b/src/fs/test_fs_lib.c
index f49dd85a5..24e2bbc9d 100644
--- a/src/fs/test_fs_lib.c
+++ b/src/fs/test_fs_lib.c
@@ -64,6 +64,11 @@ struct GNUNET_FS_TestDaemon
64 struct GNUNET_PeerIdentity id; 64 struct GNUNET_PeerIdentity id;
65 65
66 /** 66 /**
67 * Scheduler to use (for publish_cont).
68 */
69 struct GNUNET_SCHEDULER_Handle *publish_sched;
70
71 /**
67 * Function to call when upload is done. 72 * Function to call when upload is done.
68 */ 73 */
69 GNUNET_FS_TEST_UriContinuation publish_cont; 74 GNUNET_FS_TEST_UriContinuation publish_cont;
@@ -79,6 +84,21 @@ struct GNUNET_FS_TestDaemon
79 GNUNET_SCHEDULER_TaskIdentifier publish_timeout_task; 84 GNUNET_SCHEDULER_TaskIdentifier publish_timeout_task;
80 85
81 /** 86 /**
87 * Seed for file generation.
88 */
89 uint32_t publish_seed;
90
91 /**
92 * Context for current publishing operation.
93 */
94 struct GNUNET_FS_PublishContext *publish_context;
95
96 /**
97 * Result URI.
98 */
99 struct GNUNET_FS_Uri *publish_uri;
100
101 /**
82 * Scheduler to use (for download_cont). 102 * Scheduler to use (for download_cont).
83 */ 103 */
84 struct GNUNET_SCHEDULER_Handle *download_sched; 104 struct GNUNET_SCHEDULER_Handle *download_sched;
@@ -104,6 +124,11 @@ struct GNUNET_FS_TestDaemon
104 GNUNET_SCHEDULER_TaskIdentifier download_timeout_task; 124 GNUNET_SCHEDULER_TaskIdentifier download_timeout_task;
105 125
106 /** 126 /**
127 * Context for current download operation.
128 */
129 struct GNUNET_FS_DownloadContext *download_context;
130
131 /**
107 * Verbosity level of the current operation. 132 * Verbosity level of the current operation.
108 */ 133 */
109 int verbose; 134 int verbose;
@@ -112,15 +137,74 @@ struct GNUNET_FS_TestDaemon
112}; 137};
113 138
114 139
140static void
141report_uri (void *cls,
142 const struct GNUNET_SCHEDULER_TaskContext *tc)
143{
144 struct GNUNET_FS_TestDaemon *daemon = cls;
145 GNUNET_FS_TEST_UriContinuation cont;
146 struct GNUNET_FS_Uri *uri;
147
148 GNUNET_FS_publish_stop (daemon->publish_context);
149 daemon->publish_context = NULL;
150 daemon->publish_sched = NULL;
151 cont = daemon->publish_cont;
152 daemon->publish_cont = NULL;
153 uri = daemon->publish_uri;
154 cont (daemon->publish_cont_cls,
155 uri);
156 GNUNET_FS_uri_destroy (uri);
157}
158
159
160static void
161report_success (void *cls,
162 const struct GNUNET_SCHEDULER_TaskContext *tc)
163{
164 struct GNUNET_FS_TestDaemon *daemon = cls;
165
166 GNUNET_FS_download_stop (daemon->download_context, GNUNET_YES);
167 daemon->download_context = NULL;
168 GNUNET_SCHEDULER_add_continuation (daemon->download_sched,
169 daemon->download_cont,
170 daemon->download_cont_cls,
171 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
172 daemon->download_cont = NULL;
173 daemon->download_sched = NULL;
174}
175
115static void* 176static void*
116progress_cb (void *cls, 177progress_cb (void *cls,
117 const struct GNUNET_FS_ProgressInfo *info) 178 const struct GNUNET_FS_ProgressInfo *info)
118{ 179{
119 struct GNUNET_FS_TestDaemon *daemon = cls; 180 struct GNUNET_FS_TestDaemon *daemon = cls;
120 181
121 if (daemon->verbose > 2) 182 switch (info->status)
122 { 183 {
123 184 case GNUNET_FS_STATUS_PUBLISH_COMPLETED:
185 GNUNET_SCHEDULER_cancel (daemon->publish_sched,
186 daemon->publish_timeout_task);
187 daemon->publish_timeout_task = GNUNET_SCHEDULER_NO_TASK;
188 daemon->publish_uri = GNUNET_FS_uri_dup (info->value.publish.specifics.completed.chk_uri);
189 GNUNET_SCHEDULER_add_continuation (daemon->publish_sched,
190 &report_uri,
191 daemon,
192 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
193 break;
194 case GNUNET_FS_STATUS_DOWNLOAD_COMPLETED:
195 GNUNET_SCHEDULER_cancel (daemon->download_sched,
196 daemon->download_timeout_task);
197 daemon->download_timeout_task = GNUNET_SCHEDULER_NO_TASK;
198 GNUNET_SCHEDULER_add_continuation (daemon->publish_sched,
199 &report_success,
200 daemon,
201 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
202 break;
203 /* FIXME: monitor data correctness during download progress */
204 /* FIXME: do performance reports given sufficient verbosity */
205 /* FIXME: advance timeout task to "immediate" on error */
206 default:
207 break;
124 } 208 }
125 return NULL; 209 return NULL;
126} 210}
@@ -376,11 +460,31 @@ publish_timeout (void *cls,
376 cont = daemon->publish_cont; 460 cont = daemon->publish_cont;
377 daemon->publish_timeout_task = GNUNET_SCHEDULER_NO_TASK; 461 daemon->publish_timeout_task = GNUNET_SCHEDULER_NO_TASK;
378 daemon->publish_cont = NULL; 462 daemon->publish_cont = NULL;
463 GNUNET_FS_publish_stop (daemon->publish_context);
464 daemon->publish_context = NULL;
379 cont (daemon->publish_cont_cls, 465 cont (daemon->publish_cont_cls,
380 NULL); 466 NULL);
381} 467}
382 468
383 469
470static size_t
471file_generator (void *cls,
472 uint64_t offset,
473 size_t max,
474 void *buf,
475 char **emsg)
476{
477 struct GNUNET_FS_TestDaemon *daemon = cls;
478 uint64_t pos;
479 uint8_t *cbuf = buf;
480
481 for (pos=0;pos<max;pos++)
482 cbuf[pos] = (uint8_t) ((offset * daemon->publish_seed) % (255 - (offset / 1024 / 32)));
483 return max;
484}
485
486
487
384/** 488/**
385 * Publish a file at the given daemon. 489 * Publish a file at the given daemon.
386 * 490 *
@@ -410,13 +514,31 @@ GNUNET_FS_TEST_publish (struct GNUNET_SCHEDULER_Handle *sched,
410 void *cont_cls) 514 void *cont_cls)
411{ 515{
412 GNUNET_assert (daemon->publish_cont == NULL); 516 GNUNET_assert (daemon->publish_cont == NULL);
517 struct GNUNET_FS_FileInformation *fi;
413 518
414 daemon->publish_cont = cont; 519 daemon->publish_cont = cont;
415 daemon->publish_cont_cls = cont_cls; 520 daemon->publish_cont_cls = cont_cls;
416 daemon->download_timeout_task = GNUNET_SCHEDULER_add_delayed (sched, 521 daemon->publish_seed = seed;
417 timeout, 522 daemon->verbose = verbose;
418 &publish_timeout, 523 daemon->publish_sched = sched;
419 daemon); 524 fi = GNUNET_FS_file_information_create_from_reader (daemon,
525 size,
526 &file_generator,
527 daemon,
528 NULL,
529 NULL,
530 do_index,
531 anonymity,
532 42 /* priority */,
533 GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_HOURS));
534 daemon->publish_context = GNUNET_FS_publish_start (daemon->fs,
535 fi,
536 NULL, NULL, NULL,
537 GNUNET_FS_PUBLISH_OPTION_NONE);
538 daemon->publish_timeout_task = GNUNET_SCHEDULER_add_delayed (sched,
539 timeout,
540 &publish_timeout,
541 daemon);
420} 542}
421 543
422 544
@@ -460,11 +582,25 @@ GNUNET_FS_TEST_download (struct GNUNET_SCHEDULER_Handle *sched,
460 GNUNET_SCHEDULER_Task cont, 582 GNUNET_SCHEDULER_Task cont,
461 void *cont_cls) 583 void *cont_cls)
462{ 584{
585 uint64_t size;
586
463 GNUNET_assert (daemon->download_cont == NULL); 587 GNUNET_assert (daemon->download_cont == NULL);
588 size = GNUNET_FS_uri_chk_get_file_size (uri);
589 daemon->verbose = verbose;
464 daemon->download_sched = sched; 590 daemon->download_sched = sched;
465 daemon->download_cont = cont; 591 daemon->download_cont = cont;
466 daemon->download_cont_cls = cont_cls; 592 daemon->download_cont_cls = cont_cls;
467 daemon->download_seed = seed; 593 daemon->download_seed = seed;
594 daemon->download_context = GNUNET_FS_download_start (daemon->fs,
595 uri,
596 NULL,
597 NULL,
598 0,
599 size,
600 anonymity,
601 GNUNET_FS_DOWNLOAD_OPTION_NONE,
602 NULL,
603 NULL);
468 daemon->download_timeout_task = GNUNET_SCHEDULER_add_delayed (sched, 604 daemon->download_timeout_task = GNUNET_SCHEDULER_add_delayed (sched,
469 timeout, 605 timeout,
470 &download_timeout, 606 &download_timeout,