aboutsummaryrefslogtreecommitdiff
path: root/src/testbed-logger/test_testbed_logger_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/testbed-logger/test_testbed_logger_api.c')
-rw-r--r--src/testbed-logger/test_testbed_logger_api.c275
1 files changed, 0 insertions, 275 deletions
diff --git a/src/testbed-logger/test_testbed_logger_api.c b/src/testbed-logger/test_testbed_logger_api.c
deleted file mode 100644
index 085f83d0e..000000000
--- a/src/testbed-logger/test_testbed_logger_api.c
+++ /dev/null
@@ -1,275 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2008--2013 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 * @file testbed-logger/test_testbed_logger_api.c
22 * @brief testcases for the testbed logger api
23 * @author Sree Harsha Totakura
24 */
25#include "platform.h"
26#include "gnunet_util_lib.h"
27#include "gnunet_testing_lib.h"
28#include "gnunet_testbed_logger_service.h"
29
30/**
31 * Generic logging shortcut
32 */
33#define LOG(kind, ...) \
34 GNUNET_log (kind, __VA_ARGS__)
35
36/**
37 * Relative time seconds shorthand
38 */
39#define TIME_REL_SECS(sec) \
40 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, sec)
41
42/**
43 * Opaque handle for the logging service
44 */
45static struct GNUNET_TESTBED_LOGGER_Handle *h;
46
47static struct GNUNET_TESTING_Peer *peer;
48
49static char *search_dir;
50
51/**
52 * Abort task identifier
53 */
54static struct GNUNET_SCHEDULER_Task *abort_task;
55static struct GNUNET_SCHEDULER_Task *write_task;
56
57static int result;
58
59#define CANCEL_TASK(task) do { \
60 if (NULL != task) \
61 { \
62 GNUNET_SCHEDULER_cancel (task); \
63 task = NULL; \
64 } \
65} while (0)
66
67/**
68 * shortcut to exit during failure
69 */
70#define FAIL_TEST(cond, ret) do { \
71 if (! (cond)) { \
72 GNUNET_break (0); \
73 CANCEL_TASK (abort_task); \
74 abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL); \
75 ret; \
76 } \
77} while (0)
78
79
80/**
81 * Shutdown nicely
82 *
83 * @param cls NULL
84 * @param tc the task context
85 */
86static void
87shutdown_now ()
88{
89 CANCEL_TASK (abort_task);
90 CANCEL_TASK (write_task);
91 GNUNET_free (search_dir);
92 if (NULL != h)
93 GNUNET_TESTBED_LOGGER_disconnect (h);
94 GNUNET_SCHEDULER_shutdown ();
95}
96
97
98static void
99do_abort (void *cls)
100{
101 LOG (GNUNET_ERROR_TYPE_WARNING,
102 "Aborting\n");
103 abort_task = NULL;
104 shutdown_now ();
105}
106
107
108#define BSIZE 1024
109
110
111/**
112 * Function called to iterate over a directory.
113 *
114 * @param cls closure
115 * @param filename complete filename (absolute path)
116 * @return #GNUNET_OK to continue to iterate,
117 * #GNUNET_NO to stop iteration with no error,
118 * #GNUNET_SYSERR to abort iteration with error!
119 */
120static int
121iterator_cb (void *cls,
122 const char *filename)
123{
124 const char *fn;
125 size_t len;
126 uint64_t fs;
127
128 LOG (GNUNET_ERROR_TYPE_DEBUG,
129 "Iterator sees file %s\n",
130 filename);
131 len = strlen (filename);
132 fn = filename + len;
133 if (0 != strcasecmp (".dat", fn - 4))
134 return GNUNET_OK;
135 if (GNUNET_OK !=
136 GNUNET_DISK_file_size (filename,
137 &fs,
138 GNUNET_NO,
139 GNUNET_YES))
140 {
141 LOG (GNUNET_ERROR_TYPE_DEBUG,
142 "Failed to obtain file size for file %s\n",
143 filename);
144 return GNUNET_SYSERR;
145 }
146 if ((BSIZE * 2) != fs)
147 {
148 LOG (GNUNET_ERROR_TYPE_DEBUG,
149 "Unexpected file size for file %s\n",
150 filename);
151 /* The file size should be equal to what we
152 have written */
153 return GNUNET_SYSERR;
154 }
155 result = GNUNET_OK;
156 return GNUNET_OK;
157}
158
159
160/**
161 * Functions of this type are called to notify a successful
162 * transmission of the message to the logger service
163 *
164 * @param cls the closure given to GNUNET_TESTBED_LOGGER_send()
165 * @param size the amount of data sent
166 */
167static void
168flush_comp (void *cls,
169 size_t size)
170{
171 LOG (GNUNET_ERROR_TYPE_DEBUG,
172 "Flush running\n");
173 FAIL_TEST (&write_task == cls,
174 return );
175 FAIL_TEST ((BSIZE * 2) == size,
176 return );
177 FAIL_TEST (GNUNET_OK ==
178 GNUNET_TESTING_peer_stop (peer),
179 return );
180 LOG (GNUNET_ERROR_TYPE_DEBUG,
181 "Peer stopped, scanning %s\n",
182 search_dir);
183 FAIL_TEST (GNUNET_SYSERR !=
184 GNUNET_DISK_directory_scan (search_dir,
185 &iterator_cb,
186 NULL),
187 return );
188 shutdown_now ();
189}
190
191
192static void
193do_write (void *cls)
194{
195 static int i;
196 char buf[BSIZE];
197
198 write_task = NULL;
199 LOG (GNUNET_ERROR_TYPE_DEBUG,
200 "Write task running\n");
201 if (0 == i)
202 write_task = GNUNET_SCHEDULER_add_delayed (TIME_REL_SECS (1),
203 &do_write,
204 NULL);
205 (void) memset (buf, i, BSIZE);
206 GNUNET_TESTBED_LOGGER_write (h,
207 buf,
208 BSIZE);
209 if (0 == i++)
210 return;
211 GNUNET_TESTBED_LOGGER_flush (h,
212 &flush_comp,
213 &write_task);
214}
215
216
217/**
218 * Signature of the 'main' function for a (single-peer) testcase that
219 * is run using #GNUNET_TESTING_peer_run().
220 *
221 * @param cls closure
222 * @param cfg configuration of the peer that was started
223 * @param peer identity of the peer that was created
224 */
225static void
226test_main (void *cls,
227 const struct GNUNET_CONFIGURATION_Handle *cfg,
228 struct GNUNET_TESTING_Peer *p)
229{
230 LOG (GNUNET_ERROR_TYPE_DEBUG,
231 "Connecting to logger\n");
232 FAIL_TEST (NULL != (h = GNUNET_TESTBED_LOGGER_connect (cfg)),
233 return );
234 FAIL_TEST (GNUNET_OK ==
235 GNUNET_CONFIGURATION_get_value_filename (cfg,
236 "testbed-logger",
237 "dir",
238 &search_dir),
239 return );
240 peer = p;
241 write_task = GNUNET_SCHEDULER_add_now (&do_write,
242 NULL);
243 abort_task = GNUNET_SCHEDULER_add_delayed (TIME_REL_SECS (10),
244 &do_abort,
245 NULL);
246}
247
248
249/**
250 * Main function
251 */
252int
253main (int argc, char **argv)
254{
255 int ret;
256
257 result = GNUNET_SYSERR;
258 GNUNET_log_setup ("test-testbed-logger-api",
259 "WARNING",
260 NULL);
261 GNUNET_break (GNUNET_OK ==
262 GNUNET_DISK_directory_remove ("/tmp/test-testbed"));
263 ret = GNUNET_TESTING_service_run ("test-testbed-logger",
264 "testbed-logger",
265 "test_testbed_logger_api.conf",
266 &test_main,
267 NULL);
268 GNUNET_break (GNUNET_OK ==
269 GNUNET_DISK_directory_remove ("/tmp/test-testbed"));
270 if (0 != ret)
271 return 1;
272 if (GNUNET_OK != result)
273 return 2;
274 return 0;
275}