2 This file is part of GNUnet
3 Copyright (C) 2008--2013 GNUnet e.V.
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
17 * @file testbed/test_testbed_api_peers_manage_services.c
18 * @brief testcase for testing GNUNET_TESTBED_peer_manage_service()
20 * @author Sree Harsha Totakura <sreeharsha@totakura.in>
24 #include "gnunet_util_lib.h"
25 #include "gnunet_testbed_service.h"
28 * Number of peers we want to start
33 * The array of peers; we get them from the testbed
35 static struct GNUNET_TESTBED_Peer **peers;
40 static struct GNUNET_TESTBED_Operation *op;
45 static void *dummy_cls = (void *) 0xDEAD0001;
48 * Abort task identifier
50 static struct GNUNET_SCHEDULER_Task * abort_task;
58 * Test has just been initialized
63 * Peers have been started
68 * statistics service went down
73 * statistics service went up
78 * Testing completed successfully
86 #define FAIL_TEST(cond, ret) do { \
89 if (NULL != abort_task) \
90 GNUNET_SCHEDULER_cancel (abort_task); \
91 abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL); \
105 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Aborting\n");
109 GNUNET_TESTBED_operation_done (op);
112 GNUNET_SCHEDULER_shutdown();
117 * Callback to be called when an operation is completed
119 * @param cls the callback closure from functions generating an operation
120 * @param op the operation that has been finished
121 * @param emsg error message in case the operation has failed; will be NULL if
122 * operation has executed successfully.
125 op_comp_cb (void *cls,
126 struct GNUNET_TESTBED_Operation *op,
129 FAIL_TEST (cls == dummy_cls, return);
130 FAIL_TEST (NULL == emsg, return);
131 GNUNET_TESTBED_operation_done (op);
135 case STATE_PEERS_STARTED:
136 state = STATE_SERVICE_DOWN;
137 op = GNUNET_TESTBED_peer_manage_service (dummy_cls,
143 GNUNET_assert (NULL != op);
145 case STATE_SERVICE_DOWN:
146 state = STATE_SERVICE_UP;
147 GNUNET_SCHEDULER_cancel (abort_task);
150 GNUNET_SCHEDULER_shutdown ();
153 FAIL_TEST (0, return);
159 * Signature of a main function for a testcase.
162 * @param h the run handle
163 * @param num_peers number of peers in 'peers'
164 * @param peers_ handle to peers run in the testbed
165 * @param links_succeeded the number of overlay link connection attempts that
167 * @param links_failed the number of overlay link connection attempts that
171 test_master (void *cls,
172 struct GNUNET_TESTBED_RunHandle *h,
173 unsigned int num_peers,
174 struct GNUNET_TESTBED_Peer **peers_,
175 unsigned int links_succeeded,
176 unsigned int links_failed)
178 FAIL_TEST (NUM_PEERS == num_peers, return);
179 state = STATE_PEERS_STARTED;
181 op = GNUNET_TESTBED_peer_manage_service (dummy_cls,
187 FAIL_TEST (NULL != op, return);
188 abort_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
189 (GNUNET_TIME_UNIT_MINUTES, 1),
198 main (int argc, char **argv)
201 (void) GNUNET_TESTBED_test_run ("test_testbed_api_peers_manage_services",
202 "test_testbed_api.conf",
206 if (STATE_OK != state)