2 This file is part of GNUnet.
3 Copyright (C) 2009 GNUnet e.V.
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.
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.
17 * @file util/test_bio.c
18 * @brief testcase for the buffered IO module
24 #include "gnunet_util_lib.h"
25 #define TESTSTRING "testString"
26 #define TESTNUMBER64 ((int64_t)100000L)
33 char *readResultString;
34 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
35 struct GNUNET_BIO_WriteHandle *fileW;
36 struct GNUNET_BIO_ReadHandle *fileR;
37 struct GNUNET_CONTAINER_MetaData *metaDataW;
38 struct GNUNET_CONTAINER_MetaData *metaDataR;
40 metaDataW = GNUNET_CONTAINER_meta_data_create ();
42 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
44 fileW = GNUNET_BIO_write_open (fileName);
45 GNUNET_assert (NULL != fileW);
46 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
47 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
48 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int64 (fileW, TESTNUMBER64));
49 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
51 fileR = GNUNET_BIO_read_open (fileName);
52 GNUNET_assert (NULL != fileR);
53 readResultString = NULL;
54 GNUNET_assert (GNUNET_OK ==
55 GNUNET_BIO_read_string (fileR, "Read string error",
56 &readResultString, 200));
57 GNUNET_assert (NULL != readResultString);
58 GNUNET_assert (0 == strcmp (TESTSTRING, readResultString));
59 GNUNET_free (readResultString);
60 GNUNET_assert (GNUNET_OK ==
61 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
63 GNUNET_assert (GNUNET_YES ==
64 GNUNET_CONTAINER_meta_data_test_equal (metaDataR, metaDataW));
65 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int64 (fileR, &testNum));
66 GNUNET_BIO_read_close (fileR, &msg);
67 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
68 GNUNET_CONTAINER_meta_data_destroy (metaDataR);
69 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
70 GNUNET_free (fileName);
78 char *readResultString = (char *) "not null";
79 struct GNUNET_BIO_WriteHandle *fileW;
80 struct GNUNET_BIO_ReadHandle *fileR;
81 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
83 fileW = GNUNET_BIO_write_open (fileName);
84 GNUNET_assert (NULL != fileW);
85 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, NULL));
86 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
88 fileR = GNUNET_BIO_read_open (fileName);
89 GNUNET_assert (NULL != fileR);
90 GNUNET_assert (GNUNET_OK ==
91 GNUNET_BIO_read_string (fileR, "Read string error",
92 &readResultString, 200));
93 GNUNET_assert (NULL == readResultString);
94 GNUNET_BIO_read_close (fileR, &msg);
95 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
96 GNUNET_free (fileName);
102 test_emptystring_rw ()
105 char *readResultString;
106 struct GNUNET_BIO_WriteHandle *fileW;
107 struct GNUNET_BIO_ReadHandle *fileR;
108 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
110 fileW = GNUNET_BIO_write_open (fileName);
111 GNUNET_assert (NULL != fileW);
112 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, ""));
113 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
115 fileR = GNUNET_BIO_read_open (fileName);
116 GNUNET_assert (NULL != fileR);
117 readResultString = NULL;
118 GNUNET_assert (GNUNET_OK ==
119 GNUNET_BIO_read_string (fileR, "Read string error",
120 &readResultString, 200));
121 GNUNET_free (readResultString);
122 GNUNET_BIO_read_close (fileR, &msg);
123 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
124 GNUNET_free (fileName);
132 char *readResultString;
133 struct GNUNET_BIO_WriteHandle *fileW;
134 struct GNUNET_BIO_ReadHandle *fileR;
135 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
137 fileW = GNUNET_BIO_write_open (fileName);
138 GNUNET_assert (NULL != fileW);
139 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
140 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
142 fileR = GNUNET_BIO_read_open (fileName);
143 GNUNET_assert (NULL != fileR);
144 readResultString = NULL;
145 GNUNET_assert (GNUNET_SYSERR ==
146 GNUNET_BIO_read_string (fileR, "Read string error",
147 &readResultString, 1));
148 GNUNET_assert (NULL == readResultString);
150 GNUNET_BIO_read_close (fileR, &msg);
152 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
153 GNUNET_free (fileName);
161 static char meta[1024 * 1024 * 10];
162 struct GNUNET_BIO_WriteHandle *fileW;
163 struct GNUNET_BIO_ReadHandle *fileR;
164 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
165 struct GNUNET_CONTAINER_MetaData *metaDataR;
167 memset (meta, 'b', sizeof (meta));
168 meta[sizeof (meta) - 1] = '\0';
169 fileW = GNUNET_BIO_write_open (fileName);
170 GNUNET_assert (NULL != fileW);
171 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, sizeof (meta)));
172 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write (fileW, meta, sizeof (meta)));
173 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
175 fileR = GNUNET_BIO_read_open (fileName);
176 GNUNET_assert (NULL != fileR);
178 GNUNET_assert (GNUNET_SYSERR ==
179 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
182 GNUNET_BIO_read_close (fileR, &msg);
184 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
185 GNUNET_assert (NULL == metaDataR);
186 GNUNET_free (fileName);
195 char readResult[200];
196 struct GNUNET_BIO_ReadHandle *fileR;
198 fileR = GNUNET_BIO_read_open ("/dev");
199 GNUNET_assert (NULL != fileR);
200 GNUNET_assert (GNUNET_SYSERR ==
201 GNUNET_BIO_read (fileR, "Read error", readResult,
202 sizeof (readResult)));
204 GNUNET_BIO_read_close (fileR, &msg);
213 static char fileNameNO[102401];
214 struct GNUNET_BIO_WriteHandle *fileWNO;
215 struct GNUNET_BIO_ReadHandle *fileRNO;
217 memset (fileNameNO, 'a', sizeof (fileNameNO));
218 fileNameNO[sizeof (fileNameNO) - 1] = '\0';
220 GNUNET_log_skip (1, GNUNET_NO);
221 fileWNO = GNUNET_BIO_write_open (fileNameNO);
222 GNUNET_log_skip (0, GNUNET_YES);
223 GNUNET_assert (NULL == fileWNO);
225 GNUNET_log_skip (1, GNUNET_NO);
226 fileRNO = GNUNET_BIO_read_open (fileNameNO);
227 GNUNET_log_skip (0, GNUNET_YES);
228 GNUNET_assert (NULL == fileRNO);
237 /* /dev/full only seems to exist on Linux */
240 char *readResultString;
241 char readResult[200];
242 struct GNUNET_BIO_WriteHandle *fileW;
243 struct GNUNET_BIO_ReadHandle *fileR;
244 struct GNUNET_CONTAINER_MetaData *metaDataW;
245 struct GNUNET_CONTAINER_MetaData *metaDataR;
247 metaDataW = GNUNET_CONTAINER_meta_data_create ();
248 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
250 fileW = GNUNET_BIO_write_open ("/dev/full");
251 GNUNET_assert (NULL != fileW);
252 (void) GNUNET_BIO_write (fileW, TESTSTRING, strlen (TESTSTRING));
253 (void) GNUNET_BIO_write_string (fileW, TESTSTRING);
254 (void) GNUNET_BIO_write_meta_data (fileW, metaDataW);
255 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
256 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
258 fileW = GNUNET_BIO_write_open ("/dev/full");
259 GNUNET_assert (NULL != fileW);
260 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
262 fileR = GNUNET_BIO_read_open ("/dev/null");
263 GNUNET_assert (NULL != fileR);
264 GNUNET_assert (GNUNET_SYSERR ==
265 GNUNET_BIO_read (fileR, "Read error", readResult,
266 sizeof (readResult)));
267 readResultString = NULL;
268 GNUNET_assert (GNUNET_SYSERR ==
269 GNUNET_BIO_read_string (fileR, "Read string error",
270 &readResultString, 200));
271 GNUNET_assert (NULL == readResultString);
272 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_int64 (fileR, &testNum));
274 GNUNET_assert (GNUNET_SYSERR ==
275 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
278 GNUNET_BIO_read_close (fileR, &msg);
280 GNUNET_assert (NULL == metaDataR);
286 test_fakestring_rw ()
291 struct GNUNET_BIO_WriteHandle *fileW;
292 struct GNUNET_BIO_ReadHandle *fileR;
293 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
295 fileW = GNUNET_BIO_write_open (fileName);
296 GNUNET_assert (NULL != fileW);
297 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
298 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
300 fileR = GNUNET_BIO_read_open (fileName);
301 GNUNET_assert (NULL != fileR);
302 GNUNET_assert (GNUNET_SYSERR ==
303 GNUNET_BIO_read_string (fileR, "Read string error",
306 GNUNET_BIO_read_close (fileR, &msg);
308 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
309 GNUNET_free (fileName);
318 struct GNUNET_BIO_WriteHandle *fileW;
319 struct GNUNET_BIO_ReadHandle *fileR;
320 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
321 struct GNUNET_CONTAINER_MetaData *metaDataR;
323 fileW = GNUNET_BIO_write_open (fileName);
324 GNUNET_assert (NULL != fileW);
325 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
326 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
328 fileR = GNUNET_BIO_read_open (fileName);
329 GNUNET_assert (NULL != fileR);
331 GNUNET_assert (GNUNET_SYSERR ==
332 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
334 GNUNET_assert (NULL == metaDataR);
336 GNUNET_BIO_read_close (fileR, &msg);
338 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
339 GNUNET_free (fileName);
344 test_fakebigmeta_rw ()
347 int32_t tmpInt = 1024 * 1024 * 10;
348 struct GNUNET_BIO_WriteHandle *fileW;
349 struct GNUNET_BIO_ReadHandle *fileR;
350 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
351 struct GNUNET_CONTAINER_MetaData *metaDataR;
353 fileW = GNUNET_BIO_write_open (fileName);
354 GNUNET_assert (NULL != fileW);
355 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
356 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
358 fileR = GNUNET_BIO_read_open (fileName);
359 GNUNET_assert (NULL != fileR);
361 GNUNET_assert (GNUNET_SYSERR ==
362 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
365 GNUNET_BIO_read_close (fileR, &msg);
367 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
368 GNUNET_assert (NULL == metaDataR);
369 GNUNET_free (fileName);
376 GNUNET_assert (0 == test_nullstring_rw ());
377 GNUNET_assert (0 == test_emptystring_rw ());
378 GNUNET_assert (0 == test_bigstring_rw ());
379 GNUNET_assert (0 == test_fakestring_rw ());
386 GNUNET_assert (0 == test_fakebigmeta_rw ());
387 GNUNET_assert (0 == test_fakemeta_rw ());
388 GNUNET_assert (0 == test_bigmeta_rw ());
395 GNUNET_assert (0 == test_normal_rw ());
396 GNUNET_assert (0 == test_nullfile_rw ());
397 GNUNET_assert (0 == test_fullfile_rw ());
398 GNUNET_assert (0 == test_directory_r ());
403 main (int argc, char *argv[])
405 GNUNET_log_setup ("test-bio", "WARNING", NULL);
406 GNUNET_assert (0 == check_file_rw ());
407 GNUNET_assert (0 == check_metadata_rw ());
408 GNUNET_assert (0 == check_string_rw ());
412 /* end of test_bio.c */