aboutsummaryrefslogtreecommitdiff
path: root/src/testbed/test_testbed_api_controllerlink.c
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-10-08 14:50:23 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-10-08 14:50:23 +0000
commita514e1b40566226d87ffdd95a51df47b7613fd95 (patch)
treebeea8a850232016ed3773b0181fb7da844687af2 /src/testbed/test_testbed_api_controllerlink.c
parent71db17488a21f8e45c8a1aa932e7edb983ff2a70 (diff)
downloadgnunet-a514e1b40566226d87ffdd95a51df47b7613fd95.tar.gz
gnunet-a514e1b40566226d87ffdd95a51df47b7613fd95.zip
added get peer config forwarding
Diffstat (limited to 'src/testbed/test_testbed_api_controllerlink.c')
-rw-r--r--src/testbed/test_testbed_api_controllerlink.c134
1 files changed, 99 insertions, 35 deletions
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 */