some testing changes, including an api change that likely breaks things for others
[oweals/gnunet.git] / src / testing / testing_testbed.c
1 /*
2       This file is part of GNUnet
3       (C) 2008, 2009 Christian Grothoff (and other contributing authors)
4
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.
9
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.
14
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.
19  */
20
21 /**
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
30  */
31 #include "platform.h"
32 #include "gnunet_arm_service.h"
33 #include "gnunet_testing_lib.h"
34
35
36 /**
37  * Handle to an entire testbed of GNUnet peers.
38  */
39 struct GNUNET_TESTING_Testbed
40 {
41 };
42
43
44 /**
45  * Start "count" GNUnet daemons with a particular topology.
46  *
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
57  *        list.
58  * @return handle to control the testbed
59  */
60 struct GNUNET_TESTING_Testbed *
61 GNUNET_TESTING_testbed_start (struct GNUNET_SCHEDULER_Handle *sched,
62                               const struct GNUNET_CONFIGURATION_Handle *cfg,
63                               unsigned int count,
64                               enum GNUNET_TESTING_Topology topology,
65                               GNUNET_TESTING_NotifyDaemonRunning cb,
66                               void *cb_cls, const char *hostname, ...)
67 {
68   GNUNET_break (0);
69   return NULL;
70 }
71
72
73 /**
74  * Stop all of the daemons started with the start function.
75  *
76  * @param tb handle for the testbed
77  * @param cb function to call when done
78  * @param cb_cls closure for cb
79  */
80 void
81 GNUNET_TESTING_testbed_stop (struct GNUNET_TESTING_Testbed *tb,
82                              GNUNET_TESTING_NotifyCompletion cb, void *cb_cls)
83 {
84   GNUNET_break (0);
85 }
86
87
88 /**
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.
99  *
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
107  */
108 void
109 GNUNET_TESTING_testbed_churn (struct GNUNET_TESTING_Testbed *tb,
110                               unsigned int voff,
111                               unsigned int von,
112                               GNUNET_TESTING_NotifyCompletion cb,
113                               void *cb_cls)
114 {
115   GNUNET_break (0);
116 }
117
118
119 /* end of testing_testbed.c */