X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftestbed%2Ftest_testbed_api_controllerlink.c;h=471ab3a94c3ec0d1dd63b49d2f056e9ff4b00eb6;hb=27c12911f4f2aba2d90099270d70de846e83854f;hp=2f9e53b947c6dd0a747dae4d04b4843c43040459;hpb=d0d39def77f1f81dd83823e0fe2cfe84a5393a74;p=oweals%2Fgnunet.git diff --git a/src/testbed/test_testbed_api_controllerlink.c b/src/testbed/test_testbed_api_controllerlink.c index 2f9e53b94..471ab3a94 100644 --- a/src/testbed/test_testbed_api_controllerlink.c +++ b/src/testbed/test_testbed_api_controllerlink.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet - (C) 2008--2012 Christian Grothoff (and other contributing authors) + (C) 2008--2013 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -131,29 +131,44 @@ enum Stage MASTER_SLAVE2_PEERS_CONNECTED, /** - * Peer on slave 2 successfully stopped + * Slave 3 has successfully registered */ - SLAVE2_PEER_STOP_SUCCESS, + SLAVE3_REGISTERED, /** - * Peer destroy on slave 1 successful + * Slave 3 has successfully started */ - SLAVE1_PEER_DESTROY_SUCCESS, + SLAVE3_STARTED, /** - * Peer destory on slave 2 successful + * Peer created on slave 3 */ - SLAVE2_PEER_DESTROY_SUCCESS, + SLAVE3_PEER_CREATE_SUCCESS, /** - * Slave 3 has successfully registered + * Peer started at slave 3 */ - SLAVE3_REGISTERED, + SLAVE3_PEER_START_SUCCESS, /** - * Slave 3 has successfully started + * Try to connect peers on slave2 and slave3 */ - SLAVE3_STARTED, + SLAVE2_SLAVE3_PEERS_CONNECTED, + + /** + * Peer on slave 2 successfully stopped + */ + SLAVE2_PEER_STOP_SUCCESS, + + /** + * Peer destroy on slave 1 successful + */ + SLAVE1_PEER_DESTROY_SUCCESS, + + /** + * Peer destory on slave 2 successful + */ + SLAVE2_PEER_DESTROY_SUCCESS, /** * The configuration of slave 3 is acquired @@ -166,7 +181,12 @@ enum Stage SLAVE3_LINK_SUCCESS, /** - * Destory master peer and mark test as success + * Master peer destoryed. Destory slave 3 peer + */ + MASTER_PEER_DESTROY_SUCCESS, + + /** + * Slave 3 peer destroyed. Mark test as success */ SUCCESS, @@ -241,6 +261,11 @@ static struct GNUNET_TESTBED_Peer *slave1_peer; */ static struct GNUNET_TESTBED_Peer *slave2_peer; +/** + * Handle to peer started at slave 2 + */ +static struct GNUNET_TESTBED_Peer *slave3_peer; + /** * Handle to a peer started at master controller */ @@ -299,6 +324,10 @@ do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) } if (NULL != hc_handle) GNUNET_TESTBED_is_host_habitable_cancel (hc_handle); + if (NULL != mc) + GNUNET_TESTBED_controller_disconnect (mc); + if (NULL != cp) + GNUNET_TESTBED_controller_stop (cp); if (NULL != slave3) GNUNET_TESTBED_host_destroy (slave3); if (NULL != slave2) @@ -307,14 +336,10 @@ do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_TESTBED_host_destroy (slave); if (NULL != host) GNUNET_TESTBED_host_destroy (host); - if (NULL != mc) - GNUNET_TESTBED_controller_disconnect (mc); if (NULL != cfg) GNUNET_CONFIGURATION_destroy (cfg); if (NULL != cfg3) GNUNET_CONFIGURATION_destroy (cfg3); - if (NULL != cp) - GNUNET_TESTBED_controller_stop (cp); if (NULL != rh) GNUNET_TESTBED_cancel_registration (rh); } @@ -350,6 +375,16 @@ do_abort_now (void *cls) } +/** + * Callback which will be called to after a host registration succeeded or failed + * + * @param cls the host which has been registered + * @param emsg the error message; NULL if host registration is successful + */ +static void +registration_cont (void *cls, const char *emsg); + + /** * Task for inserting delay between tests * @@ -367,6 +402,10 @@ delay_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) FAIL_TEST (NULL != op); break; case MASTER_SLAVE2_PEERS_CONNECTED: + slave3 = GNUNET_TESTBED_host_create_with_id (3, "127.0.0.1", NULL, cfg, 0); + rh = GNUNET_TESTBED_register_host (mc, slave3, ®istration_cont, NULL); + break; + case SLAVE2_SLAVE3_PEERS_CONNECTED: op = GNUNET_TESTBED_peer_stop (NULL, slave2_peer, NULL, NULL); FAIL_TEST (NULL != op); break; @@ -414,6 +453,12 @@ peer_create_cb (void *cls, struct GNUNET_TESTBED_Peer *peer, const char *emsg) &delay_task, NULL); break; + case SLAVE3_STARTED: + result = SLAVE3_PEER_CREATE_SUCCESS; + slave3_peer = peer; + GNUNET_TESTBED_operation_done (op); + op = GNUNET_TESTBED_peer_start (NULL, slave3_peer, NULL, NULL); + break; default: FAIL_TEST (0); } @@ -439,16 +484,6 @@ check_operation_success (const struct GNUNET_TESTBED_EventInformation *event) } -/** - * Callback which will be called to after a host registration succeeded or failed - * - * @param cls the host which has been registered - * @param emsg the error message; NULL if host registration is successful - */ -static void -registration_cont (void *cls, const char *emsg); - - /** * Signature of the event handler function called by the * respective event controller. @@ -495,8 +530,7 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) FAIL_TEST (event->details.peer_start.peer == slave1_peer); GNUNET_TESTBED_operation_done (op); result = SLAVE1_PEER_START_SUCCESS; - op = GNUNET_TESTBED_controller_link (NULL, mc, slave2, slave, cfg, - GNUNET_YES); + op = GNUNET_TESTBED_controller_link (NULL, mc, slave2, slave, GNUNET_YES); break; case SLAVE2_PEER_CREATE_SUCCESS: FAIL_TEST (GNUNET_TESTBED_ET_PEER_STOP == event->type); @@ -506,6 +540,31 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) op = GNUNET_TESTBED_peer_start (NULL, slave2_peer, NULL, NULL); FAIL_TEST (NULL != op); break; + case SLAVE3_PEER_CREATE_SUCCESS: + FAIL_TEST (GNUNET_TESTBED_ET_PEER_START == event->type); + FAIL_TEST (event->details.peer_start.host == slave3); + FAIL_TEST (event->details.peer_start.peer == slave3_peer); + GNUNET_TESTBED_operation_done (op); + result = SLAVE3_PEER_START_SUCCESS; + sleep (1); + LOG_DEBUG ("**************************************\n"); + op = GNUNET_TESTBED_overlay_connect (mc, NULL, NULL, slave2_peer, + slave3_peer); + FAIL_TEST (NULL != op); + break; + case SLAVE3_PEER_START_SUCCESS: + FAIL_TEST (NULL != event); + FAIL_TEST (GNUNET_TESTBED_ET_CONNECT == event->type); + FAIL_TEST (event->details.peer_connect.peer1 == slave2_peer); + FAIL_TEST (event->details.peer_connect.peer2 == slave3_peer); + result = SLAVE2_SLAVE3_PEERS_CONNECTED; + GNUNET_TESTBED_operation_done (op); + op = NULL; + delay_task_id = + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply + (GNUNET_TIME_UNIT_SECONDS, 1), &delay_task, + NULL); + break; case SLAVE1_PEER_STOP_SUCCESS: FAIL_TEST (GNUNET_TESTBED_ET_PEER_START == event->type); FAIL_TEST (event->details.peer_start.host == slave2); @@ -528,7 +587,7 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) (GNUNET_TIME_UNIT_SECONDS, 1), &delay_task, NULL); break; - case MASTER_SLAVE2_PEERS_CONNECTED: + case SLAVE2_SLAVE3_PEERS_CONNECTED: FAIL_TEST (GNUNET_TESTBED_ET_PEER_STOP == event->type); FAIL_TEST (event->details.peer_stop.peer == slave2_peer); GNUNET_TESTBED_operation_done (op); @@ -548,18 +607,10 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) GNUNET_TESTBED_operation_done (op); op = NULL; result = SLAVE2_PEER_DESTROY_SUCCESS; - slave3 = GNUNET_TESTBED_host_create_with_id (3, "127.0.0.1", NULL, cfg, 0); - rh = GNUNET_TESTBED_register_host (mc, slave3, ®istration_cont, NULL); - break; - case SLAVE3_REGISTERED: - check_operation_success (event); - GNUNET_TESTBED_operation_done (op); - op = NULL; - result = SLAVE3_STARTED; op = GNUNET_TESTBED_get_slave_config (NULL, mc, slave3); FAIL_TEST (NULL != op); break; - case SLAVE3_STARTED: + case SLAVE2_PEER_DESTROY_SUCCESS: FAIL_TEST (NULL != event); FAIL_TEST (GNUNET_TESTBED_ET_OPERATION_FINISHED == event->type); FAIL_TEST (event->op == op); @@ -568,8 +619,15 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) cfg3 = GNUNET_CONFIGURATION_dup (event->details.operation_finished.generic); GNUNET_TESTBED_operation_done (op); result = SLAVE3_GET_CONFIG_SUCCESS; - op = GNUNET_TESTBED_controller_link (NULL, mc, slave3, slave, cfg3, - GNUNET_NO); + op = GNUNET_TESTBED_controller_link (NULL, mc, slave3, slave, GNUNET_NO); + break; + case SLAVE3_REGISTERED: + check_operation_success (event); + GNUNET_TESTBED_operation_done (op); + op = NULL; + result = SLAVE3_STARTED; + op = GNUNET_TESTBED_peer_create (mc, slave3, cfg, peer_create_cb, NULL); + FAIL_TEST (NULL != op); break; case SLAVE3_GET_CONFIG_SUCCESS: result = SLAVE3_LINK_SUCCESS; @@ -578,11 +636,16 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) break; case SLAVE3_LINK_SUCCESS: check_operation_success (event); + result = MASTER_PEER_DESTROY_SUCCESS; + GNUNET_TESTBED_operation_done (op); + op = GNUNET_TESTBED_peer_destroy (slave3_peer); + break; + case MASTER_PEER_DESTROY_SUCCESS: result = SUCCESS; GNUNET_TESTBED_operation_done (op); op = NULL; GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_SECONDS, 3), &do_shutdown, + (GNUNET_TIME_UNIT_SECONDS, 1), &do_shutdown, NULL); break; default: @@ -617,17 +680,15 @@ registration_cont (void *cls, const char *emsg) FAIL_TEST (NULL != mc); result = SLAVE2_REGISTERED; FAIL_TEST (NULL != cfg); - op = GNUNET_TESTBED_controller_link (NULL, mc, slave, NULL, cfg, - GNUNET_YES); + op = GNUNET_TESTBED_controller_link (NULL, mc, slave, NULL, GNUNET_YES); FAIL_TEST (NULL != op); break; - case SLAVE2_PEER_DESTROY_SUCCESS: + case MASTER_SLAVE2_PEERS_CONNECTED: FAIL_TEST (NULL == emsg); FAIL_TEST (NULL != mc); FAIL_TEST (NULL == op); result = SLAVE3_REGISTERED; - op = GNUNET_TESTBED_controller_link (NULL, mc, slave3, NULL, cfg, - GNUNET_YES); + op = GNUNET_TESTBED_controller_link (NULL, mc, slave3, NULL, GNUNET_YES); FAIL_TEST (NULL != op); break; default: @@ -658,7 +719,7 @@ status_cb (void *cls, const struct GNUNET_CONFIGURATION_Handle *config, event_mask |= (1L << GNUNET_TESTBED_ET_PEER_STOP); event_mask |= (1L << GNUNET_TESTBED_ET_CONNECT); event_mask |= (1L << GNUNET_TESTBED_ET_OPERATION_FINISHED); - mc = GNUNET_TESTBED_controller_connect (config, host, event_mask, + mc = GNUNET_TESTBED_controller_connect (host, event_mask, &controller_cb, NULL); FAIL_TEST (NULL != mc); result = MASTER_STARTED; @@ -700,7 +761,7 @@ host_habitable_cb (void *cls, const struct GNUNET_TESTBED_Host *_host, result = SKIP; return; } - cp = GNUNET_TESTBED_controller_start ("127.0.0.1", host, cfg, status_cb, + cp = GNUNET_TESTBED_controller_start ("127.0.0.1", host, status_cb, NULL); }