aboutsummaryrefslogtreecommitdiff
path: root/src/hostlist/test_gnunet_daemon_hostlist_learning.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-04-28 18:58:31 +0000
committerChristian Grothoff <christian@grothoff.org>2011-04-28 18:58:31 +0000
commitcdb030fb83b3afce633a8bb96a2754abf00e43bd (patch)
tree5083a90d6bdab3186dbf39bb4c6fe41dea943706 /src/hostlist/test_gnunet_daemon_hostlist_learning.c
parent7cf1fb688ad71fc7ca94049c79c20cad57b0823c (diff)
downloadgnunet-cdb030fb83b3afce633a8bb96a2754abf00e43bd.tar.gz
gnunet-cdb030fb83b3afce633a8bb96a2754abf00e43bd.zip
fix
Diffstat (limited to 'src/hostlist/test_gnunet_daemon_hostlist_learning.c')
-rw-r--r--src/hostlist/test_gnunet_daemon_hostlist_learning.c169
1 files changed, 105 insertions, 64 deletions
diff --git a/src/hostlist/test_gnunet_daemon_hostlist_learning.c b/src/hostlist/test_gnunet_daemon_hostlist_learning.c
index 9e0b65104..1d3935511 100644
--- a/src/hostlist/test_gnunet_daemon_hostlist_learning.c
+++ b/src/hostlist/test_gnunet_daemon_hostlist_learning.c
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet 2 This file is part of GNUnet
3 (C) 2009 Christian Grothoff (and other contributing authors) 3 (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors)
4 4
5 GNUnet is free software; you can redistribute it and/or modify 5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published 6 it under the terms of the GNU General Public License as published
@@ -40,6 +40,7 @@
40 * How long until wait until testcases fails 40 * How long until wait until testcases fails
41 */ 41 */
42#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 180) 42#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 180)
43
43#define CHECK_INTERVALL GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1) 44#define CHECK_INTERVALL GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1)
44 45
45 46
@@ -83,7 +84,9 @@ static struct GNUNET_STATISTICS_GetHandle * urisrecv_stat;
83 84
84static struct GNUNET_STATISTICS_GetHandle * advsent_stat; 85static struct GNUNET_STATISTICS_GetHandle * advsent_stat;
85 86
86static void shutdown_testcase() 87
88static void
89shutdown_testcase()
87{ 90{
88 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 91 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
89 "Shutdown testcase....\n"); 92 "Shutdown testcase....\n");
@@ -112,8 +115,11 @@ static void shutdown_testcase()
112 GNUNET_SCHEDULER_cancel (check_task); 115 GNUNET_SCHEDULER_cancel (check_task);
113 check_task = GNUNET_SCHEDULER_NO_TASK; 116 check_task = GNUNET_SCHEDULER_NO_TASK;
114 } 117 }
115 GNUNET_free_non_null (current_adv_uri); 118 if (NULL != current_adv_uri)
116 current_adv_uri = NULL; 119 {
120 GNUNET_free (current_adv_uri);
121 current_adv_uri = NULL;
122 }
117 if (adv_peer.th != NULL) 123 if (adv_peer.th != NULL)
118 { 124 {
119 GNUNET_TRANSPORT_disconnect (adv_peer.th); 125 GNUNET_TRANSPORT_disconnect (adv_peer.th);
@@ -138,17 +144,21 @@ static void shutdown_testcase()
138 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 144 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
139 "Killing hostlist server ARM process.\n"); 145 "Killing hostlist server ARM process.\n");
140 if (0 != GNUNET_OS_process_kill (adv_peer.arm_proc, SIGTERM)) 146 if (0 != GNUNET_OS_process_kill (adv_peer.arm_proc, SIGTERM))
141 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); 147 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
148 "kill");
142 if (GNUNET_OS_process_wait(adv_peer.arm_proc) != GNUNET_OK) 149 if (GNUNET_OS_process_wait(adv_peer.arm_proc) != GNUNET_OK)
143 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); 150 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
151 "waitpid");
144 GNUNET_OS_process_close (adv_peer.arm_proc); 152 GNUNET_OS_process_close (adv_peer.arm_proc);
145 adv_peer.arm_proc = NULL; 153 adv_peer.arm_proc = NULL;
146 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 154 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
147 "Killing hostlist client ARM process.\n"); 155 "Killing hostlist client ARM process.\n");
148 if (0 != GNUNET_OS_process_kill (learn_peer.arm_proc, SIGTERM)) 156 if (0 != GNUNET_OS_process_kill (learn_peer.arm_proc, SIGTERM))
149 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); 157 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
158 "kill");
150 if (GNUNET_OS_process_wait(learn_peer.arm_proc) != GNUNET_OK) 159 if (GNUNET_OS_process_wait(learn_peer.arm_proc) != GNUNET_OK)
151 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); 160 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
161 "waitpid");
152 GNUNET_OS_process_close (learn_peer.arm_proc); 162 GNUNET_OS_process_close (learn_peer.arm_proc);
153 learn_peer.arm_proc = NULL; 163 learn_peer.arm_proc = NULL;
154#endif 164#endif
@@ -160,7 +170,8 @@ static void shutdown_testcase()
160 * Timeout, give up. 170 * Timeout, give up.
161 */ 171 */
162static void 172static void
163timeout_error (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 173timeout_error (void *cls,
174 const struct GNUNET_SCHEDULER_TaskContext *tc)
164{ 175{
165 timeout_task = GNUNET_SCHEDULER_NO_TASK; 176 timeout_task = GNUNET_SCHEDULER_NO_TASK;
166 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 177 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
@@ -172,19 +183,29 @@ timeout_error (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
172} 183}
173 184
174 185
186static void
187process_downloads_done (void *cls, int success)
188{
189 download_stats = NULL;
190}
191
192
175static int 193static int
176process_downloads (void *cls, 194process_downloads (void *cls,
177 const char *subsystem, 195 const char *subsystem,
178 const char *name, 196 const char *name,
179 uint64_t value, 197 uint64_t value,
180 int is_persistent) 198 int is_persistent)
181{ 199{
182 download_stats = NULL; 200 fprintf (stderr,
201 "New stat: %s has value %llu\n",
202 name,
203 (unsigned long long) value);
183 if ( (value == 2) && 204 if ( (value == 2) &&
184 (learned_hostlist_downloaded == GNUNET_NO) ) 205 (learned_hostlist_downloaded == GNUNET_NO) )
185 { 206 {
186 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 207 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
187 _("Peer has successfully downloaded advertised URI\n")); 208 "Peer has successfully downloaded advertised URI\n");
188 learned_hostlist_downloaded = GNUNET_YES; 209 learned_hostlist_downloaded = GNUNET_YES;
189 if ( (learned_hostlist_saved == GNUNET_YES) && 210 if ( (learned_hostlist_saved == GNUNET_YES) &&
190 (adv_sent == GNUNET_YES) ) 211 (adv_sent == GNUNET_YES) )
@@ -194,20 +215,26 @@ process_downloads (void *cls,
194} 215}
195 216
196 217
218static void
219process_uris_recv_done (void *cls, int success)
220{
221 urisrecv_stat = NULL;
222}
223
224
197static int 225static int
198process_uris_recv (void *cls, 226process_uris_recv (void *cls,
199 const char *subsystem, 227 const char *subsystem,
200 const char *name, 228 const char *name,
201 uint64_t value, 229 uint64_t value,
202 int is_persistent) 230 int is_persistent)
203{ 231{
204 urisrecv_stat = NULL;
205 if ( ((struct PeerContext *) cls == &learn_peer) && 232 if ( ((struct PeerContext *) cls == &learn_peer) &&
206 (value == 1) && 233 (value == 1) &&
207 (learned_hostlist_saved == GNUNET_NO) ) 234 (learned_hostlist_saved == GNUNET_NO) )
208 { 235 {
209 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 236 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
210 _("Peer has successfully saved advertised URI \n")); 237 "Peer has successfully saved advertised URI\n");
211 learned_hostlist_saved = GNUNET_YES; 238 learned_hostlist_saved = GNUNET_YES;
212 if ( (learned_hostlist_downloaded == GNUNET_YES) && 239 if ( (learned_hostlist_downloaded == GNUNET_YES) &&
213 (adv_sent == GNUNET_YES) ) 240 (adv_sent == GNUNET_YES) )
@@ -217,18 +244,24 @@ process_uris_recv (void *cls,
217} 244}
218 245
219 246
247static void
248process_adv_sent_done (void *cls, int success)
249{
250 advsent_stat = NULL;
251}
252
253
220static int 254static int
221process_adv_sent (void *cls, 255process_adv_sent (void *cls,
222 const char *subsystem, 256 const char *subsystem,
223 const char *name, 257 const char *name,
224 uint64_t value, 258 uint64_t value,
225 int is_persistent) 259 int is_persistent)
226{ 260{
227 advsent_stat = NULL;
228 if ( (value >= 1) && (adv_sent == GNUNET_NO)) 261 if ( (value >= 1) && (adv_sent == GNUNET_NO))
229 { 262 {
230 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 263 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
231 _("Server has successfully sent advertisement\n")); 264 "Server has successfully sent advertisement\n");
232 adv_sent = GNUNET_YES; 265 adv_sent = GNUNET_YES;
233 if ( (learned_hostlist_downloaded == GNUNET_YES) && 266 if ( (learned_hostlist_downloaded == GNUNET_YES) &&
234 (learned_hostlist_saved == GNUNET_YES) ) 267 (learned_hostlist_saved == GNUNET_YES) )
@@ -248,37 +281,42 @@ check_statistics (void *cls,
248 char *stat; 281 char *stat;
249 282
250 check_task = GNUNET_SCHEDULER_NO_TASK; 283 check_task = GNUNET_SCHEDULER_NO_TASK;
251 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 284 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
252 return; 285 return;
253 GNUNET_asprintf (&stat, 286 GNUNET_asprintf (&stat,
254 gettext_noop("# advertised URI `%s' downloaded"), 287 gettext_noop("# advertised URI `%s' downloaded"),
255 current_adv_uri); 288 current_adv_uri);
256 if ( NULL != learn_peer.stats) 289 if (NULL != learn_peer.stats)
257 { 290 {
291 if (NULL != download_stats)
292 GNUNET_STATISTICS_get_cancel (download_stats);
258 download_stats = GNUNET_STATISTICS_get (learn_peer.stats, 293 download_stats = GNUNET_STATISTICS_get (learn_peer.stats,
259 "hostlist", 294 "hostlist",
260 stat, 295 stat,
261 GNUNET_TIME_UNIT_MINUTES, 296 GNUNET_TIME_UNIT_MINUTES,
262 NULL, 297 &process_downloads_done,
263 &process_downloads, 298 &process_downloads,
264 &learn_peer); 299 &learn_peer);
265 300 if (NULL != urisrecv_stat)
301 GNUNET_STATISTICS_get_cancel (urisrecv_stat);
266 urisrecv_stat = GNUNET_STATISTICS_get (learn_peer.stats, 302 urisrecv_stat = GNUNET_STATISTICS_get (learn_peer.stats,
267 "hostlist", 303 "hostlist",
268 gettext_noop("# advertised hostlist URIs"), 304 gettext_noop("# advertised hostlist URIs"),
269 GNUNET_TIME_UNIT_MINUTES, 305 GNUNET_TIME_UNIT_MINUTES,
270 NULL, 306 &process_uris_recv_done,
271 &process_uris_recv, 307 &process_uris_recv,
272 &learn_peer); 308 &learn_peer);
273 } 309 }
274 GNUNET_free (stat); 310 GNUNET_free (stat);
275 if ( NULL != adv_peer.stats) 311 if ( NULL != adv_peer.stats)
276 { 312 {
313 if (NULL != advsent_stat)
314 GNUNET_STATISTICS_get_cancel (advsent_stat);
277 advsent_stat = GNUNET_STATISTICS_get (adv_peer.stats, 315 advsent_stat = GNUNET_STATISTICS_get (adv_peer.stats,
278 "hostlist", 316 "hostlist",
279 gettext_noop("# hostlist advertisements send"), 317 gettext_noop("# hostlist advertisements send"),
280 GNUNET_TIME_UNIT_MINUTES, 318 GNUNET_TIME_UNIT_MINUTES,
281 NULL, 319 &process_adv_sent_done,
282 &process_adv_sent, 320 &process_adv_sent,
283 NULL); 321 NULL);
284 } 322 }
@@ -326,7 +364,7 @@ ad_arrive_handler (void *cls,
326 if ( 0 == strcmp( expected_uri, current_adv_uri ) ) 364 if ( 0 == strcmp( expected_uri, current_adv_uri ) )
327 { 365 {
328 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 366 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
329 "Recieved hostlist advertisement with URI `%s' as expected\n", 367 "Received hostlist advertisement with URI `%s' as expected\n",
330 current_adv_uri); 368 current_adv_uri);
331 adv_arrived = GNUNET_YES; 369 adv_arrived = GNUNET_YES;
332 adv_sent = GNUNET_YES; 370 adv_sent = GNUNET_YES;
@@ -352,10 +390,12 @@ static struct GNUNET_CORE_MessageHandler learn_handlers[] = {
352 390
353 391
354static void 392static void
355setup_learn_peer (struct PeerContext *p, const char *cfgname) 393setup_learn_peer (struct PeerContext *p,
394 const char *cfgname)
356{ 395{
357 char * filename; 396 char * filename;
358 unsigned int result; 397 unsigned int result;
398
359 p->cfg = GNUNET_CONFIGURATION_create (); 399 p->cfg = GNUNET_CONFIGURATION_create ();
360#if START_ARM 400#if START_ARM
361 p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", 401 p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm",
@@ -370,17 +410,16 @@ setup_learn_peer (struct PeerContext *p, const char *cfgname)
370 "HOSTLIST", 410 "HOSTLIST",
371 "HOSTLISTFILE", 411 "HOSTLISTFILE",
372 &filename)) 412 &filename))
373 {
374 if ( GNUNET_YES == GNUNET_DISK_file_test (filename) )
375 { 413 {
376 result = remove (filename); 414 if (GNUNET_YES == GNUNET_DISK_file_test (filename))
377 if (result == 0) 415 {
378 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 416 result = UNLINK (filename);
379 _("Hostlist file `%s' was removed\n"),filename); 417 if (result == 0)
418 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
419 _("Hostlist file `%s' was removed\n"),filename);
420 }
421 GNUNET_free (filename);
380 } 422 }
381 }
382 if ( NULL != filename) GNUNET_free ( filename );
383
384 p->core = GNUNET_CORE_connect (p->cfg, 423 p->core = GNUNET_CORE_connect (p->cfg,
385 1, 424 1,
386 NULL, 425 NULL,
@@ -396,9 +435,9 @@ setup_learn_peer (struct PeerContext *p, const char *cfgname)
396 435
397 436
398static void 437static void
399setup_adv_peer (struct PeerContext *p, const char *cfgname) 438setup_adv_peer (struct PeerContext *p,
439 const char *cfgname)
400{ 440{
401
402 p->cfg = GNUNET_CONFIGURATION_create (); 441 p->cfg = GNUNET_CONFIGURATION_create ();
403#if START_ARM 442#if START_ARM
404 p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", 443 p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm",
@@ -411,9 +450,9 @@ setup_adv_peer (struct PeerContext *p, const char *cfgname)
411 GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); 450 GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
412 p->stats = GNUNET_STATISTICS_create ("hostlist", p->cfg); 451 p->stats = GNUNET_STATISTICS_create ("hostlist", p->cfg);
413 GNUNET_assert ( NULL != p->stats ); 452 GNUNET_assert ( NULL != p->stats );
414
415} 453}
416 454
455
417static void 456static void
418run (void *cls, 457run (void *cls,
419 char *const *args, 458 char *const *args,
@@ -440,11 +479,13 @@ run (void *cls,
440 NULL); 479 NULL);
441} 480}
442 481
482
443static int 483static int
444check () 484check ()
445{ 485{
446 unsigned int failed; 486 unsigned int failed;
447 char *const argv[] = { "test-gnunet-daemon-hostlist-learning", 487 char *const argv[] = {
488 "test-gnunet-daemon-hostlist-learning",
448 "-c", "learning_data.conf", 489 "-c", "learning_data.conf",
449#if VERBOSE 490#if VERBOSE
450 "-L", "DEBUG", 491 "-L", "DEBUG",
@@ -457,13 +498,13 @@ check ()
457 498
458 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, 499 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
459 argv, "test-gnunet-daemon-hostlist-learning", 500 argv, "test-gnunet-daemon-hostlist-learning",
460 "nohelp", options, &run, NULL); 501 "nohelp", options,
461 502 &run, NULL);
462 failed = GNUNET_NO; 503 failed = GNUNET_NO;
463 if (timeout == GNUNET_YES) 504 if (timeout == GNUNET_YES)
464 { 505 {
465 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 506 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
466 "Testcase could not set up two communicating peers, timeout\n"); 507 "Testcase timeout\n");
467 failed = GNUNET_YES; 508 failed = GNUNET_YES;
468 } 509 }
469 if (learned_hostlist_downloaded == GNUNET_YES) 510 if (learned_hostlist_downloaded == GNUNET_YES)
@@ -481,13 +522,13 @@ check ()
481 if ( learned_hostlist_saved == GNUNET_NO ) 522 if ( learned_hostlist_saved == GNUNET_NO )
482 { 523 {
483 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 524 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
484 "Peer1: Advertised hostlist was not saved in datastore\n"); 525 "Advertised hostlist was not saved in datastore\n");
485 failed = GNUNET_YES; 526 failed = GNUNET_YES;
486 } 527 }
487 if (learned_hostlist_downloaded == GNUNET_NO) 528 if (learned_hostlist_downloaded == GNUNET_NO)
488 { 529 {
489 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 530 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
490 "Peer1: Advertised hostlist could not be downloaded from server\n"); 531 "Advertised hostlist could not be downloaded from server\n");
491 failed = GNUNET_YES; 532 failed = GNUNET_YES;
492 } 533 }
493 if (adv_sent == GNUNET_NO) 534 if (adv_sent == GNUNET_NO)
@@ -501,10 +542,10 @@ check ()
501 return GNUNET_NO; 542 return GNUNET_NO;
502} 543}
503 544
545
504int 546int
505main (int argc, char *argv[]) 547main (int argc, char *argv[])
506{ 548{
507
508 int ret; 549 int ret;
509 550
510 GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-hostlist-peer-1"); 551 GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-hostlist-peer-1");
@@ -519,11 +560,11 @@ main (int argc, char *argv[])
519 ret = check (); 560 ret = check ();
520 GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-hostlist-peer-1"); 561 GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-hostlist-peer-1");
521 GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-hostlist-peer-2"); 562 GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-hostlist-peer-2");
522 if ( GNUNET_YES == GNUNET_DISK_file_test ("hostlists_learn_peer.file") ) 563 if (GNUNET_YES == GNUNET_DISK_file_test ("hostlists_learn_peer.file"))
523 { 564 {
524 if ( remove ("hostlists_learn_peer.file") == 0) 565 if (0 == UNLINK("hostlists_learn_peer.file"))
525 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 566 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
526 _("Hostlist file hostlists_learn_peer.file was removed\n")); 567 "Hostlist file hostlists_learn_peer.file was removed\n");
527 } 568 }
528 return ret; 569 return ret;
529} 570}