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 2, 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;
44 metaDataW = GNUNET_CONTAINER_meta_data_create ();
46 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
48 fileW = GNUNET_BIO_write_open (fileName);
49 GNUNET_assert (NULL != fileW);
50 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
51 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
52 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int64 (fileW, TESTNUMBER64));
53 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
55 fileR = GNUNET_BIO_read_open (fileName);
56 GNUNET_assert (NULL != fileR);
57 readResultString = NULL;
58 GNUNET_assert (GNUNET_OK ==
59 GNUNET_BIO_read_string (fileR, "Read string error",
60 &readResultString, 200));
61 GNUNET_assert (0 == strcmp (TESTSTRING, readResultString));
62 GNUNET_free (readResultString);
63 GNUNET_assert (GNUNET_OK ==
64 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
66 GNUNET_assert (GNUNET_YES ==
67 GNUNET_CONTAINER_meta_data_test_equal (metaDataR,
69 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int64 (fileR, &testNum));
70 GNUNET_BIO_read_close (fileR, &msg);
71 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
72 GNUNET_CONTAINER_meta_data_destroy (metaDataR);
73 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
74 GNUNET_free (fileName);
82 char *readResultString = (char *) "not null";
83 struct GNUNET_BIO_WriteHandle *fileW;
84 struct GNUNET_BIO_ReadHandle *fileR;
85 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
87 fileW = GNUNET_BIO_write_open (fileName);
88 GNUNET_assert (NULL != fileW);
89 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, NULL));
90 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
92 fileR = GNUNET_BIO_read_open (fileName);
93 GNUNET_assert (NULL != fileR);
94 GNUNET_assert (GNUNET_OK ==
95 GNUNET_BIO_read_string (fileR, "Read string error",
96 &readResultString, 200));
97 GNUNET_assert (NULL == readResultString);
98 GNUNET_BIO_read_close (fileR, &msg);
99 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
100 GNUNET_free (fileName);
106 test_emptystring_rw ()
109 char *readResultString;
110 struct GNUNET_BIO_WriteHandle *fileW;
111 struct GNUNET_BIO_ReadHandle *fileR;
112 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
114 fileW = GNUNET_BIO_write_open (fileName);
115 GNUNET_assert (NULL != fileW);
116 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, ""));
117 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
119 fileR = GNUNET_BIO_read_open (fileName);
120 GNUNET_assert (NULL != fileR);
121 readResultString = NULL;
122 GNUNET_assert (GNUNET_OK ==
123 GNUNET_BIO_read_string (fileR, "Read string error",
124 &readResultString, 200));
125 GNUNET_free (readResultString);
126 GNUNET_BIO_read_close (fileR, &msg);
127 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
128 GNUNET_free (fileName);
136 char *readResultString;
137 struct GNUNET_BIO_WriteHandle *fileW;
138 struct GNUNET_BIO_ReadHandle *fileR;
139 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
141 fileW = GNUNET_BIO_write_open (fileName);
142 GNUNET_assert (NULL != fileW);
143 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
144 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
146 fileR = GNUNET_BIO_read_open (fileName);
147 GNUNET_assert (NULL != fileR);
148 readResultString = NULL;
149 GNUNET_assert (GNUNET_SYSERR ==
150 GNUNET_BIO_read_string (fileR, "Read string error",
151 &readResultString, 1));
152 GNUNET_assert (NULL == readResultString);
154 GNUNET_BIO_read_close (fileR, &msg);
156 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
157 GNUNET_free (fileName);
165 static char meta[1024 * 1024 * 10];
166 memset (meta, 'b', sizeof (meta));
167 meta[sizeof (meta) - 1] = '\0';
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 *metaDataW;
172 struct GNUNET_CONTAINER_MetaData *metaDataR;
173 metaDataW = GNUNET_CONTAINER_meta_data_create ();
174 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
175 GNUNET_assert (GNUNET_OK ==
176 GNUNET_CONTAINER_meta_data_insert (metaDataW,
177 EXTRACTOR_COMMENT, meta));
179 fileW = GNUNET_BIO_write_open (fileName);
180 GNUNET_assert (NULL != fileW);
181 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
182 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
184 fileR = GNUNET_BIO_read_open (fileName);
185 GNUNET_assert (NULL != fileR);
187 GNUNET_log_skip (1, GNUNET_NO);
188 GNUNET_assert (GNUNET_SYSERR ==
189 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
191 GNUNET_log_skip (0, GNUNET_YES);
193 GNUNET_BIO_read_close (fileR, &msg);
195 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
196 GNUNET_assert (NULL == metaDataR);
197 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
198 GNUNET_free (fileName);
206 char readResult[200];
207 struct GNUNET_BIO_ReadHandle *fileR;
209 fileR = GNUNET_BIO_read_open ("/dev");
210 GNUNET_assert (NULL != fileR);
211 GNUNET_assert (GNUNET_SYSERR ==
212 GNUNET_BIO_read (fileR, "Read error", readResult, 65537));
214 GNUNET_BIO_read_close (fileR, &msg);
224 char *readResultString;
225 static char fileNameNO[102401];
226 char readResult[200];
227 struct GNUNET_BIO_WriteHandle *fileW, *fileWNO;
228 struct GNUNET_BIO_ReadHandle *fileR, *fileRNO;
229 struct GNUNET_CONTAINER_MetaData *metaDataW;
230 struct GNUNET_CONTAINER_MetaData *metaDataR;
232 memset (fileNameNO, 'a', sizeof (fileNameNO));
233 fileNameNO[sizeof (fileNameNO) - 1] = '\0';
234 metaDataW = GNUNET_CONTAINER_meta_data_create ();
235 metaDataR = GNUNET_CONTAINER_meta_data_create ();
236 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
238 GNUNET_log_skip (1, GNUNET_NO);
239 fileWNO = GNUNET_BIO_write_open (fileNameNO);
240 GNUNET_log_skip (0, GNUNET_YES);
241 GNUNET_assert (NULL == fileWNO);
243 GNUNET_log_skip (1, GNUNET_NO);
244 fileRNO = GNUNET_BIO_read_open (fileNameNO);
245 GNUNET_log_skip (0, GNUNET_YES);
246 GNUNET_assert (NULL == fileRNO);
249 fileW = GNUNET_BIO_write_open ("/dev/full");
250 GNUNET_assert (NULL != fileW);
251 GNUNET_assert (GNUNET_SYSERR ==
252 GNUNET_BIO_write (fileW, fileNameNO, sizeof (fileNameNO)));
253 GNUNET_assert (GNUNET_SYSERR ==
254 GNUNET_BIO_write_string (fileW, TESTSTRING));
255 GNUNET_assert (GNUNET_SYSERR ==
256 GNUNET_BIO_write_meta_data (fileW, metaDataW));
257 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
259 fileW = GNUNET_BIO_write_open ("/dev/full");
260 GNUNET_assert (NULL != fileW);
261 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
263 fileR = GNUNET_BIO_read_open ("/dev/null");
264 GNUNET_assert (NULL != fileR);
265 GNUNET_assert (GNUNET_SYSERR ==
266 GNUNET_BIO_read (fileR, "Read error", readResult, 65537));
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));
273 GNUNET_assert (GNUNET_SYSERR ==
274 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
277 GNUNET_BIO_read_close (fileR, &msg);
279 GNUNET_CONTAINER_meta_data_destroy (metaDataR);
280 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
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_directory_r ());
402 main (int argc, char *argv[])
404 GNUNET_log_setup ("test-bio", "WARNING", NULL);
405 GNUNET_assert (0 == check_file_rw ());
406 GNUNET_assert (0 == check_metadata_rw ());
407 GNUNET_assert (0 == check_string_rw ());