2 This file is part of GNUnet.
3 (C) 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 3, 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 util/test_bio.c
23 * @brief testcase for the buffered IO module
29 #include "gnunet_util_lib.h"
30 #define TESTSTRING "testString"
31 #define TESTNUMBER64 ((int64_t)100000L)
38 char *readResultString;
39 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
40 struct GNUNET_BIO_WriteHandle *fileW;
41 struct GNUNET_BIO_ReadHandle *fileR;
42 struct GNUNET_CONTAINER_MetaData *metaDataW;
43 struct GNUNET_CONTAINER_MetaData *metaDataR;
45 metaDataW = GNUNET_CONTAINER_meta_data_create ();
47 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
49 fileW = GNUNET_BIO_write_open (fileName);
50 GNUNET_assert (NULL != fileW);
51 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
52 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
53 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int64 (fileW, TESTNUMBER64));
54 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
56 fileR = GNUNET_BIO_read_open (fileName);
57 GNUNET_assert (NULL != fileR);
58 readResultString = NULL;
59 GNUNET_assert (GNUNET_OK ==
60 GNUNET_BIO_read_string (fileR, "Read string error",
61 &readResultString, 200));
62 GNUNET_assert (NULL != readResultString);
63 GNUNET_assert (0 == strcmp (TESTSTRING, readResultString));
64 GNUNET_free (readResultString);
65 GNUNET_assert (GNUNET_OK ==
66 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
68 GNUNET_assert (GNUNET_YES ==
69 GNUNET_CONTAINER_meta_data_test_equal (metaDataR,
71 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int64 (fileR, &testNum));
72 GNUNET_BIO_read_close (fileR, &msg);
73 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
74 GNUNET_CONTAINER_meta_data_destroy (metaDataR);
75 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
76 GNUNET_free (fileName);
84 char *readResultString = (char *) "not null";
85 struct GNUNET_BIO_WriteHandle *fileW;
86 struct GNUNET_BIO_ReadHandle *fileR;
87 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
89 fileW = GNUNET_BIO_write_open (fileName);
90 GNUNET_assert (NULL != fileW);
91 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, NULL));
92 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
94 fileR = GNUNET_BIO_read_open (fileName);
95 GNUNET_assert (NULL != fileR);
96 GNUNET_assert (GNUNET_OK ==
97 GNUNET_BIO_read_string (fileR, "Read string error",
98 &readResultString, 200));
99 GNUNET_assert (NULL == readResultString);
100 GNUNET_BIO_read_close (fileR, &msg);
101 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
102 GNUNET_free (fileName);
108 test_emptystring_rw ()
111 char *readResultString;
112 struct GNUNET_BIO_WriteHandle *fileW;
113 struct GNUNET_BIO_ReadHandle *fileR;
114 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
116 fileW = GNUNET_BIO_write_open (fileName);
117 GNUNET_assert (NULL != fileW);
118 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, ""));
119 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
121 fileR = GNUNET_BIO_read_open (fileName);
122 GNUNET_assert (NULL != fileR);
123 readResultString = NULL;
124 GNUNET_assert (GNUNET_OK ==
125 GNUNET_BIO_read_string (fileR, "Read string error",
126 &readResultString, 200));
127 GNUNET_free (readResultString);
128 GNUNET_BIO_read_close (fileR, &msg);
129 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
130 GNUNET_free (fileName);
138 char *readResultString;
139 struct GNUNET_BIO_WriteHandle *fileW;
140 struct GNUNET_BIO_ReadHandle *fileR;
141 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
143 fileW = GNUNET_BIO_write_open (fileName);
144 GNUNET_assert (NULL != fileW);
145 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
146 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
148 fileR = GNUNET_BIO_read_open (fileName);
149 GNUNET_assert (NULL != fileR);
150 readResultString = NULL;
151 GNUNET_assert (GNUNET_SYSERR ==
152 GNUNET_BIO_read_string (fileR, "Read string error",
153 &readResultString, 1));
154 GNUNET_assert (NULL == readResultString);
156 GNUNET_BIO_read_close (fileR, &msg);
158 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
159 GNUNET_free (fileName);
167 static char meta[1024 * 1024 * 10];
168 struct GNUNET_BIO_WriteHandle *fileW;
169 struct GNUNET_BIO_ReadHandle *fileR;
170 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
171 struct GNUNET_CONTAINER_MetaData *metaDataR;
173 memset (meta, 'b', sizeof (meta));
174 meta[sizeof (meta) - 1] = '\0';
175 fileW = GNUNET_BIO_write_open (fileName);
176 GNUNET_assert (NULL != fileW);
177 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, sizeof (meta)));
178 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write (fileW, meta, sizeof (meta)));
179 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
181 fileR = GNUNET_BIO_read_open (fileName);
182 GNUNET_assert (NULL != fileR);
184 GNUNET_assert (GNUNET_SYSERR ==
185 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
188 GNUNET_BIO_read_close (fileR, &msg);
190 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
191 GNUNET_assert (NULL == metaDataR);
192 GNUNET_free (fileName);
201 char readResult[200];
202 struct GNUNET_BIO_ReadHandle *fileR;
204 fileR = GNUNET_BIO_read_open ("/dev");
205 GNUNET_assert (NULL != fileR);
206 GNUNET_assert (GNUNET_SYSERR ==
207 GNUNET_BIO_read (fileR, "Read error", readResult,
208 sizeof (readResult)));
210 GNUNET_BIO_read_close (fileR, &msg);
219 static char fileNameNO[102401];
220 struct GNUNET_BIO_WriteHandle *fileWNO;
221 struct GNUNET_BIO_ReadHandle *fileRNO;
223 memset (fileNameNO, 'a', sizeof (fileNameNO));
224 fileNameNO[sizeof (fileNameNO) - 1] = '\0';
226 GNUNET_log_skip (1, GNUNET_NO);
227 fileWNO = GNUNET_BIO_write_open (fileNameNO);
228 GNUNET_log_skip (0, GNUNET_YES);
229 GNUNET_assert (NULL == fileWNO);
231 GNUNET_log_skip (1, GNUNET_NO);
232 fileRNO = GNUNET_BIO_read_open (fileNameNO);
233 GNUNET_log_skip (0, GNUNET_YES);
234 GNUNET_assert (NULL == fileRNO);
243 /* /dev/full only seems to exist on Linux */
246 char *readResultString;
247 char readResult[200];
248 struct GNUNET_BIO_WriteHandle *fileW;
249 struct GNUNET_BIO_ReadHandle *fileR;
250 struct GNUNET_CONTAINER_MetaData *metaDataW;
251 struct GNUNET_CONTAINER_MetaData *metaDataR;
253 metaDataW = GNUNET_CONTAINER_meta_data_create ();
254 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
256 fileW = GNUNET_BIO_write_open ("/dev/full");
257 GNUNET_assert (NULL != fileW);
258 (void) GNUNET_BIO_write (fileW, TESTSTRING, strlen (TESTSTRING));
259 (void) GNUNET_BIO_write_string (fileW, TESTSTRING);
260 (void) GNUNET_BIO_write_meta_data (fileW, metaDataW);
261 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
262 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
264 fileW = GNUNET_BIO_write_open ("/dev/full");
265 GNUNET_assert (NULL != fileW);
266 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
268 fileR = GNUNET_BIO_read_open ("/dev/null");
269 GNUNET_assert (NULL != fileR);
270 GNUNET_assert (GNUNET_SYSERR ==
271 GNUNET_BIO_read (fileR, "Read error", readResult,
272 sizeof (readResult)));
273 readResultString = NULL;
274 GNUNET_assert (GNUNET_SYSERR ==
275 GNUNET_BIO_read_string (fileR, "Read string error",
276 &readResultString, 200));
277 GNUNET_assert (NULL == readResultString);
278 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_int64 (fileR, &testNum));
280 GNUNET_assert (GNUNET_SYSERR ==
281 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
284 GNUNET_BIO_read_close (fileR, &msg);
286 GNUNET_assert (NULL == metaDataR);
292 test_fakestring_rw ()
297 struct GNUNET_BIO_WriteHandle *fileW;
298 struct GNUNET_BIO_ReadHandle *fileR;
299 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
301 fileW = GNUNET_BIO_write_open (fileName);
302 GNUNET_assert (NULL != fileW);
303 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
304 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
306 fileR = GNUNET_BIO_read_open (fileName);
307 GNUNET_assert (NULL != fileR);
308 GNUNET_assert (GNUNET_SYSERR ==
309 GNUNET_BIO_read_string (fileR, "Read string error",
312 GNUNET_BIO_read_close (fileR, &msg);
314 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
315 GNUNET_free (fileName);
324 struct GNUNET_BIO_WriteHandle *fileW;
325 struct GNUNET_BIO_ReadHandle *fileR;
326 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
327 struct GNUNET_CONTAINER_MetaData *metaDataR;
329 fileW = GNUNET_BIO_write_open (fileName);
330 GNUNET_assert (NULL != fileW);
331 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
332 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
334 fileR = GNUNET_BIO_read_open (fileName);
335 GNUNET_assert (NULL != fileR);
337 GNUNET_assert (GNUNET_SYSERR ==
338 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
340 GNUNET_assert (NULL == metaDataR);
342 GNUNET_BIO_read_close (fileR, &msg);
344 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
345 GNUNET_free (fileName);
350 test_fakebigmeta_rw ()
353 int32_t tmpInt = 1024 * 1024 * 10;
354 struct GNUNET_BIO_WriteHandle *fileW;
355 struct GNUNET_BIO_ReadHandle *fileR;
356 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
357 struct GNUNET_CONTAINER_MetaData *metaDataR;
359 fileW = GNUNET_BIO_write_open (fileName);
360 GNUNET_assert (NULL != fileW);
361 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
362 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
364 fileR = GNUNET_BIO_read_open (fileName);
365 GNUNET_assert (NULL != fileR);
367 GNUNET_assert (GNUNET_SYSERR ==
368 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
371 GNUNET_BIO_read_close (fileR, &msg);
373 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
374 GNUNET_assert (NULL == metaDataR);
375 GNUNET_free (fileName);
382 GNUNET_assert (0 == test_nullstring_rw ());
383 GNUNET_assert (0 == test_emptystring_rw ());
384 GNUNET_assert (0 == test_bigstring_rw ());
385 GNUNET_assert (0 == test_fakestring_rw ());
392 GNUNET_assert (0 == test_fakebigmeta_rw ());
393 GNUNET_assert (0 == test_fakemeta_rw ());
394 GNUNET_assert (0 == test_bigmeta_rw ());
401 GNUNET_assert (0 == test_normal_rw ());
402 GNUNET_assert (0 == test_nullfile_rw ());
403 GNUNET_assert (0 == test_fullfile_rw ());
404 GNUNET_assert (0 == test_directory_r ());
409 main (int argc, char *argv[])
411 GNUNET_log_setup ("test-bio", "WARNING", NULL);
412 GNUNET_assert (0 == check_file_rw ());
413 GNUNET_assert (0 == check_metadata_rw ());
414 GNUNET_assert (0 == check_string_rw ());
418 /* end of test_bio.c */