diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-10-08 14:50:23 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-10-08 14:50:23 +0000 |
commit | a514e1b40566226d87ffdd95a51df47b7613fd95 (patch) | |
tree | beea8a850232016ed3773b0181fb7da844687af2 /src/testbed/test_testbed_api_controllerlink.c | |
parent | 71db17488a21f8e45c8a1aa932e7edb983ff2a70 (diff) | |
download | gnunet-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.c | 134 |
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; | |||
218 | static struct GNUNET_TESTBED_Peer *slave2_peer; | 233 | static struct GNUNET_TESTBED_Peer *slave2_peer; |
219 | 234 | ||
220 | /** | 235 | /** |
236 | * Handle to a peer started at master controller | ||
237 | */ | ||
238 | static struct GNUNET_TESTBED_Peer *master_peer; | ||
239 | |||
240 | /** | ||
221 | * Event mask | 241 | * Event mask |
222 | */ | 242 | */ |
223 | uint64_t event_mask; | 243 | uint64_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) | |||
327 | static void | 347 | static void |
328 | peer_create_cb (void *cls, struct GNUNET_TESTBED_Peer *peer, const char *emsg) | 348 | peer_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, ®istration_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, ®istration_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 | */ |
606 | int | 655 | static int |
607 | main (int argc, char **argv) | 656 | check_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 | */ |
688 | int | ||
689 | main (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 */ |