add changelog
[oweals/gnunet.git] / src / testing / test_testing_sharedservices.c
1 /*
2       This file is part of GNUnet
3       Copyright (C) 2008, 2009, 2012 GNUnet e.V.
4
5       GNUnet is free software: you can redistribute it and/or modify it
6       under the terms of the GNU Affero 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.
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       Affero General Public License for more details.
14
15       You should have received a copy of the GNU Affero General Public License
16       along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18      SPDX-License-Identifier: AGPL3.0-or-later
19  */
20
21 /**
22  * @file testing/test_testing_sharedservices.c
23  * @brief test case for testing service sharing among peers started by testing
24  * @author Sree Harsha Totakura <sreeharsha@totakura.in>
25  */
26
27 #include "platform.h"
28 #include "gnunet_util_lib.h"
29 #include "gnunet_testing_lib.h"
30
31 #define LOG(kind, ...)                           \
32   GNUNET_log (kind, __VA_ARGS__)
33
34 #define NUM_PEERS 4
35
36 /**
37  * The status of the test
38  */
39 int status;
40
41 /**
42  * The testing context
43  */
44 struct TestingContext
45 {
46   /**
47    * The testing system
48    */
49   struct GNUNET_TESTING_System *system;
50
51   /**
52    * The peer which has been started by the testing system
53    */
54   struct GNUNET_TESTING_Peer *peers[NUM_PEERS];
55
56   /**
57    * The running configuration of the peer
58    */
59   struct GNUNET_CONFIGURATION_Handle *cfg;
60 };
61
62
63 /**
64  * Task for shutdown
65  *
66  * @param cls the testing context
67  */
68 static void
69 do_shutdown (void *cls)
70 {
71   struct TestingContext *test_ctx = cls;
72   struct GNUNET_TESTING_Peer *peer;
73   unsigned int cnt;
74
75   GNUNET_assert (NULL != test_ctx);
76   for (cnt = 0; cnt < NUM_PEERS; cnt++)
77   {
78     peer = test_ctx->peers[cnt];
79     if (NULL == peer)
80       continue;
81     (void) GNUNET_TESTING_peer_stop (peer);
82     GNUNET_TESTING_peer_destroy (peer);
83   }
84   if (NULL != test_ctx->cfg)
85     GNUNET_CONFIGURATION_destroy (test_ctx->cfg);
86   if (NULL != test_ctx->system)
87     GNUNET_TESTING_system_destroy (test_ctx->system, GNUNET_YES);
88   GNUNET_free (test_ctx);
89 }
90
91
92 /**
93  * Main point of test execution
94  */
95 static void
96 run (void *cls, char *const *args, const char *cfgfile,
97      const struct GNUNET_CONFIGURATION_Handle *cfg)
98 {
99   struct TestingContext *test_ctx;
100   char *emsg;
101   struct GNUNET_PeerIdentity id;
102   struct GNUNET_TESTING_SharedService ss[] = {
103     { "peerinfo", cfg, 2 },
104     { NULL, NULL, 0 }
105   };
106   struct GNUNET_TESTING_Peer *peer;
107   unsigned int cnt;
108
109   test_ctx = GNUNET_new (struct TestingContext);
110   test_ctx->system =
111     GNUNET_TESTING_system_create ("test-gnunet-testing",
112                                   "127.0.0.1", NULL, ss);
113   emsg = NULL;
114   if (NULL == test_ctx->system)
115     goto end;
116   test_ctx->cfg = GNUNET_CONFIGURATION_dup (cfg);
117   for (cnt = 0; cnt < NUM_PEERS; cnt++)
118   {
119     peer = GNUNET_TESTING_peer_configure (test_ctx->system,
120                                           test_ctx->cfg,
121                                           0, &id, &emsg);
122     if (NULL == peer)
123     {
124       if (NULL != emsg)
125         printf ("Test failed upon error: %s", emsg);
126       goto end;
127     }
128     if (GNUNET_OK != GNUNET_TESTING_peer_start (peer))
129     {
130       GNUNET_TESTING_peer_destroy (peer);
131       goto end;
132     }
133     test_ctx->peers[cnt] = peer;
134   }
135   status = GNUNET_OK;
136   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
137                                 &do_shutdown, test_ctx);
138   return;
139
140 end:
141   GNUNET_SCHEDULER_add_now (&do_shutdown, test_ctx);
142   GNUNET_free_non_null (emsg);
143 }
144
145
146 int
147 main (int argc, char *argv[])
148 {
149   struct GNUNET_GETOPT_CommandLineOption options[] = {
150     GNUNET_GETOPT_OPTION_END
151   };
152   char *const argv2[] = { "test_testing_sharedservices",
153                           "-c", "test_testing_sharedservices.conf",
154                           NULL };
155
156   status = GNUNET_SYSERR;
157   if (GNUNET_OK !=
158       GNUNET_PROGRAM_run ((sizeof(argv2) / sizeof(char *)) - 1, argv2,
159                           "test_testing_sharedservices",
160                           "test case for testing service sharing among peers started by testing",
161                           options, &run, NULL))
162     return 1;
163   return (GNUNET_OK == status) ? 0 : 3;
164 }
165
166
167 /* end of test_testing_sharedservices.c */