aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/testbed/gnunet-service-testbed.c18
-rw-r--r--src/testbed/test_testbed_api_3peers_3controllers.c18
-rw-r--r--src/testbed/test_testbed_api_controllerlink.c134
3 files changed, 123 insertions, 47 deletions
diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c
index d254b2b28..1bd22958e 100644
--- a/src/testbed/gnunet-service-testbed.c
+++ b/src/testbed/gnunet-service-testbed.c
@@ -2042,8 +2042,20 @@ handle_peer_get_config (void *cls, struct GNUNET_SERVER_Client *client,
2042 peer = peer_list[peer_id]; 2042 peer = peer_list[peer_id];
2043 if (GNUNET_YES == peer->is_remote) 2043 if (GNUNET_YES == peer->is_remote)
2044 { 2044 {
2045 /* FIXME: forward to sub controller */ 2045 struct ForwardedOperationContext *fopc;
2046 GNUNET_break (0); 2046
2047 fopc = GNUNET_malloc (sizeof (struct ForwardedOperationContext));
2048 GNUNET_SERVER_client_keep (client);
2049 fopc->client = client;
2050 fopc->operation_id = GNUNET_ntohll (msg->operation_id);
2051 fopc->opc =
2052 GNUNET_TESTBED_forward_operation_msg_ (peer->details.remote.controller,
2053 fopc->operation_id, &msg->header,
2054 &forwarded_operation_reply_relay,
2055 fopc);
2056 fopc->timeout_task =
2057 GNUNET_SCHEDULER_add_delayed (TIMEOUT, &forwarded_operation_timeout,
2058 fopc);
2047 GNUNET_SERVER_receive_done (client, GNUNET_OK); 2059 GNUNET_SERVER_receive_done (client, GNUNET_OK);
2048 return; 2060 return;
2049 } 2061 }
@@ -2683,8 +2695,6 @@ handle_overlay_request_connect (void *cls, struct GNUNET_SERVER_Client *client,
2683 sizeof (struct GNUNET_PeerIdentity)); 2695 sizeof (struct GNUNET_PeerIdentity));
2684 rocc->hello = GNUNET_malloc (hsize); 2696 rocc->hello = GNUNET_malloc (hsize);
2685 memcpy (rocc->hello, msg->hello, hsize); 2697 memcpy (rocc->hello, msg->hello, hsize);
2686 /* GNUNET_TRANSPORT_offer_hello (th, msg->hello, NULL, NULL); */
2687 /* GNUNET_TRANSPORT_try_connect (th, &msg->peer_identity); */
2688 rocc->attempt_connect_task_id = 2698 rocc->attempt_connect_task_id =
2689 GNUNET_SCHEDULER_add_now (&attempt_connect_task, rocc); 2699 GNUNET_SCHEDULER_add_now (&attempt_connect_task, rocc);
2690 rocc->timeout_rocc_task_id = 2700 rocc->timeout_rocc_task_id =
diff --git a/src/testbed/test_testbed_api_3peers_3controllers.c b/src/testbed/test_testbed_api_3peers_3controllers.c
index 0634bf87e..f69355b3c 100644
--- a/src/testbed/test_testbed_api_3peers_3controllers.c
+++ b/src/testbed/test_testbed_api_3peers_3controllers.c
@@ -688,8 +688,7 @@ status_cb (void *cls, const struct GNUNET_CONFIGURATION_Handle *config, int stat
688 break; 688 break;
689 default: 689 default:
690 GNUNET_assert (0); 690 GNUNET_assert (0);
691 } 691 }
692
693} 692}
694 693
695 694
@@ -709,7 +708,7 @@ run (void *cls, char *const *args, const char *cfgfile,
709 GNUNET_assert (NULL != host); 708 GNUNET_assert (NULL != host);
710 cfg = GNUNET_CONFIGURATION_dup (config); 709 cfg = GNUNET_CONFIGURATION_dup (config);
711 cp1 = GNUNET_TESTBED_controller_start ("127.0.0.1", host, cfg, status_cb, 710 cp1 = GNUNET_TESTBED_controller_start ("127.0.0.1", host, cfg, status_cb,
712 NULL); 711 NULL);
713 abort_task = 712 abort_task =
714 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 713 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
715 (GNUNET_TIME_UNIT_MINUTES, 3), &do_abort, 714 (GNUNET_TIME_UNIT_MINUTES, 3), &do_abort,
@@ -718,7 +717,9 @@ run (void *cls, char *const *args, const char *cfgfile,
718 717
719 718
720/** 719/**
721 * Function to check if password-less SSH logins to given ip work 720 * Function to check if
721 * 1. Password-less SSH logins to given ip work
722 * 2. gnunet-helper-testbed is found on the PATH on the remote side
722 * 723 *
723 * @param host_str numeric representation of the host's ip 724 * @param host_str numeric representation of the host's ip
724 * @return GNUNET_YES if password-less SSH login to the given host works; 725 * @return GNUNET_YES if password-less SSH login to the given host works;
@@ -728,8 +729,9 @@ static int
728check_ssh (char *host_str) 729check_ssh (char *host_str)
729{ 730{
730 char *const remote_args[] = { 731 char *const remote_args[] = {
731 "ssh", "-o", "BatchMode=yes", "-o", "CheckHostIP=no", "-q", 732 "ssh", "-o", "BatchMode=yes", "-o", "CheckHostIP=no",
732 host_str, "echo", "SSH", "works", NULL 733 "-o", "NoHostAuthenticationForLocalhost=yes", "-q",
734 host_str, "which", "gnunet-helper-testbed", NULL
733 }; 735 };
734 struct GNUNET_OS_Process *auxp; 736 struct GNUNET_OS_Process *auxp;
735 enum GNUNET_OS_ProcessStatusType type; 737 enum GNUNET_OS_ProcessStatusType type;
@@ -760,8 +762,8 @@ int
760main (int argc, char **argv) 762main (int argc, char **argv)
761{ 763{
762 char *const argv2[] = { "test_testbed_api_3peers_3controllers", 764 char *const argv2[] = { "test_testbed_api_3peers_3controllers",
763 "-c", "test_testbed_api.conf", 765 "-c", "test_testbed_api.conf",
764 NULL 766 NULL
765 }; 767 };
766 struct GNUNET_GETOPT_CommandLineOption options[] = { 768 struct GNUNET_GETOPT_CommandLineOption options[] = {
767 GNUNET_GETOPT_OPTION_END 769 GNUNET_GETOPT_OPTION_END
diff --git a/src/testbed/test_testbed_api_controllerlink.c b/src/testbed/test_testbed_api_controllerlink.c
index e11de7eab..aa3a49928 100644
--- a/src/testbed/test_testbed_api_controllerlink.c
+++ b/src/testbed/test_testbed_api_controllerlink.c
@@ -71,6 +71,16 @@ enum Stage
71 MASTER_STARTED, 71 MASTER_STARTED,
72 72
73 /** 73 /**
74 * A peer has been created on master
75 */
76 MASTER_PEER_CREATE_SUCCESS,
77
78 /**
79 * Peer on master controller has been started successfully.
80 */
81 MASTER_PEER_START_SUCCESS,
82
83 /**
74 * The first slave has been registered at master controller 84 * The first slave has been registered at master controller
75 */ 85 */
76 SLAVE1_REGISTERED, 86 SLAVE1_REGISTERED,
@@ -116,6 +126,11 @@ enum Stage
116 SLAVE2_PEER_START_SUCCESS, 126 SLAVE2_PEER_START_SUCCESS,
117 127
118 /** 128 /**
129 * Try to connect peers on master and slave 2.
130 */
131 MASTER_SLAVE2_PEERS_CONNECTED,
132
133 /**
119 * Peer on slave 2 successfully stopped 134 * Peer on slave 2 successfully stopped
120 */ 135 */
121 SLAVE2_PEER_STOP_SUCCESS, 136 SLAVE2_PEER_STOP_SUCCESS,
@@ -146,9 +161,9 @@ enum Stage
146 SLAVE3_GET_CONFIG_SUCCESS, 161 SLAVE3_GET_CONFIG_SUCCESS,
147 162
148 /** 163 /**
149 * Slave 1 has linked to slave 3; Also marks test as success 164 * Slave 1 has linked to slave 3;
150 */ 165 */
151 SLAVE3_LINK_SUCCESS, 166 SLAVE3_LINK_SUCCESS
152 167
153}; 168};
154 169
@@ -218,6 +233,11 @@ static struct GNUNET_TESTBED_Peer *slave1_peer;
218static struct GNUNET_TESTBED_Peer *slave2_peer; 233static struct GNUNET_TESTBED_Peer *slave2_peer;
219 234
220/** 235/**
236 * Handle to a peer started at master controller
237 */
238static struct GNUNET_TESTBED_Peer *master_peer;
239
240/**
221 * Event mask 241 * Event mask
222 */ 242 */
223uint64_t event_mask; 243uint64_t event_mask;
@@ -305,7 +325,7 @@ delay_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
305 op = GNUNET_TESTBED_peer_stop (slave1_peer, NULL, NULL); 325 op = GNUNET_TESTBED_peer_stop (slave1_peer, NULL, NULL);
306 GNUNET_assert (NULL != op); 326 GNUNET_assert (NULL != op);
307 break; 327 break;
308 case SLAVE2_PEER_START_SUCCESS: 328 case MASTER_SLAVE2_PEERS_CONNECTED:
309 op = GNUNET_TESTBED_peer_stop (slave2_peer, NULL, NULL); 329 op = GNUNET_TESTBED_peer_stop (slave2_peer, NULL, NULL);
310 GNUNET_assert (NULL != op); 330 GNUNET_assert (NULL != op);
311 break; 331 break;
@@ -327,29 +347,32 @@ delay_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
327static void 347static void
328peer_create_cb (void *cls, struct GNUNET_TESTBED_Peer *peer, const char *emsg) 348peer_create_cb (void *cls, struct GNUNET_TESTBED_Peer *peer, const char *emsg)
329{ 349{
350 GNUNET_assert (NULL != peer);
351 GNUNET_assert (NULL == emsg);
330 switch (result) 352 switch (result)
331 { 353 {
354 case MASTER_STARTED:
355 result = MASTER_PEER_CREATE_SUCCESS;
356 master_peer = peer;
357 GNUNET_TESTBED_operation_done (op);
358 op = GNUNET_TESTBED_peer_start (master_peer, NULL, NULL);
359 break;
332 case SLAVE2_LINK_SUCCESS: 360 case SLAVE2_LINK_SUCCESS:
333 GNUNET_assert (NULL != peer);
334 GNUNET_assert (NULL == emsg);
335 result = SLAVE1_PEER_CREATE_SUCCESS; 361 result = SLAVE1_PEER_CREATE_SUCCESS;
336 slave1_peer = peer; 362 slave1_peer = peer;
337 GNUNET_TESTBED_operation_done (op); 363 GNUNET_TESTBED_operation_done (op);
338 op = GNUNET_TESTBED_peer_create (mc, slave2, cfg, peer_create_cb, NULL); 364 op = GNUNET_TESTBED_peer_create (mc, slave2, cfg, peer_create_cb, NULL);
339 GNUNET_assert (NULL != op);
340 break; 365 break;
341 case SLAVE1_PEER_CREATE_SUCCESS: 366 case SLAVE1_PEER_CREATE_SUCCESS:
342 GNUNET_assert (NULL != peer);
343 GNUNET_assert (NULL == emsg);
344 result = SLAVE2_PEER_CREATE_SUCCESS; 367 result = SLAVE2_PEER_CREATE_SUCCESS;
345 slave2_peer = peer; 368 slave2_peer = peer;
346 GNUNET_TESTBED_operation_done (op); 369 GNUNET_TESTBED_operation_done (op);
347 op = GNUNET_TESTBED_peer_start (slave1_peer, NULL, NULL); 370 op = GNUNET_TESTBED_peer_start (slave1_peer, NULL, NULL);
348 GNUNET_assert (NULL != op);
349 break; 371 break;
350 default: 372 default:
351 GNUNET_assert (0); 373 GNUNET_assert (0);
352 } 374 }
375 GNUNET_assert (NULL != op);
353} 376}
354 377
355 378
@@ -411,6 +434,17 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event)
411 op = GNUNET_TESTBED_peer_create (mc, slave, cfg, peer_create_cb, NULL); 434 op = GNUNET_TESTBED_peer_create (mc, slave, cfg, peer_create_cb, NULL);
412 GNUNET_assert (NULL != op); 435 GNUNET_assert (NULL != op);
413 break; 436 break;
437 case MASTER_PEER_CREATE_SUCCESS:
438 GNUNET_assert (GNUNET_TESTBED_ET_PEER_START == event->type);
439 GNUNET_assert (event->details.peer_start.host == host);
440 GNUNET_assert (event->details.peer_start.peer == master_peer);
441 GNUNET_TESTBED_operation_done (op);
442 result = MASTER_PEER_START_SUCCESS;
443 slave = GNUNET_TESTBED_host_create_with_id (1, "127.0.0.1", NULL, 0);
444 GNUNET_assert (NULL != slave);
445 rh = GNUNET_TESTBED_register_host (mc, slave, &registration_cont, NULL);
446 GNUNET_assert (NULL != rh);
447 break;
414 case SLAVE2_PEER_CREATE_SUCCESS: 448 case SLAVE2_PEER_CREATE_SUCCESS:
415 GNUNET_assert (GNUNET_TESTBED_ET_PEER_START == event->type); 449 GNUNET_assert (GNUNET_TESTBED_ET_PEER_START == event->type);
416 GNUNET_assert (event->details.peer_start.host == slave); 450 GNUNET_assert (event->details.peer_start.host == slave);
@@ -435,11 +469,22 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event)
435 GNUNET_assert (event->details.peer_start.peer == slave2_peer); 469 GNUNET_assert (event->details.peer_start.peer == slave2_peer);
436 GNUNET_TESTBED_operation_done (op); 470 GNUNET_TESTBED_operation_done (op);
437 result = SLAVE2_PEER_START_SUCCESS; 471 result = SLAVE2_PEER_START_SUCCESS;
472 op = GNUNET_TESTBED_overlay_connect (mc, NULL, NULL, master_peer,
473 slave2_peer);
474 break;
475 case SLAVE2_PEER_START_SUCCESS:
476 GNUNET_assert (NULL != event);
477 GNUNET_assert (GNUNET_TESTBED_ET_CONNECT == event->type);
478 GNUNET_assert (event->details.peer_connect.peer1 == master_peer);
479 GNUNET_assert (event->details.peer_connect.peer2 == slave2_peer);
480 result = MASTER_SLAVE2_PEERS_CONNECTED;
481 GNUNET_TESTBED_operation_done (op);
482 op = NULL;
438 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 483 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
439 (GNUNET_TIME_UNIT_SECONDS, 1), &delay_task, 484 (GNUNET_TIME_UNIT_SECONDS, 1), &delay_task,
440 NULL); 485 NULL);
441 break; 486 break;
442 case SLAVE2_PEER_START_SUCCESS: 487 case MASTER_SLAVE2_PEERS_CONNECTED:
443 GNUNET_assert (GNUNET_TESTBED_ET_PEER_STOP == event->type); 488 GNUNET_assert (GNUNET_TESTBED_ET_PEER_STOP == event->type);
444 GNUNET_assert (event->details.peer_stop.peer == slave2_peer); 489 GNUNET_assert (event->details.peer_stop.peer == slave2_peer);
445 GNUNET_TESTBED_operation_done (op); 490 GNUNET_TESTBED_operation_done (op);
@@ -506,7 +551,7 @@ registration_cont (void *cls, const char *emsg)
506 rh = NULL; 551 rh = NULL;
507 switch (result) 552 switch (result)
508 { 553 {
509 case MASTER_STARTED: 554 case MASTER_PEER_START_SUCCESS:
510 GNUNET_assert (NULL == emsg); 555 GNUNET_assert (NULL == emsg);
511 GNUNET_assert (NULL != mc); 556 GNUNET_assert (NULL != mc);
512 result = SLAVE1_REGISTERED; 557 result = SLAVE1_REGISTERED;
@@ -563,10 +608,8 @@ status_cb (void *cls, const struct GNUNET_CONFIGURATION_Handle *config,
563 &controller_cb, NULL); 608 &controller_cb, NULL);
564 GNUNET_assert (NULL != mc); 609 GNUNET_assert (NULL != mc);
565 result = MASTER_STARTED; 610 result = MASTER_STARTED;
566 slave = GNUNET_TESTBED_host_create_with_id (1, "127.0.0.1", NULL, 0); 611 op = GNUNET_TESTBED_peer_create (mc, host, cfg, peer_create_cb, NULL);
567 GNUNET_assert (NULL != slave); 612 GNUNET_assert (NULL != op);
568 rh = GNUNET_TESTBED_register_host (mc, slave, &registration_cont, NULL);
569 GNUNET_assert (NULL != rh);
570 break; 613 break;
571 default: 614 default:
572 GNUNET_break (0); 615 GNUNET_break (0);
@@ -601,26 +644,26 @@ run (void *cls, char *const *args, const char *cfgfile,
601 644
602 645
603/** 646/**
604 * Main function 647 * Function to check if
648 * 1. Password-less SSH logins to given ip work
649 * 2. gnunet-helper-testbed is found on the PATH on the remote side
650 *
651 * @param host_str numeric representation of the host's ip
652 * @return GNUNET_YES if password-less SSH login to the given host works;
653 * GNUNET_NO if not
605 */ 654 */
606int 655static int
607main (int argc, char **argv) 656check_ssh (char *host_str)
608{ 657{
609 int ret;
610
611 char *const argv2[] = { "test_testbed_api_controllerlink",
612 "-c", "test_testbed_api.conf",
613 NULL
614 };
615 struct GNUNET_GETOPT_CommandLineOption options[] = {
616 GNUNET_GETOPT_OPTION_END
617 };
618 char *const remote_args[] = { 658 char *const remote_args[] = {
619 "ssh", "-o", "BatchMode=yes", "127.0.0.1", "echo", "Hello", "World", NULL 659 "ssh", "-o", "BatchMode=yes", "-o", "CheckHostIP=no",
660 "-o", "NoHostAuthenticationForLocalhost=yes", "-q",
661 host_str, "which", "gnunet-helper-testbed", NULL
620 }; 662 };
621 struct GNUNET_OS_Process *auxp; 663 struct GNUNET_OS_Process *auxp;
622 enum GNUNET_OS_ProcessStatusType type; 664 enum GNUNET_OS_ProcessStatusType type;
623 unsigned long code; 665 unsigned long code;
666 int ret;
624 667
625 auxp = 668 auxp =
626 GNUNET_OS_start_process_vap (GNUNET_NO, GNUNET_OS_INHERIT_STD_ALL, NULL, 669 GNUNET_OS_start_process_vap (GNUNET_NO, GNUNET_OS_INHERIT_STD_ALL, NULL,
@@ -635,13 +678,27 @@ main (int argc, char **argv)
635 while (GNUNET_NO == ret); 678 while (GNUNET_NO == ret);
636 (void) GNUNET_OS_process_wait (auxp); 679 (void) GNUNET_OS_process_wait (auxp);
637 GNUNET_OS_process_destroy (auxp); 680 GNUNET_OS_process_destroy (auxp);
638 if (0 != code) 681 return (0 != code) ? GNUNET_NO : GNUNET_YES;
639 { 682}
640 (void) printf ("Unable to run the test as this system is not configured " 683
641 "to use password less SSH logins to localhost.\n" 684
642 "Marking test as successful\n"); 685/**
643 return 0; 686 * Main function
644 } 687 */
688int
689main (int argc, char **argv)
690{
691 char *const argv2[] = { "test_testbed_api_controllerlink",
692 "-c", "test_testbed_api.conf",
693 NULL
694 };
695 struct GNUNET_GETOPT_CommandLineOption options[] = {
696 GNUNET_GETOPT_OPTION_END
697 };
698 int ret;
699
700 if (GNUNET_YES != check_ssh ("127.0.0.1"))
701 goto error_exit;
645 result = INIT; 702 result = INIT;
646 ret = 703 ret =
647 GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2, 704 GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2,
@@ -650,6 +707,13 @@ main (int argc, char **argv)
650 if ((GNUNET_OK != ret) || (SLAVE3_LINK_SUCCESS != result)) 707 if ((GNUNET_OK != ret) || (SLAVE3_LINK_SUCCESS != result))
651 return 1; 708 return 1;
652 return 0; 709 return 0;
710
711 error_exit:
712 (void) PRINTF ("%s",
713 "Unable to run the test as this system is not configured "
714 "to use password less SSH logins to localhost.\n"
715 "Marking test as successful\n");
716 return 0;
653} 717}
654 718
655/* end of test_testbed_api_controllerlink.c */ 719/* end of test_testbed_api_controllerlink.c */