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 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 ==
53 GNUNET_BIO_write_int64 (fileW, (int64_t) 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 (0 == strcmp (TESTSTRING, readResultString));
63 GNUNET_free (readResultString);
64 GNUNET_assert (GNUNET_OK ==
65 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
67 GNUNET_assert (GNUNET_YES ==
68 GNUNET_CONTAINER_meta_data_test_equal (metaDataR,
70 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int64 (fileR, &testNum));
71 GNUNET_BIO_read_close (fileR, &msg);
72 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
73 GNUNET_CONTAINER_meta_data_destroy (metaDataR);
74 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
75 GNUNET_free (fileName);
83 char *readResultString = (char *) "not null";
84 struct GNUNET_BIO_WriteHandle *fileW;
85 struct GNUNET_BIO_ReadHandle *fileR;
86 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
88 fileW = GNUNET_BIO_write_open (fileName);
89 GNUNET_assert (NULL != fileW);
90 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, NULL));
91 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
93 fileR = GNUNET_BIO_read_open (fileName);
94 GNUNET_assert (NULL != fileR);
95 GNUNET_assert (GNUNET_OK ==
96 GNUNET_BIO_read_string (fileR, "Read string error",
97 &readResultString, 200));
98 GNUNET_assert (NULL == readResultString);
99 GNUNET_BIO_read_close (fileR, &msg);
100 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
101 GNUNET_free (fileName);
107 test_emptystring_rw ()
110 char *readResultString;
111 struct GNUNET_BIO_WriteHandle *fileW;
112 struct GNUNET_BIO_ReadHandle *fileR;
113 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
115 fileW = GNUNET_BIO_write_open (fileName);
116 GNUNET_assert (NULL != fileW);
117 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, ""));
118 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
120 fileR = GNUNET_BIO_read_open (fileName);
121 GNUNET_assert (NULL != fileR);
122 readResultString = NULL;
123 GNUNET_assert (GNUNET_OK ==
124 GNUNET_BIO_read_string (fileR, "Read string error",
125 &readResultString, 200));
126 GNUNET_free (readResultString);
127 GNUNET_BIO_read_close (fileR, &msg);
128 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
129 GNUNET_free (fileName);
137 char *readResultString;
138 struct GNUNET_BIO_WriteHandle *fileW;
139 struct GNUNET_BIO_ReadHandle *fileR;
140 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
142 fileW = GNUNET_BIO_write_open (fileName);
143 GNUNET_assert (NULL != fileW);
144 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
145 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
147 fileR = GNUNET_BIO_read_open (fileName);
148 GNUNET_assert (NULL != fileR);
149 readResultString = NULL;
150 GNUNET_assert (GNUNET_SYSERR ==
151 GNUNET_BIO_read_string (fileR, "Read string error",
152 &readResultString, 1));
153 GNUNET_assert (NULL == readResultString);
155 GNUNET_BIO_read_close (fileR, &msg);
157 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
158 GNUNET_free (fileName);
166 static char meta[1024 * 1024 * 10];
167 memset (meta, 'b', sizeof (meta));
168 meta[sizeof (meta) - 1] = '\0';
169 struct GNUNET_BIO_WriteHandle *fileW;
170 struct GNUNET_BIO_ReadHandle *fileR;
171 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
172 struct GNUNET_CONTAINER_MetaData *metaDataW;
173 struct GNUNET_CONTAINER_MetaData *metaDataR;
174 metaDataW = GNUNET_CONTAINER_meta_data_create ();
175 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
176 GNUNET_assert (GNUNET_OK ==
177 GNUNET_CONTAINER_meta_data_insert (metaDataW,
178 EXTRACTOR_COMMENT, meta));
180 fileW = GNUNET_BIO_write_open (fileName);
181 GNUNET_assert (NULL != fileW);
182 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
183 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
185 fileR = GNUNET_BIO_read_open (fileName);
186 GNUNET_assert (NULL != fileR);
188 GNUNET_assert (GNUNET_SYSERR ==
189 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
192 GNUNET_BIO_read_close (fileR, &msg);
194 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
195 GNUNET_assert (NULL == metaDataR);
196 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
197 GNUNET_free (fileName);
204 char readResult[200];
205 struct GNUNET_BIO_ReadHandle *fileR;
207 fileR = GNUNET_BIO_read_open ("/dev");
208 GNUNET_assert (NULL != fileR);
209 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read (fileR, "Read error", readResult, 65537));
211 GNUNET_BIO_read_close (fileR, &msg);
221 char *readResultString;
222 static char fileNameNO[102401];
223 char readResult[200];
224 memset (fileNameNO, 'a', sizeof (fileNameNO));
225 fileNameNO[sizeof (fileNameNO) - 1] = '\0';
226 struct GNUNET_BIO_WriteHandle *fileW, *fileWNO;
227 struct GNUNET_BIO_ReadHandle *fileR, *fileRNO;
228 struct GNUNET_CONTAINER_MetaData *metaDataW;
229 struct GNUNET_CONTAINER_MetaData *metaDataR;
230 metaDataW = GNUNET_CONTAINER_meta_data_create ();
231 metaDataR = GNUNET_CONTAINER_meta_data_create ();
232 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
234 fileWNO = GNUNET_BIO_write_open (fileNameNO);
235 GNUNET_assert (NULL == fileWNO);
237 fileRNO = GNUNET_BIO_read_open (fileNameNO);
238 GNUNET_assert (NULL == fileRNO);
240 fileW = GNUNET_BIO_write_open ("/dev/full");
241 GNUNET_assert (NULL != fileW);
242 GNUNET_assert (GNUNET_SYSERR ==
243 GNUNET_BIO_write (fileW, TESTSTRING, 65537));
244 GNUNET_assert (GNUNET_SYSERR ==
245 GNUNET_BIO_write_string (fileW, TESTSTRING));
246 GNUNET_assert (GNUNET_SYSERR ==
247 GNUNET_BIO_write_meta_data (fileW, metaDataW));
248 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
250 fileW = GNUNET_BIO_write_open ("/dev/full");
251 GNUNET_assert (NULL != fileW);
252 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
254 fileR = GNUNET_BIO_read_open ("/dev/null");
255 GNUNET_assert (NULL != fileR);
256 GNUNET_assert (GNUNET_SYSERR ==
257 GNUNET_BIO_read (fileR, "Read error", readResult, 65537));
258 readResultString = NULL;
259 GNUNET_assert (GNUNET_SYSERR ==
260 GNUNET_BIO_read_string (fileR, "Read string error",
261 &readResultString, 200));
262 GNUNET_assert (NULL == readResultString);
263 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_int64 (fileR, &testNum));
264 GNUNET_assert (GNUNET_SYSERR ==
265 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
268 GNUNET_BIO_read_close (fileR, &msg);
270 GNUNET_CONTAINER_meta_data_destroy (metaDataR);
271 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
276 test_fakestring_rw ()
281 struct GNUNET_BIO_WriteHandle *fileW;
282 struct GNUNET_BIO_ReadHandle *fileR;
283 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
285 fileW = GNUNET_BIO_write_open (fileName);
286 GNUNET_assert (NULL != fileW);
287 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
288 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
290 fileR = GNUNET_BIO_read_open (fileName);
291 GNUNET_assert (NULL != fileR);
292 GNUNET_assert (GNUNET_SYSERR ==
293 GNUNET_BIO_read_string (fileR, "Read string error",
296 GNUNET_BIO_read_close (fileR, &msg);
298 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
299 GNUNET_free (fileName);
308 struct GNUNET_BIO_WriteHandle *fileW;
309 struct GNUNET_BIO_ReadHandle *fileR;
310 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
311 struct GNUNET_CONTAINER_MetaData *metaDataR;
313 fileW = GNUNET_BIO_write_open (fileName);
314 GNUNET_assert (NULL != fileW);
315 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
316 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
318 fileR = GNUNET_BIO_read_open (fileName);
319 GNUNET_assert (NULL != fileR);
321 GNUNET_assert (GNUNET_SYSERR ==
322 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
324 GNUNET_assert (NULL == metaDataR);
326 GNUNET_BIO_read_close (fileR, &msg);
328 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
329 GNUNET_free (fileName);
334 test_fakebigmeta_rw ()
337 int32_t tmpInt = 1024 * 1024 * 10;
338 struct GNUNET_BIO_WriteHandle *fileW;
339 struct GNUNET_BIO_ReadHandle *fileR;
340 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
341 struct GNUNET_CONTAINER_MetaData *metaDataR;
343 fileW = GNUNET_BIO_write_open (fileName);
344 GNUNET_assert (NULL != fileW);
345 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
346 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
348 fileR = GNUNET_BIO_read_open (fileName);
349 GNUNET_assert (NULL != fileR);
351 GNUNET_assert (GNUNET_SYSERR ==
352 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
355 GNUNET_BIO_read_close (fileR, &msg);
357 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
358 GNUNET_assert (NULL == metaDataR);
359 GNUNET_free (fileName);
366 GNUNET_assert (0 == test_nullstring_rw ());
367 GNUNET_assert (0 == test_emptystring_rw ());
368 GNUNET_assert (0 == test_bigstring_rw ());
369 GNUNET_assert (0 == test_fakestring_rw ());
376 GNUNET_assert (0 == test_fakebigmeta_rw ());
377 GNUNET_assert (0 == test_fakemeta_rw ());
378 GNUNET_assert (0 == test_bigmeta_rw ());
385 GNUNET_assert (0 == test_normal_rw ());
386 GNUNET_assert (0 == test_nullfile_rw ());
387 GNUNET_assert (0 == test_directory_r());
392 main (int argc, char *argv[]){
393 GNUNET_assert (0 == check_file_rw());
394 GNUNET_assert (0 == check_metadata_rw());
395 GNUNET_assert (0 == check_string_rw());