aboutsummaryrefslogtreecommitdiff
path: root/src/psyc/test_psyc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/psyc/test_psyc.c')
-rw-r--r--src/psyc/test_psyc.c66
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
267static int 270static int
268tmit_notify_mod (void *cls, uint16_t *data_size, void *data, uint8_t *oper) 271tmit_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,