diff options
author | Christian Grothoff <christian@grothoff.org> | 2010-02-18 22:42:38 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2010-02-18 22:42:38 +0000 |
commit | 631883da2649becb1ca9664b0305e458ace64ebf (patch) | |
tree | 2e45685b624ea489fd559753069c55ccdbff29fa /src | |
parent | 370a327990af109e75cd510c99b8e2843041a690 (diff) | |
download | gnunet-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.c | 148 |
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 | ||
140 | static void | ||
141 | report_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 | |||
160 | static void | ||
161 | report_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 | |||
115 | static void* | 176 | static void* |
116 | progress_cb (void *cls, | 177 | progress_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 | ||
470 | static size_t | ||
471 | file_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, |