diff options
Diffstat (limited to 'src/psyc/test_psyc.c')
-rw-r--r-- | src/psyc/test_psyc.c | 66 |
1 files changed, 51 insertions, 15 deletions
diff --git a/src/psyc/test_psyc.c b/src/psyc/test_psyc.c index 88947be60..360d56c06 100644 --- a/src/psyc/test_psyc.c +++ b/src/psyc/test_psyc.c | |||
@@ -35,7 +35,7 @@ | |||
35 | #include "gnunet_env_lib.h" | 35 | #include "gnunet_env_lib.h" |
36 | #include "gnunet_psyc_service.h" | 36 | #include "gnunet_psyc_service.h" |
37 | 37 | ||
38 | #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10) | 38 | #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) |
39 | 39 | ||
40 | #define DEBUG_SERVICE 1 | 40 | #define DEBUG_SERVICE 1 |
41 | 41 | ||
@@ -72,6 +72,7 @@ struct TransmitClosure | |||
72 | char *data[16]; | 72 | char *data[16]; |
73 | const char *mod_value; | 73 | const char *mod_value; |
74 | size_t mod_value_size; | 74 | size_t mod_value_size; |
75 | uint8_t data_delay[16]; | ||
75 | uint8_t data_count; | 76 | uint8_t data_count; |
76 | uint8_t paused; | 77 | uint8_t paused; |
77 | uint8_t n; | 78 | uint8_t n; |
@@ -259,13 +260,16 @@ transmit_resume (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
259 | { | 260 | { |
260 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission resumed.\n"); | 261 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission resumed.\n"); |
261 | struct TransmitClosure *tmit = cls; | 262 | struct TransmitClosure *tmit = cls; |
262 | tmit->paused = GNUNET_NO; | 263 | if (NULL != tmit->mst_tmit) |
263 | GNUNET_PSYC_master_transmit_resume (tmit->mst_tmit); | 264 | GNUNET_PSYC_master_transmit_resume (tmit->mst_tmit); |
265 | else | ||
266 | GNUNET_PSYC_slave_transmit_resume (tmit->slv_tmit); | ||
264 | } | 267 | } |
265 | 268 | ||
266 | 269 | ||
267 | static int | 270 | static int |
268 | tmit_notify_mod (void *cls, uint16_t *data_size, void *data, uint8_t *oper) | 271 | tmit_notify_mod (void *cls, uint16_t *data_size, void *data, uint8_t *oper, |
272 | uint32_t *full_value_size) | ||
269 | { | 273 | { |
270 | struct TransmitClosure *tmit = cls; | 274 | struct TransmitClosure *tmit = cls; |
271 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 275 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -288,6 +292,8 @@ tmit_notify_mod (void *cls, uint16_t *data_size, void *data, uint8_t *oper) | |||
288 | return GNUNET_YES; | 292 | return GNUNET_YES; |
289 | } | 293 | } |
290 | 294 | ||
295 | GNUNET_assert (value_size < UINT32_MAX); | ||
296 | *full_value_size = value_size; | ||
291 | *oper = op; | 297 | *oper = op; |
292 | name_size = strlen (name); | 298 | name_size = strlen (name); |
293 | 299 | ||
@@ -351,7 +357,7 @@ tmit_notify_data (void *cls, uint16_t *data_size, void *data) | |||
351 | 357 | ||
352 | uint16_t size = strlen (tmit->data[tmit->n]); | 358 | uint16_t size = strlen (tmit->data[tmit->n]); |
353 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 359 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
354 | "Transmit notify data: %lu bytes available, " | 360 | "Transmit notify data: %u bytes available, " |
355 | "processing fragment %u/%u (size %u).\n", | 361 | "processing fragment %u/%u (size %u).\n", |
356 | *data_size, tmit->n + 1, tmit->data_count, size); | 362 | *data_size, tmit->n + 1, tmit->data_count, size); |
357 | if (*data_size < size) | 363 | if (*data_size < size) |
@@ -361,17 +367,18 @@ tmit_notify_data (void *cls, uint16_t *data_size, void *data) | |||
361 | return GNUNET_SYSERR; | 367 | return GNUNET_SYSERR; |
362 | } | 368 | } |
363 | 369 | ||
364 | if (GNUNET_YES == tmit->paused && tmit->n == tmit->data_count - 1) | 370 | if (GNUNET_YES != tmit->paused && 0 < tmit->data_delay[tmit->n]) |
365 | { | 371 | { |
366 | /* Send last fragment later. */ | ||
367 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission paused.\n"); | 372 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission paused.\n"); |
368 | tmit->paused = GNUNET_YES; | 373 | tmit->paused = GNUNET_YES; |
369 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply | 374 | GNUNET_SCHEDULER_add_delayed ( |
370 | (GNUNET_TIME_UNIT_SECONDS, 3), | 375 | GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, |
371 | &transmit_resume, tmit); | 376 | tmit->data_delay[tmit->n]), |
377 | &transmit_resume, tmit); | ||
372 | *data_size = 0; | 378 | *data_size = 0; |
373 | return GNUNET_NO; | 379 | return GNUNET_NO; |
374 | } | 380 | } |
381 | tmit->paused = GNUNET_NO; | ||
375 | 382 | ||
376 | *data_size = size; | 383 | *data_size = size; |
377 | memcpy (data, tmit->data[tmit->n], size); | 384 | memcpy (data, tmit->data[tmit->n], size); |
@@ -416,8 +423,9 @@ slave_join () | |||
416 | GNUNET_ENV_environment_add (env, GNUNET_ENV_OP_ASSIGN, | 423 | GNUNET_ENV_environment_add (env, GNUNET_ENV_OP_ASSIGN, |
417 | "_foo_bar", "foo bar baz", 11); | 424 | "_foo_bar", "foo bar baz", 11); |
418 | slv = GNUNET_PSYC_slave_join (cfg, &channel_pub_key, slave_key, &origin, | 425 | slv = GNUNET_PSYC_slave_join (cfg, &channel_pub_key, slave_key, &origin, |
419 | 16, relays, &slave_message, &join_request, &slave_joined, | 426 | 16, relays, &slave_message, &join_request, |
420 | NULL, "_request_join", env, "some data", 9); | 427 | &slave_joined, NULL, "_request_join", env, |
428 | "some data", 9); | ||
421 | GNUNET_ENV_environment_destroy (env); | 429 | GNUNET_ENV_environment_destroy (env); |
422 | } | 430 | } |
423 | 431 | ||
@@ -427,17 +435,45 @@ master_transmit () | |||
427 | { | 435 | { |
428 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Master sending message to all.\n"); | 436 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Master sending message to all.\n"); |
429 | test = TEST_MASTER_TRANSMIT; | 437 | test = TEST_MASTER_TRANSMIT; |
438 | uint32_t i, j; | ||
439 | |||
440 | char *name_max = "_test_max"; | ||
441 | uint8_t name_max_size = sizeof ("_test_max"); | ||
442 | char *val_max = GNUNET_malloc (GNUNET_PSYC_MODIFIER_MAX_PAYLOAD); | ||
443 | for (i = 0; i < GNUNET_PSYC_MODIFIER_MAX_PAYLOAD; i++) | ||
444 | val_max[i] = (0 == i % 10000) ? '0' + i / 10000 : '.'; | ||
445 | |||
446 | char *name_cont = "_test_cont"; | ||
447 | uint8_t name_cont_size = sizeof ("_test_cont"); | ||
448 | char *val_cont = GNUNET_malloc (GNUNET_PSYC_MODIFIER_MAX_PAYLOAD | ||
449 | + GNUNET_PSYC_MOD_CONT_MAX_PAYLOAD); | ||
450 | for (i = 0; i < GNUNET_PSYC_MODIFIER_MAX_PAYLOAD - name_cont_size; i++) | ||
451 | val_cont[i] = (0 == i % 10000) ? '0' + i / 10000 : ':'; | ||
452 | for (j = 0; j < GNUNET_PSYC_MOD_CONT_MAX_PAYLOAD; j++, i++) | ||
453 | val_cont[i] = (0 == j % 10000) ? '0' + j / 10000 : '!'; | ||
430 | 454 | ||
431 | tmit = GNUNET_new (struct TransmitClosure); | 455 | tmit = GNUNET_new (struct TransmitClosure); |
432 | tmit->env = GNUNET_ENV_environment_create (); | 456 | tmit->env = GNUNET_ENV_environment_create (); |
433 | GNUNET_ENV_environment_add (tmit->env, GNUNET_ENV_OP_ASSIGN, | 457 | GNUNET_ENV_environment_add (tmit->env, GNUNET_ENV_OP_ASSIGN, |
434 | "_foo", "bar baz", 7); | 458 | "_foo", "bar baz", 7); |
435 | GNUNET_ENV_environment_add (tmit->env, GNUNET_ENV_OP_ASSIGN, | 459 | GNUNET_ENV_environment_add (tmit->env, GNUNET_ENV_OP_ASSIGN, |
460 | name_max, val_max, | ||
461 | GNUNET_PSYC_MODIFIER_MAX_PAYLOAD | ||
462 | - name_max_size); | ||
463 | GNUNET_ENV_environment_add (tmit->env, GNUNET_ENV_OP_ASSIGN, | ||
436 | "_foo_bar", "foo bar baz", 11); | 464 | "_foo_bar", "foo bar baz", 11); |
465 | GNUNET_ENV_environment_add (tmit->env, GNUNET_ENV_OP_ASSIGN, | ||
466 | name_cont, val_cont, | ||
467 | GNUNET_PSYC_MODIFIER_MAX_PAYLOAD - name_cont_size | ||
468 | + GNUNET_PSYC_MOD_CONT_MAX_PAYLOAD); | ||
437 | tmit->data[0] = "foo"; | 469 | tmit->data[0] = "foo"; |
438 | tmit->data[1] = "foo bar"; | 470 | tmit->data[1] = GNUNET_malloc (GNUNET_PSYC_DATA_MAX_PAYLOAD + 1); |
439 | tmit->data[2] = "foo bar baz"; | 471 | for (i = 0; i < GNUNET_PSYC_DATA_MAX_PAYLOAD; i++) |
440 | tmit->data_count = 3; | 472 | tmit->data[1][i] = (0 == i % 10000) ? '0' + i / 10000 : '_'; |
473 | tmit->data[2] = "foo bar"; | ||
474 | tmit->data[3] = "foo bar baz"; | ||
475 | tmit->data_delay[1] = 3; | ||
476 | tmit->data_count = 4; | ||
441 | tmit->mst_tmit | 477 | tmit->mst_tmit |
442 | = GNUNET_PSYC_master_transmit (mst, "_notice_test", tmit_notify_mod, | 478 | = GNUNET_PSYC_master_transmit (mst, "_notice_test", tmit_notify_mod, |
443 | tmit_notify_data, tmit, | 479 | tmit_notify_data, tmit, |