aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorxrs <xrs@mail36.net>2017-07-13 17:11:33 +0200
committerxrs <xrs@mail36.net>2017-07-13 17:11:33 +0200
commit94d4a65182acfb68cf1d4acdcddae1399d6e561f (patch)
treedfb842d54283b71ce0131142c75ace102b383960 /src
parentf0bca33f0011119bc103ba0e4c5ab83de2f00199 (diff)
downloadgnunet-94d4a65182acfb68cf1d4acdcddae1399d6e561f.tar.gz
gnunet-94d4a65182acfb68cf1d4acdcddae1399d6e561f.zip
test_multicast_multipeer: fix bug
Diffstat (limited to 'src')
-rw-r--r--src/multicast/test_multicast_multipeer.c153
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
38struct multicast_peer 38struct multicast_peer
39{ 39{
@@ -44,6 +44,18 @@ struct multicast_peer
44 int test_ok; 44 int test_ok;
45}; 45};
46 46
47enum pingpong
48{
49 PING = 1,
50 PONG = 2
51};
52
53struct pingpong_msg
54{
55 int peer;
56 enum pingpong msg;
57};
58
47static void service_connect (void *cls, 59static 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
62static struct GNUNET_SCHEDULER_Task *timeout_tid; 74static struct GNUNET_SCHEDULER_Task *timeout_tid;
63 75
64static struct GNUNET_CRYPTO_EddsaPrivateKey *group_key; 76static struct GNUNET_CRYPTO_EddsaPrivateKey group_key;
65static struct GNUNET_CRYPTO_EddsaPublicKey *group_pub_key; 77static struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key;
78static struct GNUNET_HashCode group_pub_key_hash;
66 79
67static struct GNUNET_CRYPTO_EcdsaPrivateKey *member_key[NUM_PEERS]; 80static struct GNUNET_CRYPTO_EcdsaPrivateKey *member_key[NUM_PEERS];
68static struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key[NUM_PEERS]; 81static 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
312origin_request (void *cls, 323origin_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
533static void
534testbed_master (void *cls, 551testbed_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,