X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftestbed%2Ftest_testbed_api.c;h=dd270df17389b617896cac7522e4fada38e8cffb;hb=d17a17ea785f91c18b5694eab3372c4e4564d95e;hp=0fb745a1cfa748ded39f973ddf2e70f2a0690c09;hpb=a58166f25e49799aa9a4a5447f857f59e6a3a828;p=oweals%2Fgnunet.git diff --git a/src/testbed/test_testbed_api.c b/src/testbed/test_testbed_api.c index 0fb745a1c..dd270df17 100644 --- a/src/testbed/test_testbed_api.c +++ b/src/testbed/test_testbed_api.c @@ -1,21 +1,21 @@ /* This file is part of GNUnet - (C) 2008--2012 Christian Grothoff (and other contributing authors) + Copyright (C) 2008--2013 GNUnet e.V. - GNUnet is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + Affero General Public License for more details. - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later */ /** @@ -26,14 +26,14 @@ #include "platform.h" #include "gnunet_util_lib.h" -#include "gnunet_dht_service.h" -#include "gnunet_testing_lib-new.h" +#include "gnunet_arm_service.h" +#include "gnunet_testing_lib.h" #include "gnunet_testbed_service.h" /** * Generic logging shortcut */ -#define LOG(kind,...) \ +#define LOG(kind, ...) \ GNUNET_log (kind, __VA_ARGS__) /** @@ -83,14 +83,14 @@ static struct GNUNET_CONFIGURATION_Handle *cfg; static struct GNUNET_TESTBED_Operation *operation; /** - * Handle to peer's DHT service + * Handle to peer's ARM service */ -static struct GNUNET_DHT_Handle *dht_handle; +static struct GNUNET_ARM_Handle *arm_handle; /** * Abort task identifier */ -static GNUNET_SCHEDULER_TaskIdentifier abort_task; +static struct GNUNET_SCHEDULER_Task *abort_task; /** * The testing result @@ -103,25 +103,25 @@ static int result; */ enum Test { - /** - * Test cases which are not covered by the below ones - */ + /** + * Test cases which are not covered by the below ones + */ OTHER, - /** - * Test where we get a peer config from controller - */ + /** + * Test where we get a peer config from controller + */ PEER_GETCONFIG, - /** - * Test where we connect to a service running on the peer - */ + /** + * Test where we connect to a service running on the peer + */ PEER_SERVICE_CONNECT, - /** - * Test where we get a peer's identity from controller - */ - PEER_DESTROY, + /** + * Test where we get a peer's identity from controller + */ + PEER_DESTROY }; /** @@ -136,22 +136,41 @@ static enum Test sub_test; * @param tc the task context */ static void -do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +do_shutdown (void *cls) { LOG (GNUNET_ERROR_TYPE_DEBUG, "Shutting down...\n"); - if (GNUNET_SCHEDULER_NO_TASK != abort_task) + if (NULL != abort_task) GNUNET_SCHEDULER_cancel (abort_task); if (NULL != reg_handle) GNUNET_TESTBED_cancel_registration (reg_handle); - GNUNET_TESTBED_controller_disconnect (controller); - GNUNET_CONFIGURATION_destroy (cfg); + if (NULL != controller) + GNUNET_TESTBED_controller_disconnect (controller); + if (NULL != cfg) + GNUNET_CONFIGURATION_destroy (cfg); if (NULL != cp) GNUNET_TESTBED_controller_stop (cp); - GNUNET_TESTBED_host_destroy (neighbour); - GNUNET_TESTBED_host_destroy (host); + if (NULL != neighbour) + GNUNET_TESTBED_host_destroy (neighbour); + if (NULL != host) + GNUNET_TESTBED_host_destroy (host); } +/** + * shortcut to exit during failure + */ +#define FAIL_TEST(cond, ret) do { \ + if (! (cond)) { \ + GNUNET_break (0); \ + if (NULL != abort_task) \ + GNUNET_SCHEDULER_cancel (abort_task); \ + abort_task = NULL; \ + GNUNET_SCHEDULER_add_now (do_shutdown, NULL); \ + ret; \ + } \ +} while (0) + + /** * abort task to run on test timed out * @@ -159,11 +178,11 @@ do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) * @param tc the task context */ static void -do_abort (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +do_abort (void *cls) { LOG (GNUNET_ERROR_TYPE_WARNING, "Test timedout -- Aborting\n"); - abort_task = GNUNET_SCHEDULER_NO_TASK; - do_shutdown (cls, tc); + abort_task = NULL; + do_shutdown (cls); } @@ -178,13 +197,14 @@ do_abort (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) * @return service handle to return in 'op_result', NULL on error */ static void * -dht_connect_adapter (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg) +arm_connect_adapter (void *cls, + const struct GNUNET_CONFIGURATION_Handle *cfg) { - GNUNET_assert (NULL == cls); - GNUNET_assert (OTHER == sub_test); + FAIL_TEST (NULL == cls, return NULL); + FAIL_TEST (OTHER == sub_test, return NULL); sub_test = PEER_SERVICE_CONNECT; - dht_handle = GNUNET_DHT_connect (cfg, 10); - return dht_handle; + arm_handle = GNUNET_ARM_connect (cfg, NULL, NULL); + return arm_handle; } @@ -196,16 +216,17 @@ dht_connect_adapter (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg) * @param op_result service handle returned from the connect adapter */ static void -dht_disconnect_adapter (void *cls, void *op_result) +arm_disconnect_adapter (void *cls, + void *op_result) { - GNUNET_assert (NULL != op_result); - GNUNET_assert (op_result == dht_handle); - GNUNET_DHT_disconnect (dht_handle); - dht_handle = NULL; - GNUNET_assert (PEER_SERVICE_CONNECT == sub_test); - GNUNET_assert (NULL != operation); - operation = GNUNET_TESTBED_peer_stop (peer, NULL, NULL); - GNUNET_assert (NULL != operation); + FAIL_TEST (NULL != op_result, return ); + FAIL_TEST (op_result == arm_handle, return ); + GNUNET_ARM_disconnect (arm_handle); + arm_handle = NULL; + FAIL_TEST (PEER_SERVICE_CONNECT == sub_test, return ); + FAIL_TEST (NULL != operation, return ); + operation = GNUNET_TESTBED_peer_stop (NULL, peer, NULL, NULL); + FAIL_TEST (NULL != operation, return ); } @@ -218,27 +239,29 @@ dht_disconnect_adapter (void *cls, void *op_result) * @param emsg error message in case the operation has failed; will be NULL if * operation has executed successfully. */ -static void -service_connect_comp_cb (void *cls, struct GNUNET_TESTBED_Operation *op, - void *ca_result, const char *emsg) +static void +service_connect_comp_cb (void *cls, + struct GNUNET_TESTBED_Operation *op, + void *ca_result, + const char *emsg) { switch (sub_test) { case PEER_SERVICE_CONNECT: - GNUNET_assert (operation == op); - GNUNET_assert (NULL == emsg); - GNUNET_assert (NULL == cls); - GNUNET_assert (ca_result == dht_handle); - GNUNET_TESTBED_operation_done (operation); /* This results in call to - * disconnect adapter */ + FAIL_TEST (operation == op, return ); + FAIL_TEST (NULL == emsg, return ); + FAIL_TEST (NULL == cls, return ); + FAIL_TEST (ca_result == arm_handle, return ); + GNUNET_TESTBED_operation_done (operation); /* This results in call to + * disconnect adapter */ break; + default: - GNUNET_assert (0); + FAIL_TEST (0, return ); } } - /** * Callback to be called when the requested peer information is available * @@ -248,26 +271,28 @@ service_connect_comp_cb (void *cls, struct GNUNET_TESTBED_Operation *op, * @param emsg error message if the operation has failed; will be NULL if the * operation is successfull */ -static void -peerinfo_cb (void *cb_cls, struct GNUNET_TESTBED_Operation *op, - const struct GNUNET_TESTBED_PeerInformation *pinfo, - const char *emsg) +static void +peerinfo_cb (void *cb_cls, + struct GNUNET_TESTBED_Operation *op, + const struct GNUNET_TESTBED_PeerInformation *pinfo, + const char *emsg) { switch (sub_test) { case PEER_GETCONFIG: - GNUNET_assert (NULL != pinfo); - GNUNET_assert (NULL == emsg); - GNUNET_assert (NULL == cb_cls); - GNUNET_assert (operation == op); - GNUNET_assert (GNUNET_TESTBED_PIT_CONFIGURATION == pinfo->pit); - GNUNET_assert (NULL != pinfo->result.cfg); + FAIL_TEST (NULL != pinfo, return ); + FAIL_TEST (NULL == emsg, return ); + FAIL_TEST (NULL == cb_cls, return ); + FAIL_TEST (operation == op, return ); + FAIL_TEST (GNUNET_TESTBED_PIT_CONFIGURATION == pinfo->pit, return ); + FAIL_TEST (NULL != pinfo->result.cfg, return ); sub_test = PEER_DESTROY; GNUNET_TESTBED_operation_done (operation); operation = GNUNET_TESTBED_peer_destroy (peer); break; + default: - GNUNET_assert (0); + FAIL_TEST (0, return ); } } @@ -280,7 +305,8 @@ peerinfo_cb (void *cb_cls, struct GNUNET_TESTBED_Operation *op, * @param event information about the event */ static void -controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) +controller_cb (void *cls, + const struct GNUNET_TESTBED_EventInformation *event) { switch (event->type) { @@ -288,50 +314,56 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) switch (sub_test) { case PEER_DESTROY: - GNUNET_assert (event->details.operation_finished.operation == operation); - 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); + FAIL_TEST (event->op == operation, return ); + FAIL_TEST (NULL == event->op_cls, return ); + FAIL_TEST (NULL == event->details.operation_finished.emsg, return ); + FAIL_TEST (NULL == event->details.operation_finished.generic, return ); GNUNET_TESTBED_operation_done (operation); GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); break; + case PEER_SERVICE_CONNECT: - GNUNET_assert (event->details.operation_finished.operation == operation); - GNUNET_assert (NULL == event->details.operation_finished.op_cls); - GNUNET_assert (NULL == event->details.operation_finished.emsg); - GNUNET_assert (NULL != dht_handle); - GNUNET_assert (event->details.operation_finished.generic == dht_handle); + FAIL_TEST (event->op == operation, return ); + FAIL_TEST (NULL == event->op_cls, return ); + FAIL_TEST (NULL == event->details.operation_finished.emsg, return ); + FAIL_TEST (NULL != arm_handle, return ); + FAIL_TEST (event->details.operation_finished.generic == arm_handle, + return ); break; + default: - GNUNET_assert (0); + FAIL_TEST (0, return ); break; } break; + case GNUNET_TESTBED_ET_PEER_START: - GNUNET_assert (event->details.peer_start.host == host); - GNUNET_assert (event->details.peer_start.peer == peer); - GNUNET_assert (OTHER == sub_test); + FAIL_TEST (event->details.peer_start.host == host, return ); + FAIL_TEST (event->details.peer_start.peer == peer, return ); + FAIL_TEST (OTHER == sub_test, return ); GNUNET_TESTBED_operation_done (operation); operation = - GNUNET_TESTBED_service_connect (NULL, peer, "dht", - &service_connect_comp_cb, NULL, - &dht_connect_adapter, - &dht_disconnect_adapter, NULL); - GNUNET_assert (NULL != operation); + GNUNET_TESTBED_service_connect (NULL, peer, "dht", + &service_connect_comp_cb, NULL, + &arm_connect_adapter, + &arm_disconnect_adapter, NULL); + FAIL_TEST (NULL != operation, return ); break; + case GNUNET_TESTBED_ET_PEER_STOP: - GNUNET_assert (event->details.peer_stop.peer == peer); - GNUNET_assert (PEER_SERVICE_CONNECT == sub_test); + FAIL_TEST (event->details.peer_stop.peer == peer, return ); + FAIL_TEST (PEER_SERVICE_CONNECT == sub_test, return ); result = GNUNET_YES; sub_test = PEER_GETCONFIG; GNUNET_TESTBED_operation_done (operation); - operation = - GNUNET_TESTBED_peer_get_information (peer, - GNUNET_TESTBED_PIT_CONFIGURATION, - &peerinfo_cb, NULL); + operation = + GNUNET_TESTBED_peer_get_information (peer, + GNUNET_TESTBED_PIT_CONFIGURATION, + &peerinfo_cb, NULL); break; + default: - GNUNET_assert (0); /* We should never reach this state */ + FAIL_TEST (0, return ); /* We should never reach this state */ } } @@ -346,17 +378,22 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) * @param emsg NULL if peer is not NULL; else MAY contain the error description */ static void -peer_create_cb (void *cls, struct GNUNET_TESTBED_Peer *peer, const char *emsg) +peer_create_cb (void *cls, + struct GNUNET_TESTBED_Peer *peer, + const char *emsg) { struct GNUNET_TESTBED_Peer **peer_ptr; peer_ptr = cls; - GNUNET_assert (NULL != peer); - GNUNET_assert (NULL != peer_ptr); + FAIL_TEST (NULL != peer, return ); + FAIL_TEST (NULL != peer_ptr, return ); *peer_ptr = peer; GNUNET_TESTBED_operation_done (operation); - operation = GNUNET_TESTBED_peer_start (peer, NULL, NULL); - GNUNET_assert (NULL != operation); + operation = GNUNET_TESTBED_peer_start (NULL, + peer, + NULL, + NULL); + FAIL_TEST (NULL != operation, return ); } @@ -367,14 +404,18 @@ peer_create_cb (void *cls, struct GNUNET_TESTBED_Peer *peer, const char *emsg) * @param emsg the error message; NULL if host registration is successful */ static void -registration_comp (void *cls, const char *emsg) +registration_comp (void *cls, + const char *emsg) { - GNUNET_assert (cls == neighbour); + FAIL_TEST (cls == neighbour, return ); reg_handle = NULL; operation = - GNUNET_TESTBED_peer_create (controller, host, cfg, &peer_create_cb, - &peer); - GNUNET_assert (NULL != operation); + GNUNET_TESTBED_peer_create (controller, + host, + cfg, + &peer_create_cb, + &peer); + FAIL_TEST (NULL != operation, return ); } @@ -383,56 +424,66 @@ registration_comp (void *cls, const char *emsg) * * @param cls the closure from GNUNET_TESTBED_controller_start() * @param cfg the configuration with which the controller has been started; - * NULL if status is not GNUNET_OK - * @param status GNUNET_OK if the startup is successfull; GNUNET_SYSERR if not, + * NULL if status is not #GNUNET_OK + * @param status #GNUNET_OK if the startup is successfull; #GNUNET_SYSERR if not, * GNUNET_TESTBED_controller_stop() shouldn't be called in this case */ static void -status_cb (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg, int status) +status_cb (void *cls, + const struct GNUNET_CONFIGURATION_Handle *cfg_, + int status) { uint64_t event_mask; - GNUNET_assert (GNUNET_OK == status); + if (GNUNET_OK != status) + { + cp = NULL; + FAIL_TEST (0, return ); + return; + } event_mask = 0; event_mask |= (1L << GNUNET_TESTBED_ET_PEER_START); event_mask |= (1L << GNUNET_TESTBED_ET_PEER_STOP); event_mask |= (1L << GNUNET_TESTBED_ET_CONNECT); event_mask |= (1L << GNUNET_TESTBED_ET_OPERATION_FINISHED); controller = - GNUNET_TESTBED_controller_connect (cfg, host, event_mask, &controller_cb, - NULL); - GNUNET_assert (NULL != controller); - neighbour = GNUNET_TESTBED_host_create ("localhost", NULL, 0); - GNUNET_assert (NULL != neighbour); + GNUNET_TESTBED_controller_connect (host, event_mask, &controller_cb, + NULL); + FAIL_TEST (NULL != controller, return ); + neighbour = GNUNET_TESTBED_host_create ("localhost", NULL, cfg, 0); + FAIL_TEST (NULL != neighbour, return ); reg_handle = - GNUNET_TESTBED_register_host (controller, neighbour, ®istration_comp, - neighbour); - GNUNET_assert (NULL != reg_handle); + GNUNET_TESTBED_register_host (controller, neighbour, ®istration_comp, + neighbour); + FAIL_TEST (NULL != reg_handle, return ); } - /** * Main run function. * * @param cls NULL - * @param args arguments passed to GNUNET_PROGRAM_run + * @param args arguments passed to #GNUNET_PROGRAM_run() * @param cfgfile the path to configuration file * @param cfg the configuration file handle */ static void -run (void *cls, char *const *args, const char *cfgfile, +run (void *cls, + char *const *args, + const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *config) { - host = GNUNET_TESTBED_host_create (NULL, NULL, 0); - GNUNET_assert (NULL != host); cfg = GNUNET_CONFIGURATION_dup (config); - cp = GNUNET_TESTBED_controller_start ("127.0.0.1", host, cfg, status_cb, + host = GNUNET_TESTBED_host_create (NULL, NULL, cfg, 0); + FAIL_TEST (NULL != host, return ); + cp = GNUNET_TESTBED_controller_start ("127.0.0.1", host, + &status_cb, NULL); abort_task = - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_MINUTES, 5), &do_abort, - NULL); + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply + (GNUNET_TIME_UNIT_MINUTES, 5), + &do_abort, + NULL); } @@ -445,20 +496,20 @@ main (int argc, char **argv) int ret; char *const argv2[] = { "test_testbed_api", - "-c", "test_testbed_api.conf", - NULL - }; + "-c", "test_testbed_api.conf", + NULL }; struct GNUNET_GETOPT_CommandLineOption options[] = { GNUNET_GETOPT_OPTION_END }; result = GNUNET_SYSERR; ret = - GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2, - "test_testbed_api", "nohelp", options, &run, NULL); + GNUNET_PROGRAM_run ((sizeof(argv2) / sizeof(char *)) - 1, argv2, + "test_testbed_api", "nohelp", options, &run, NULL); if ((GNUNET_OK != ret) || (GNUNET_OK != result)) return 1; return 0; } + /* end of test_testbed_api.c */