2 This file is part of GNUnet
3 (C) 2008, 2009 Christian Grothoff (and other contributing authors)
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 2, or (at your
8 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 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
22 * @file testing/testing_testbed.c
23 * @brief convenience API for writing testcases for GNUnet
24 * Many testcases need to start and stop gnunetd,
25 * and this library is supposed to make that easier
26 * for TESTCASES. Normal programs should always
27 * use functions from gnunet_{util,arm}_lib.h. This API is
28 * ONLY for writing testcases!
29 * @author Christian Grothoff
32 #include "gnunet_arm_service.h"
33 #include "gnunet_testing_lib.h"
37 * Handle to an entire testbed of GNUnet peers.
39 struct GNUNET_TESTING_Testbed
45 * Start "count" GNUnet daemons with a particular topology.
47 * @param sched scheduler to use
48 * @param cfg configuration template to use
49 * @param count number of peers the testbed should have
50 * @param topology desired topology (enforced via F2F)
51 * @param cb function to call on each daemon that was started
52 * @param cb_cls closure for cb
53 * @param hostname where to run the peers; can be NULL (to run
54 * everything on localhost). Additional
55 * hosts can be specified using a NULL-terminated list of
56 * varargs, hosts will then be used round-robin from that
58 * @return handle to control the testbed
60 struct GNUNET_TESTING_Testbed *
61 GNUNET_TESTING_testbed_start (struct GNUNET_SCHEDULER_Handle *sched,
62 const struct GNUNET_CONFIGURATION_Handle *cfg,
64 enum GNUNET_TESTING_Topology topology,
65 GNUNET_TESTING_NotifyDaemonRunning cb,
66 void *cb_cls, const char *hostname, ...)
74 * Stop all of the daemons started with the start function.
76 * @param tb handle for the testbed
77 * @param cb function to call when done
78 * @param cb_cls closure for cb
81 GNUNET_TESTING_testbed_stop (struct GNUNET_TESTING_Testbed *tb,
82 GNUNET_TESTING_NotifyCompletion cb, void *cb_cls)
89 * Simulate churn in the testbed by stopping some peers (and possibly
90 * re-starting others if churn is called multiple times). This
91 * function can only be used to create leave-join churn (peers "never"
92 * leave for good). First "voff" random peers that are currently
93 * online will be taken offline; then "von" random peers that are then
94 * offline will be put back online. No notifications will be
95 * generated for any of these operations except for the callback upon
96 * completion. Note that the implementation is at liberty to keep
97 * the ARM service itself (but none of the other services or daemons)
98 * running even though the "peer" is being varied offline.
100 * @param tb handle for the testbed
101 * @param voff number of peers that should go offline
102 * @param von number of peers that should come back online;
103 * must be zero on first call (since "testbed_start"
104 * always starts all of the peers)
105 * @param cb function to call at the end
106 * @param cb_cls closure for cb
109 GNUNET_TESTING_testbed_churn (struct GNUNET_TESTING_Testbed *tb,
112 GNUNET_TESTING_NotifyCompletion cb,
119 /* end of testing_testbed.c */