diff options
author | xrs <xrs@mail36.net> | 2017-07-13 17:11:33 +0200 |
---|---|---|
committer | xrs <xrs@mail36.net> | 2017-07-13 17:11:33 +0200 |
commit | 94d4a65182acfb68cf1d4acdcddae1399d6e561f (patch) | |
tree | dfb842d54283b71ce0131142c75ace102b383960 /src | |
parent | f0bca33f0011119bc103ba0e4c5ab83de2f00199 (diff) | |
download | gnunet-94d4a65182acfb68cf1d4acdcddae1399d6e561f.tar.gz gnunet-94d4a65182acfb68cf1d4acdcddae1399d6e561f.zip |
test_multicast_multipeer: fix bug
Diffstat (limited to 'src')
-rw-r--r-- | src/multicast/test_multicast_multipeer.c | 153 |
1 files changed, 85 insertions, 68 deletions
diff --git a/src/multicast/test_multicast_multipeer.c b/src/multicast/test_multicast_multipeer.c index 5c3664f35..29ee1e48f 100644 --- a/src/multicast/test_multicast_multipeer.c +++ b/src/multicast/test_multicast_multipeer.c | |||
@@ -33,7 +33,7 @@ | |||
33 | #include "gnunet_testbed_service.h" | 33 | #include "gnunet_testbed_service.h" |
34 | #include "gnunet_multicast_service.h" | 34 | #include "gnunet_multicast_service.h" |
35 | 35 | ||
36 | #define NUM_PEERS 2 | 36 | #define NUM_PEERS 10 |
37 | 37 | ||
38 | struct multicast_peer | 38 | struct multicast_peer |
39 | { | 39 | { |
@@ -44,6 +44,18 @@ struct multicast_peer | |||
44 | int test_ok; | 44 | int test_ok; |
45 | }; | 45 | }; |
46 | 46 | ||
47 | enum pingpong | ||
48 | { | ||
49 | PING = 1, | ||
50 | PONG = 2 | ||
51 | }; | ||
52 | |||
53 | struct pingpong_msg | ||
54 | { | ||
55 | int peer; | ||
56 | enum pingpong msg; | ||
57 | }; | ||
58 | |||
47 | static void service_connect (void *cls, | 59 | static void service_connect (void *cls, |
48 | struct GNUNET_TESTBED_Operation *op, | 60 | struct GNUNET_TESTBED_Operation *op, |
49 | void *ca_result, | 61 | void *ca_result, |
@@ -61,8 +73,9 @@ static struct GNUNET_MULTICAST_Member *member[NUM_PEERS]; /* first element alway | |||
61 | 73 | ||
62 | static struct GNUNET_SCHEDULER_Task *timeout_tid; | 74 | static struct GNUNET_SCHEDULER_Task *timeout_tid; |
63 | 75 | ||
64 | static struct GNUNET_CRYPTO_EddsaPrivateKey *group_key; | 76 | static struct GNUNET_CRYPTO_EddsaPrivateKey group_key; |
65 | static struct GNUNET_CRYPTO_EddsaPublicKey *group_pub_key; | 77 | static struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key; |
78 | static struct GNUNET_HashCode group_pub_key_hash; | ||
66 | 79 | ||
67 | static struct GNUNET_CRYPTO_EcdsaPrivateKey *member_key[NUM_PEERS]; | 80 | static struct GNUNET_CRYPTO_EcdsaPrivateKey *member_key[NUM_PEERS]; |
68 | static struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key[NUM_PEERS]; | 81 | static struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key[NUM_PEERS]; |
@@ -143,12 +156,15 @@ notify (void *cls, | |||
143 | { | 156 | { |
144 | struct multicast_peer *mc_peer = (struct multicast_peer*)cls; | 157 | struct multicast_peer *mc_peer = (struct multicast_peer*)cls; |
145 | 158 | ||
146 | char text[] = "ping"; | 159 | struct pingpong_msg *pp_msg = GNUNET_new (struct pingpong_msg); |
147 | *data_size = strlen(text)+1; | 160 | pp_msg->peer = mc_peer->peer; |
148 | GNUNET_memcpy(data, text, *data_size); | 161 | pp_msg->msg = PING; |
162 | |||
163 | *data_size = sizeof (struct pingpong_msg); | ||
164 | GNUNET_memcpy(data, pp_msg, *data_size); | ||
149 | 165 | ||
150 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 166 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
151 | "Peer #%u sents message to origin: %s\n", mc_peer->peer, text); | 167 | "Peer #%u sents ping to origin\n", mc_peer->peer); |
152 | 168 | ||
153 | return GNUNET_YES; | 169 | return GNUNET_YES; |
154 | } | 170 | } |
@@ -203,28 +219,19 @@ member_message (void *cls, | |||
203 | const struct GNUNET_MULTICAST_MessageHeader *msg) | 219 | const struct GNUNET_MULTICAST_MessageHeader *msg) |
204 | { | 220 | { |
205 | struct multicast_peer *mc_peer = (struct multicast_peer*)cls; | 221 | struct multicast_peer *mc_peer = (struct multicast_peer*)cls; |
222 | struct pingpong_msg *pp_msg = (struct pingpong_msg*) &(msg[1]); | ||
206 | 223 | ||
207 | if (0 != strncmp ("pong", (char *)&msg[1], 4)) | 224 | if (PONG == pp_msg->msg && mc_peer->peer == pp_msg->peer) |
208 | { | 225 | { |
209 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 226 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
210 | "peer #%i (%s) did not receive pong\n", | 227 | "peer #%i (%s) receives a pong\n", |
211 | mc_peer->peer, | 228 | mc_peer->peer, |
212 | GNUNET_i2s (mc_peers[mc_peer->peer]->id)); | 229 | GNUNET_i2s (mc_peers[mc_peer->peer]->id)); |
213 | 230 | ||
214 | result = GNUNET_SYSERR; | 231 | mc_peer->test_ok = GNUNET_OK; |
215 | GNUNET_SCHEDULER_shutdown (); | ||
216 | } | 232 | } |
217 | 233 | ||
218 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 234 | // Test for completeness of received PONGs |
219 | "peer #%i (%s) receives: %s\n", | ||
220 | mc_peer->peer, | ||
221 | GNUNET_i2s (mc_peers[mc_peer->peer]->id), | ||
222 | (char *)&msg[1]); | ||
223 | |||
224 | mc_peer->test_ok = GNUNET_OK; | ||
225 | |||
226 | // FIXME: ugly test function | ||
227 | // (we start with 1 because 0 is origin) | ||
228 | for (int i=1; i<NUM_PEERS; i++) | 235 | for (int i=1; i<NUM_PEERS; i++) |
229 | if (GNUNET_NO == mc_peers[i]->test_ok) | 236 | if (GNUNET_NO == mc_peers[i]->test_ok) |
230 | return; | 237 | return; |
@@ -298,11 +305,15 @@ origin_notify (void *cls, | |||
298 | size_t *data_size, | 305 | size_t *data_size, |
299 | void *data) | 306 | void *data) |
300 | { | 307 | { |
301 | char text[] = "pong"; | 308 | struct pingpong_msg *rcv_pp_msg = (struct pingpong_msg*)cls; |
302 | *data_size = strlen(text)+1; | 309 | struct pingpong_msg *pp_msg = GNUNET_new (struct pingpong_msg); |
303 | memcpy(data, text, *data_size); | ||
304 | 310 | ||
305 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin sends (to all): %s\n", text); | 311 | pp_msg->peer = rcv_pp_msg->peer; |
312 | pp_msg->msg = PONG; | ||
313 | *data_size = sizeof (struct pingpong_msg); | ||
314 | memcpy(data, pp_msg, *data_size); | ||
315 | |||
316 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin sends pong (to all)\n"); | ||
306 | 317 | ||
307 | return GNUNET_YES; | 318 | return GNUNET_YES; |
308 | } | 319 | } |
@@ -312,9 +323,12 @@ static void | |||
312 | origin_request (void *cls, | 323 | origin_request (void *cls, |
313 | const struct GNUNET_MULTICAST_RequestHeader *req) | 324 | const struct GNUNET_MULTICAST_RequestHeader *req) |
314 | { | 325 | { |
315 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin receives: %s\n", (char *)&req[1]); | 326 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin receives a msg\n"); |
327 | |||
328 | req++; | ||
329 | struct pingpong_msg *pp_msg = (struct pingpong_msg *) req; | ||
316 | 330 | ||
317 | if (0 != strncmp ("ping", (char *)&req[1], 4)) { | 331 | if (1 != pp_msg->msg) { |
318 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "origin didn't reveice a correct request"); | 332 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "origin didn't reveice a correct request"); |
319 | } | 333 | } |
320 | 334 | ||
@@ -322,7 +336,7 @@ origin_request (void *cls, | |||
322 | 0, | 336 | 0, |
323 | 0, | 337 | 0, |
324 | origin_notify, | 338 | origin_notify, |
325 | cls); | 339 | pp_msg); |
326 | } | 340 | } |
327 | 341 | ||
328 | 342 | ||
@@ -366,15 +380,17 @@ multicast_ca (void *cls, | |||
366 | struct multicast_peer *mc_peer = (struct multicast_peer*)cls; | 380 | struct multicast_peer *mc_peer = (struct multicast_peer*)cls; |
367 | struct GNUNET_MessageHeader *join_msg; | 381 | struct GNUNET_MessageHeader *join_msg; |
368 | char data[64]; | 382 | char data[64]; |
369 | 383 | ||
370 | if (0 == mc_peer->peer) | 384 | if (0 == mc_peer->peer) |
371 | { | 385 | { |
372 | group_pub_key = GNUNET_new (struct GNUNET_CRYPTO_EddsaPublicKey); | 386 | struct GNUNET_CRYPTO_EddsaPrivateKey *key = GNUNET_CRYPTO_eddsa_key_create (); |
373 | group_key = GNUNET_CRYPTO_eddsa_key_create (); | 387 | GNUNET_CRYPTO_eddsa_key_get_public (key, &group_pub_key); |
374 | GNUNET_CRYPTO_eddsa_key_get_public (group_key, group_pub_key); | 388 | GNUNET_CRYPTO_hash (&group_pub_key, sizeof (group_pub_key), &group_pub_key_hash); |
375 | 389 | ||
376 | return GNUNET_MULTICAST_origin_start (cfg, | 390 | group_key = *key; |
377 | group_key, | 391 | |
392 | origin = GNUNET_MULTICAST_origin_start (cfg, | ||
393 | &group_key, | ||
378 | 0, | 394 | 0, |
379 | origin_join_request, | 395 | origin_join_request, |
380 | origin_replay_frag, | 396 | origin_replay_frag, |
@@ -382,6 +398,20 @@ multicast_ca (void *cls, | |||
382 | origin_request, | 398 | origin_request, |
383 | origin_message, | 399 | origin_message, |
384 | cls); | 400 | cls); |
401 | |||
402 | if (NULL == origin) { | ||
403 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
404 | "Peer #%u could not create a multicast group", | ||
405 | mc_peer->peer); | ||
406 | return NULL; | ||
407 | } | ||
408 | |||
409 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
410 | "Peer #%u connected as origin to group %s\n", | ||
411 | mc_peer->peer, | ||
412 | GNUNET_h2s (&group_pub_key_hash)); | ||
413 | |||
414 | return origin; | ||
385 | } | 415 | } |
386 | else | 416 | else |
387 | { | 417 | { |
@@ -401,23 +431,25 @@ multicast_ca (void *cls, | |||
401 | GNUNET_memcpy (&join_msg[1], data, data_size); | 431 | GNUNET_memcpy (&join_msg[1], data, data_size); |
402 | 432 | ||
403 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 433 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
404 | "Peer #%u (%s) tries to join multicast group\n", | 434 | "Peer #%u (%s) tries to join multicast group %s\n", |
405 | mc_peer->peer, | 435 | mc_peer->peer, |
406 | GNUNET_i2s (mc_peers[mc_peer->peer]->id)); | 436 | GNUNET_i2s (mc_peers[mc_peer->peer]->id), |
407 | 437 | GNUNET_h2s (&group_pub_key_hash)); | |
408 | return GNUNET_MULTICAST_member_join (cfg, | 438 | |
409 | group_pub_key, | 439 | member[mc_peer->peer] = GNUNET_MULTICAST_member_join (cfg, |
410 | member_key[mc_peer->peer], | 440 | &group_pub_key, |
411 | mc_peers[0]->id, | 441 | member_key[mc_peer->peer], |
412 | 0, | 442 | mc_peers[0]->id, |
413 | NULL, | 443 | 0, |
414 | join_msg, /* join message */ | 444 | NULL, |
415 | member_join_request, | 445 | join_msg, /* join message */ |
416 | member_join_decision, | 446 | member_join_request, |
417 | member_replay_frag, | 447 | member_join_decision, |
418 | member_replay_msg, | 448 | member_replay_frag, |
419 | member_message, | 449 | member_replay_msg, |
420 | cls); | 450 | member_message, |
451 | cls); | ||
452 | return member[mc_peer->peer]; | ||
421 | } | 453 | } |
422 | } | 454 | } |
423 | 455 | ||
@@ -485,19 +517,9 @@ service_connect (void *cls, | |||
485 | GNUNET_SCHEDULER_shutdown(); | 517 | GNUNET_SCHEDULER_shutdown(); |
486 | } | 518 | } |
487 | 519 | ||
488 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
489 | "Connected to multicast service of peer #%u (%s)\n", | ||
490 | mc_peer->peer, | ||
491 | GNUNET_i2s (mc_peers[mc_peer->peer]->id)); | ||
492 | |||
493 | if (0 == mc_peer->peer) | 520 | if (0 == mc_peer->peer) |
494 | { | 521 | { |
495 | origin = ca_result; | 522 | // Get GNUnet identity of members |
496 | |||
497 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
498 | "Connected to multicast service of origin\n"); | ||
499 | |||
500 | // Get GNUnet identity of members | ||
501 | for (int i = 0; i<NUM_PEERS; i++) | 523 | for (int i = 0; i<NUM_PEERS; i++) |
502 | { | 524 | { |
503 | pi_op[i] = GNUNET_TESTBED_peer_get_information (peers[i], | 525 | pi_op[i] = GNUNET_TESTBED_peer_get_information (peers[i], |
@@ -506,10 +528,6 @@ service_connect (void *cls, | |||
506 | mc_peers[i]); | 528 | mc_peers[i]); |
507 | } | 529 | } |
508 | } | 530 | } |
509 | else | ||
510 | { | ||
511 | member[mc_peer->peer] = ca_result; | ||
512 | } | ||
513 | } | 531 | } |
514 | 532 | ||
515 | 533 | ||
@@ -529,8 +547,7 @@ service_connect (void *cls, | |||
529 | * @param num_peers size of the 'peers' array | 547 | * @param num_peers size of the 'peers' array |
530 | * @param links_succeeded number of links between peers that were created | 548 | * @param links_succeeded number of links between peers that were created |
531 | * @param links_failed number of links testbed was unable to establish | 549 | * @param links_failed number of links testbed was unable to establish |
532 | */ | 550 | */ static void |
533 | static void | ||
534 | testbed_master (void *cls, | 551 | testbed_master (void *cls, |
535 | struct GNUNET_TESTBED_RunHandle *h, | 552 | struct GNUNET_TESTBED_RunHandle *h, |
536 | unsigned int num_peers, | 553 | unsigned int num_peers, |