diff options
Diffstat (limited to 'src/fs/test_fs_search.c')
-rw-r--r-- | src/fs/test_fs_search.c | 234 |
1 files changed, 111 insertions, 123 deletions
diff --git a/src/fs/test_fs_search.c b/src/fs/test_fs_search.c index a1f3208ef..878624c73 100644 --- a/src/fs/test_fs_search.c +++ b/src/fs/test_fs_search.c | |||
@@ -45,13 +45,13 @@ | |||
45 | 45 | ||
46 | /** | 46 | /** |
47 | * How long should our test-content live? | 47 | * How long should our test-content live? |
48 | */ | 48 | */ |
49 | #define LIFETIME GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 15) | 49 | #define LIFETIME GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 15) |
50 | 50 | ||
51 | struct PeerContext | 51 | struct PeerContext |
52 | { | 52 | { |
53 | struct GNUNET_CONFIGURATION_Handle *cfg; | 53 | struct GNUNET_CONFIGURATION_Handle *cfg; |
54 | struct GNUNET_PeerIdentity id; | 54 | struct GNUNET_PeerIdentity id; |
55 | #if START_ARM | 55 | #if START_ARM |
56 | struct GNUNET_OS_Process *arm_proc; | 56 | struct GNUNET_OS_Process *arm_proc; |
57 | #endif | 57 | #endif |
@@ -69,8 +69,7 @@ static struct GNUNET_FS_PublishContext *publish; | |||
69 | 69 | ||
70 | 70 | ||
71 | static void | 71 | static void |
72 | abort_publish_task (void *cls, | 72 | abort_publish_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
73 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
74 | { | 73 | { |
75 | GNUNET_FS_publish_stop (publish); | 74 | GNUNET_FS_publish_stop (publish); |
76 | publish = NULL; | 75 | publish = NULL; |
@@ -78,8 +77,7 @@ abort_publish_task (void *cls, | |||
78 | 77 | ||
79 | 78 | ||
80 | static void | 79 | static void |
81 | abort_search_task (void *cls, | 80 | abort_search_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
82 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
83 | { | 81 | { |
84 | if (search != NULL) | 82 | if (search != NULL) |
85 | GNUNET_FS_search_stop (search); | 83 | GNUNET_FS_search_stop (search); |
@@ -88,94 +86,90 @@ abort_search_task (void *cls, | |||
88 | 86 | ||
89 | 87 | ||
90 | static void * | 88 | static void * |
91 | progress_cb (void *cls, | 89 | progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event) |
92 | const struct GNUNET_FS_ProgressInfo *event) | 90 | { |
93 | { | ||
94 | const char *keywords[] = { | 91 | const char *keywords[] = { |
95 | "down_foo" | 92 | "down_foo" |
96 | }; | 93 | }; |
97 | struct GNUNET_FS_Uri *kuri; | 94 | struct GNUNET_FS_Uri *kuri; |
98 | 95 | ||
99 | switch (event->status) | 96 | switch (event->status) |
100 | { | 97 | { |
101 | case GNUNET_FS_STATUS_PUBLISH_PROGRESS: | 98 | case GNUNET_FS_STATUS_PUBLISH_PROGRESS: |
102 | #if VERBOSE | 99 | #if VERBOSE |
103 | printf ("Publish is progressing (%llu/%llu at level %u off %llu)...\n", | 100 | printf ("Publish is progressing (%llu/%llu at level %u off %llu)...\n", |
104 | (unsigned long long) event->value.publish.completed, | 101 | (unsigned long long) event->value.publish.completed, |
105 | (unsigned long long) event->value.publish.size, | 102 | (unsigned long long) event->value.publish.size, |
106 | event->value.publish.specifics.progress.depth, | 103 | event->value.publish.specifics.progress.depth, |
107 | (unsigned long long) event->value.publish.specifics.progress.offset); | 104 | (unsigned long long) event->value.publish.specifics. |
108 | #endif | 105 | progress.offset); |
109 | break; | 106 | #endif |
110 | case GNUNET_FS_STATUS_PUBLISH_COMPLETED: | 107 | break; |
111 | kuri = GNUNET_FS_uri_ksk_create_from_args (1, keywords); | 108 | case GNUNET_FS_STATUS_PUBLISH_COMPLETED: |
112 | start = GNUNET_TIME_absolute_get (); | 109 | kuri = GNUNET_FS_uri_ksk_create_from_args (1, keywords); |
113 | search = GNUNET_FS_search_start (fs, | 110 | start = GNUNET_TIME_absolute_get (); |
114 | kuri, | 111 | search = GNUNET_FS_search_start (fs, |
115 | 1, | 112 | kuri, |
116 | GNUNET_FS_SEARCH_OPTION_NONE, | 113 | 1, GNUNET_FS_SEARCH_OPTION_NONE, "search"); |
117 | "search"); | 114 | GNUNET_FS_uri_destroy (kuri); |
118 | GNUNET_FS_uri_destroy (kuri); | 115 | GNUNET_assert (search != NULL); |
119 | GNUNET_assert (search != NULL); | 116 | break; |
120 | break; | 117 | case GNUNET_FS_STATUS_SEARCH_RESULT: |
121 | case GNUNET_FS_STATUS_SEARCH_RESULT: | ||
122 | #if VERBOSE | 118 | #if VERBOSE |
123 | printf ("Search complete.\n"); | 119 | printf ("Search complete.\n"); |
124 | #endif | 120 | #endif |
125 | GNUNET_SCHEDULER_add_continuation (&abort_search_task, | 121 | GNUNET_SCHEDULER_add_continuation (&abort_search_task, |
126 | NULL, | 122 | NULL, |
127 | GNUNET_SCHEDULER_REASON_PREREQ_DONE); | 123 | GNUNET_SCHEDULER_REASON_PREREQ_DONE); |
128 | break; | 124 | break; |
129 | case GNUNET_FS_STATUS_PUBLISH_ERROR: | 125 | case GNUNET_FS_STATUS_PUBLISH_ERROR: |
130 | fprintf (stderr, | 126 | fprintf (stderr, |
131 | "Error publishing file: %s\n", | 127 | "Error publishing file: %s\n", |
132 | event->value.publish.specifics.error.message); | 128 | event->value.publish.specifics.error.message); |
133 | GNUNET_break (0); | 129 | GNUNET_break (0); |
134 | GNUNET_SCHEDULER_add_continuation (&abort_publish_task, | 130 | GNUNET_SCHEDULER_add_continuation (&abort_publish_task, |
135 | NULL, | 131 | NULL, |
136 | GNUNET_SCHEDULER_REASON_PREREQ_DONE); | 132 | GNUNET_SCHEDULER_REASON_PREREQ_DONE); |
137 | break; | 133 | break; |
138 | case GNUNET_FS_STATUS_SEARCH_ERROR: | 134 | case GNUNET_FS_STATUS_SEARCH_ERROR: |
139 | fprintf (stderr, | 135 | fprintf (stderr, |
140 | "Error searching file: %s\n", | 136 | "Error searching file: %s\n", |
141 | event->value.search.specifics.error.message); | 137 | event->value.search.specifics.error.message); |
142 | GNUNET_SCHEDULER_add_continuation (&abort_search_task, | 138 | GNUNET_SCHEDULER_add_continuation (&abort_search_task, |
143 | NULL, | 139 | NULL, |
144 | GNUNET_SCHEDULER_REASON_PREREQ_DONE); | 140 | GNUNET_SCHEDULER_REASON_PREREQ_DONE); |
145 | break; | 141 | break; |
146 | case GNUNET_FS_STATUS_PUBLISH_START: | 142 | case GNUNET_FS_STATUS_PUBLISH_START: |
147 | GNUNET_assert (0 == strcmp ("publish-context", event->value.publish.cctx)); | 143 | GNUNET_assert (0 == strcmp ("publish-context", event->value.publish.cctx)); |
148 | GNUNET_assert (NULL == event->value.publish.pctx); | 144 | GNUNET_assert (NULL == event->value.publish.pctx); |
149 | GNUNET_assert (FILESIZE == event->value.publish.size); | 145 | GNUNET_assert (FILESIZE == event->value.publish.size); |
150 | GNUNET_assert (0 == event->value.publish.completed); | 146 | GNUNET_assert (0 == event->value.publish.completed); |
151 | GNUNET_assert (1 == event->value.publish.anonymity); | 147 | GNUNET_assert (1 == event->value.publish.anonymity); |
152 | break; | 148 | break; |
153 | case GNUNET_FS_STATUS_PUBLISH_STOPPED: | 149 | case GNUNET_FS_STATUS_PUBLISH_STOPPED: |
154 | GNUNET_assert (publish == event->value.publish.pc); | 150 | GNUNET_assert (publish == event->value.publish.pc); |
155 | GNUNET_assert (FILESIZE == event->value.publish.size); | 151 | GNUNET_assert (FILESIZE == event->value.publish.size); |
156 | GNUNET_assert (1 == event->value.publish.anonymity); | 152 | GNUNET_assert (1 == event->value.publish.anonymity); |
157 | GNUNET_FS_stop (fs); | 153 | GNUNET_FS_stop (fs); |
158 | fs = NULL; | 154 | fs = NULL; |
159 | break; | 155 | break; |
160 | case GNUNET_FS_STATUS_SEARCH_START: | 156 | case GNUNET_FS_STATUS_SEARCH_START: |
161 | GNUNET_assert (search == NULL); | 157 | GNUNET_assert (search == NULL); |
162 | GNUNET_assert (0 == strcmp ("search", event->value.search.cctx)); | 158 | GNUNET_assert (0 == strcmp ("search", event->value.search.cctx)); |
163 | GNUNET_assert (1 == event->value.search.anonymity); | 159 | GNUNET_assert (1 == event->value.search.anonymity); |
164 | break; | 160 | break; |
165 | case GNUNET_FS_STATUS_SEARCH_RESULT_STOPPED: | 161 | case GNUNET_FS_STATUS_SEARCH_RESULT_STOPPED: |
166 | break; | 162 | break; |
167 | case GNUNET_FS_STATUS_SEARCH_STOPPED: | 163 | case GNUNET_FS_STATUS_SEARCH_STOPPED: |
168 | GNUNET_assert (search == event->value.search.sc); | 164 | GNUNET_assert (search == event->value.search.sc); |
169 | GNUNET_SCHEDULER_add_continuation (&abort_publish_task, | 165 | GNUNET_SCHEDULER_add_continuation (&abort_publish_task, |
170 | NULL, | 166 | NULL, |
171 | GNUNET_SCHEDULER_REASON_PREREQ_DONE); | 167 | GNUNET_SCHEDULER_REASON_PREREQ_DONE); |
172 | break; | 168 | break; |
173 | default: | 169 | default: |
174 | fprintf (stderr, | 170 | fprintf (stderr, "Unexpected event: %d\n", event->status); |
175 | "Unexpected event: %d\n", | 171 | break; |
176 | event->status); | 172 | } |
177 | break; | ||
178 | } | ||
179 | return NULL; | 173 | return NULL; |
180 | } | 174 | } |
181 | 175 | ||
@@ -186,11 +180,11 @@ setup_peer (struct PeerContext *p, const char *cfgname) | |||
186 | p->cfg = GNUNET_CONFIGURATION_create (); | 180 | p->cfg = GNUNET_CONFIGURATION_create (); |
187 | #if START_ARM | 181 | #if START_ARM |
188 | p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", | 182 | p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", |
189 | "gnunet-service-arm", | 183 | "gnunet-service-arm", |
190 | #if VERBOSE | 184 | #if VERBOSE |
191 | "-L", "DEBUG", | 185 | "-L", "DEBUG", |
192 | #endif | 186 | #endif |
193 | "-c", cfgname, NULL); | 187 | "-c", cfgname, NULL); |
194 | #endif | 188 | #endif |
195 | GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); | 189 | GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); |
196 | } | 190 | } |
@@ -201,16 +195,17 @@ stop_arm (struct PeerContext *p) | |||
201 | { | 195 | { |
202 | #if START_ARM | 196 | #if START_ARM |
203 | if (NULL != p->arm_proc) | 197 | if (NULL != p->arm_proc) |
204 | { | 198 | { |
205 | if (0 != GNUNET_OS_process_kill (p->arm_proc, SIGTERM)) | 199 | if (0 != GNUNET_OS_process_kill (p->arm_proc, SIGTERM)) |
206 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); | 200 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); |
207 | if (GNUNET_OS_process_wait(p->arm_proc) != GNUNET_OK) | 201 | if (GNUNET_OS_process_wait (p->arm_proc) != GNUNET_OK) |
208 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); | 202 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); |
209 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 203 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
210 | "ARM process %u stopped\n", GNUNET_OS_process_get_pid (p->arm_proc)); | 204 | "ARM process %u stopped\n", |
211 | GNUNET_OS_process_close (p->arm_proc); | 205 | GNUNET_OS_process_get_pid (p->arm_proc)); |
212 | p->arm_proc = NULL; | 206 | GNUNET_OS_process_close (p->arm_proc); |
213 | } | 207 | p->arm_proc = NULL; |
208 | } | ||
214 | #endif | 209 | #endif |
215 | GNUNET_CONFIGURATION_destroy (p->cfg); | 210 | GNUNET_CONFIGURATION_destroy (p->cfg); |
216 | } | 211 | } |
@@ -219,8 +214,7 @@ stop_arm (struct PeerContext *p) | |||
219 | static void | 214 | static void |
220 | run (void *cls, | 215 | run (void *cls, |
221 | char *const *args, | 216 | char *const *args, |
222 | const char *cfgfile, | 217 | const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) |
223 | const struct GNUNET_CONFIGURATION_Handle *cfg) | ||
224 | { | 218 | { |
225 | const char *keywords[] = { | 219 | const char *keywords[] = { |
226 | "down_foo", | 220 | "down_foo", |
@@ -235,12 +229,10 @@ run (void *cls, | |||
235 | 229 | ||
236 | setup_peer (&p1, "test_fs_search_data.conf"); | 230 | setup_peer (&p1, "test_fs_search_data.conf"); |
237 | fs = GNUNET_FS_start (cfg, | 231 | fs = GNUNET_FS_start (cfg, |
238 | "test-fs-search", | 232 | "test-fs-search", |
239 | &progress_cb, | 233 | &progress_cb, |
240 | NULL, | 234 | NULL, GNUNET_FS_FLAGS_NONE, GNUNET_FS_OPTIONS_END); |
241 | GNUNET_FS_FLAGS_NONE, | 235 | GNUNET_assert (NULL != fs); |
242 | GNUNET_FS_OPTIONS_END); | ||
243 | GNUNET_assert (NULL != fs); | ||
244 | buf = GNUNET_malloc (FILESIZE); | 236 | buf = GNUNET_malloc (FILESIZE); |
245 | for (i = 0; i < FILESIZE; i++) | 237 | for (i = 0; i < FILESIZE; i++) |
246 | buf[i] = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 256); | 238 | buf[i] = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 256); |
@@ -251,21 +243,18 @@ run (void *cls, | |||
251 | bo.replication_level = 0; | 243 | bo.replication_level = 0; |
252 | bo.expiration_time = GNUNET_TIME_relative_to_absolute (LIFETIME); | 244 | bo.expiration_time = GNUNET_TIME_relative_to_absolute (LIFETIME); |
253 | fi = GNUNET_FS_file_information_create_from_data (fs, | 245 | fi = GNUNET_FS_file_information_create_from_data (fs, |
254 | "publish-context", | 246 | "publish-context", |
255 | FILESIZE, | 247 | FILESIZE, |
256 | buf, | 248 | buf, |
257 | kuri, | 249 | kuri, meta, GNUNET_NO, &bo); |
258 | meta, | ||
259 | GNUNET_NO, | ||
260 | &bo); | ||
261 | GNUNET_FS_uri_destroy (kuri); | 250 | GNUNET_FS_uri_destroy (kuri); |
262 | GNUNET_CONTAINER_meta_data_destroy (meta); | 251 | GNUNET_CONTAINER_meta_data_destroy (meta); |
263 | GNUNET_assert (NULL != fi); | 252 | GNUNET_assert (NULL != fi); |
264 | start = GNUNET_TIME_absolute_get (); | 253 | start = GNUNET_TIME_absolute_get (); |
265 | publish = GNUNET_FS_publish_start (fs, | 254 | publish = GNUNET_FS_publish_start (fs, |
266 | fi, | 255 | fi, |
267 | NULL, NULL, NULL, | 256 | NULL, NULL, NULL, |
268 | GNUNET_FS_PUBLISH_OPTION_NONE); | 257 | GNUNET_FS_PUBLISH_OPTION_NONE); |
269 | GNUNET_assert (publish != NULL); | 258 | GNUNET_assert (publish != NULL); |
270 | } | 259 | } |
271 | 260 | ||
@@ -273,7 +262,7 @@ run (void *cls, | |||
273 | int | 262 | int |
274 | main (int argc, char *argv[]) | 263 | main (int argc, char *argv[]) |
275 | { | 264 | { |
276 | char *const argvx[] = { | 265 | char *const argvx[] = { |
277 | "test-fs-search", | 266 | "test-fs-search", |
278 | "-c", | 267 | "-c", |
279 | "test_fs_search_data.conf", | 268 | "test_fs_search_data.conf", |
@@ -286,16 +275,15 @@ main (int argc, char *argv[]) | |||
286 | GNUNET_GETOPT_OPTION_END | 275 | GNUNET_GETOPT_OPTION_END |
287 | }; | 276 | }; |
288 | 277 | ||
289 | GNUNET_log_setup ("test_fs_search", | 278 | GNUNET_log_setup ("test_fs_search", |
290 | #if VERBOSE | 279 | #if VERBOSE |
291 | "DEBUG", | 280 | "DEBUG", |
292 | #else | 281 | #else |
293 | "WARNING", | 282 | "WARNING", |
294 | #endif | 283 | #endif |
295 | NULL); | 284 | NULL); |
296 | GNUNET_PROGRAM_run ((sizeof (argvx) / sizeof (char *)) - 1, | 285 | GNUNET_PROGRAM_run ((sizeof (argvx) / sizeof (char *)) - 1, |
297 | argvx, "test-fs-search", | 286 | argvx, "test-fs-search", "nohelp", options, &run, NULL); |
298 | "nohelp", options, &run, NULL); | ||
299 | stop_arm (&p1); | 287 | stop_arm (&p1); |
300 | GNUNET_DISK_directory_remove ("/tmp/gnunet-test-fs-search/"); | 288 | GNUNET_DISK_directory_remove ("/tmp/gnunet-test-fs-search/"); |
301 | return 0; | 289 | return 0; |