/**
* The testing architecture is:
- * C1
- * / \
- * / \
- * C2 == C3
- * C1 is the master controller and C2, C3 are slave controllers. C2 links to C3
- * laterally
+ * A
+ * / \
+ * / \
+ * B === C
+ * A is the master controller and B, C are slave controllers. B links to C
+ * laterally.
+ * Peers are mapped to controllers in the following relations:
+ * Peer Controller
+ * 1 A
+ * 2 B
+ * 3 C
+ *
*/
#include "platform.h"
*/
static struct GNUNET_TESTBED_Controller *controller1;
-/**
- * The controller handle of another controller
- */
-static struct GNUNET_TESTBED_Controller *controller2;
-
/**
* peer 1
*/
static struct GNUNET_CONFIGURATION_Handle *cfg;
/**
- * Handle to controller2 configuration, used to establish lateral link from
- * controller 1
+ * Handle to slave controller C's configuration, used to establish lateral link from
+ * master controller
*/
static struct GNUNET_CONFIGURATION_Handle *cfg2;
PEER3_STARTED,
/**
- * peers are connected
+ * peer1 and peer2 are connected
*/
- PEERS_CONNECTED,
+ PEERS_1_2_CONNECTED,
+
+ /**
+ * peer2 and peer3 are connected
+ */
+ PEERS_2_3_CONNECTED,
/**
* Peers are connected once again (this should not fail as they are already connected)
* @param tc the task context
*/
static void
-do_shutdown (void *cls, const const struct GNUNET_SCHEDULER_TaskContext *tc)
+do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
if (GNUNET_SCHEDULER_NO_TASK != abort_task)
GNUNET_SCHEDULER_cancel (abort_task);
GNUNET_TESTBED_cancel_registration (reg_handle);
if (NULL != controller1)
GNUNET_TESTBED_controller_disconnect (controller1);
- if (NULL != controller2)
- GNUNET_TESTBED_controller_disconnect (controller2);
GNUNET_CONFIGURATION_destroy (cfg);
if (NULL != cfg2)
GNUNET_CONFIGURATION_destroy (cfg2);
* @param tc the task context
*/
static void
-do_abort (void *cls, const const struct GNUNET_SCHEDULER_TaskContext *tc)
+do_abort (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
LOG (GNUNET_ERROR_TYPE_WARNING, "Test timedout -- Aborting\n");
abort_task = GNUNET_SCHEDULER_NO_TASK;
* @param tc the task context
*/
static void
-do_delayed_connect (void *cls, const const struct GNUNET_SCHEDULER_TaskContext *tc)
+do_delayed_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
delayed_connect_task = GNUNET_SCHEDULER_NO_TASK;
GNUNET_assert (NULL == common_operation);
GNUNET_assert (NULL != common_operation);
GNUNET_TESTBED_operation_done (common_operation);
common_operation = NULL;
- result = PEERS_CONNECTED;
+ result = PEERS_1_2_CONNECTED;
LOG (GNUNET_ERROR_TYPE_DEBUG, "Peers connected\n");
+ common_operation =
+ GNUNET_TESTBED_overlay_connect (NULL, &op_comp_cb, NULL, peer2.peer,
+ peer3.peer);
+ break;
+ case PEERS_1_2_CONNECTED:
+ GNUNET_assert (NULL != common_operation);
+ GNUNET_TESTBED_operation_done (common_operation);
+ common_operation = NULL;
+ result = PEERS_2_3_CONNECTED;
delayed_connect_task =
- GNUNET_SCHEDULER_add_delayed (TIME_REL_SECS (3),
- &do_delayed_connect, NULL);
+ GNUNET_SCHEDULER_add_delayed (TIME_REL_SECS (3),
+ &do_delayed_connect, NULL);
break;
- case PEERS_CONNECTED:
+ case PEERS_2_3_CONNECTED:
GNUNET_assert (NULL == peer1.operation);
GNUNET_assert (NULL == peer2.operation);
GNUNET_assert (NULL != common_operation);
peer1.peer = peer;
GNUNET_TESTBED_operation_done (peer1.operation);
result = PEER1_CREATED;
- peer1.operation = GNUNET_TESTBED_peer_start (peer, NULL, NULL);
+ peer1.operation = GNUNET_TESTBED_peer_start (NULL, peer, NULL, NULL);
break;
case CONTROLLER2_UP:
GNUNET_assert (NULL != peer2.operation);
peer2.peer = peer;
GNUNET_TESTBED_operation_done (peer2.operation);
result = PEER2_CREATED;
- peer2.operation = GNUNET_TESTBED_peer_start (peer, NULL, NULL);
+ peer2.operation = GNUNET_TESTBED_peer_start (NULL, peer, NULL, NULL);
break;
case CONTROLLER3_UP:
GNUNET_assert (NULL != peer3.operation);
peer3.peer = peer;
GNUNET_TESTBED_operation_done (peer3.operation);
result = PEER3_CREATED;
- peer3.operation = GNUNET_TESTBED_peer_start (peer, NULL, NULL);
+ peer3.operation = GNUNET_TESTBED_peer_start (NULL, peer, NULL, NULL);
break;
default:
GNUNET_assert (0);
case GNUNET_TESTBED_ET_OPERATION_FINISHED:
GNUNET_assert (NULL == event->details.operation_finished.op_cls);
GNUNET_assert (NULL == event->details.operation_finished.emsg);
- GNUNET_assert (NULL == event->details.operation_finished.generic);
switch (result)
- {
+ {
case PEERS_STOPPED:
+ GNUNET_assert (NULL == event->details.operation_finished.generic);
if (event->details.operation_finished.operation == peer1.operation)
{
GNUNET_TESTBED_operation_done (peer1.operation);
}
break;
case PEER1_STARTED:
+ GNUNET_assert (NULL == event->details.operation_finished.generic);
GNUNET_assert (NULL != common_operation);
GNUNET_TESTBED_operation_done (common_operation);
common_operation = NULL;
GNUNET_assert (NULL != peer2.operation);
break;
case PEER2_STARTED:
+ GNUNET_assert (NULL == event->details.operation_finished.generic);
GNUNET_assert (NULL != common_operation);
GNUNET_TESTBED_operation_done (common_operation);
common_operation = NULL;
peer1.operation = NULL;
result = PEER1_STARTED;
common_operation =
- GNUNET_TESTBED_controller_link (controller1, neighbour1, NULL, cfg,
+ GNUNET_TESTBED_controller_link (NULL, controller1, neighbour1, NULL, cfg,
GNUNET_YES);
break;
case PEER2_CREATED:
result = PEER2_STARTED;
GNUNET_assert (NULL == common_operation);
common_operation =
- GNUNET_TESTBED_controller_link (controller1, neighbour2, NULL, cfg,
+ GNUNET_TESTBED_controller_link (NULL, controller1, neighbour2, NULL, cfg,
GNUNET_YES);
GNUNET_assert (NULL != common_operation);
break;
peer3.operation = NULL;
result = PEER3_STARTED;
common_operation =
- GNUNET_TESTBED_overlay_connect (NULL, &op_comp_cb, NULL, peer1.peer,
- peer2.peer);
+ GNUNET_TESTBED_overlay_connect (NULL, &op_comp_cb, NULL, peer2.peer,
+ peer1.peer);
break;
default:
GNUNET_assert (0);
}
break;
case GNUNET_TESTBED_ET_CONNECT:
+ GNUNET_assert (NULL == peer1.operation);
+ GNUNET_assert (NULL == peer2.operation);
+ GNUNET_assert (NULL == peer3.operation);
switch (result)
{
case PEER3_STARTED:
- case PEERS_CONNECTED:
- GNUNET_assert (NULL == peer1.operation);
- GNUNET_assert (NULL == peer2.operation);
- GNUNET_assert (NULL == peer3.operation);
GNUNET_assert (NULL != common_operation);
- /* GNUNET_assert ((event->details.peer_connect.peer1 == peer1.peer) && */
- /* (event->details.peer_connect.peer2 == peer2.peer)); */
+ GNUNET_assert ((event->details.peer_connect.peer1 == peer2.peer) &&
+ (event->details.peer_connect.peer2 == peer1.peer));
+ break;
+ case PEERS_2_3_CONNECTED:
+ GNUNET_assert (NULL != common_operation);
+ GNUNET_assert ((event->details.peer_connect.peer1 == peer1.peer) &&
+ (event->details.peer_connect.peer2 == peer2.peer));
+ break;
+ case PEERS_1_2_CONNECTED:
+ GNUNET_assert (NULL != common_operation);
+ GNUNET_assert ((event->details.peer_connect.peer1 == peer2.peer) &&
+ (event->details.peer_connect.peer2 == peer3.peer));
break;
default:
GNUNET_assert (0);
break;
default:
GNUNET_assert (0);
- }
-
+ }
}
GNUNET_assert (NULL != host);
cfg = GNUNET_CONFIGURATION_dup (config);
cp1 = GNUNET_TESTBED_controller_start ("127.0.0.1", host, cfg, status_cb,
- NULL);
+ NULL);
abort_task =
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_MINUTES, 3), &do_abort,
/**
- * Function to check if password-less SSH logins to given ip work
+ * Function to check if
+ * 1. Password-less SSH logins to given ip work
+ * 2. gnunet-helper-testbed is found on the PATH on the remote side
*
* @param host_str numeric representation of the host's ip
* @return GNUNET_YES if password-less SSH login to the given host works;
check_ssh (char *host_str)
{
char *const remote_args[] = {
- "ssh", "-o", "BatchMode=yes", "-o", "CheckHostIP=no", "-q",
- host_str, "echo", "SSH", "works", NULL
+ "ssh", "-o", "BatchMode=yes", "-o", "CheckHostIP=no",
+ "-o", "NoHostAuthenticationForLocalhost=yes", "-q",
+ host_str, "which", "gnunet-helper-testbed", NULL
};
struct GNUNET_OS_Process *auxp;
enum GNUNET_OS_ProcessStatusType type;
main (int argc, char **argv)
{
char *const argv2[] = { "test_testbed_api_3peers_3controllers",
- "-c", "test_testbed_api.conf",
- NULL
+ "-c", "test_testbed_api.conf",
+ NULL
};
struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_OPTION_END
};
int ret;
- //GNUNET_OS_network_interfaces_list (&interface_processor, NULL);
-
if (GNUNET_YES != check_ssh ("127.0.0.1"))
goto error_exit;
result = INIT;
return 0;
error_exit:
- (void) PRINTF ("Unable to run the test as this system is not configured "
+ (void) PRINTF ("%s",
+ "Unable to run the test as this system is not configured "
"to use password less SSH logins to localhost.\n"
"Marking test as successful\n");
return 0;