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 ();
45 metaDataR = 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 GNUNET_assert (GNUNET_OK ==
59 GNUNET_BIO_read_string (fileR, "Read string error",
60 &readResultString, 200));
61 GNUNET_assert (GNUNET_OK ==
62 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
64 GNUNET_assert (GNUNET_YES ==
65 GNUNET_CONTAINER_meta_data_test_equal (metaDataR,
67 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int64 (fileR, &testNum));
68 GNUNET_BIO_read_close (fileR, &msg);
69 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
70 GNUNET_CONTAINER_meta_data_destroy (metaDataR);
71 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
72 GNUNET_free (fileName);
80 char *readResultString = (char *) "not null";
81 struct GNUNET_BIO_WriteHandle *fileW;
82 struct GNUNET_BIO_ReadHandle *fileR;
83 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
85 fileW = GNUNET_BIO_write_open (fileName);
86 GNUNET_assert (NULL != fileW);
87 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, NULL));
88 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
90 fileR = GNUNET_BIO_read_open (fileName);
91 GNUNET_assert (NULL != fileR);
92 GNUNET_assert (GNUNET_OK ==
93 GNUNET_BIO_read_string (fileR, "Read string error",
94 &readResultString, 200));
95 GNUNET_assert (NULL == readResultString);
96 GNUNET_BIO_read_close (fileR, &msg);
97 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
98 GNUNET_free (fileName);
104 test_emptystring_rw (void)
107 char *readResultString;
108 struct GNUNET_BIO_WriteHandle *fileW;
109 struct GNUNET_BIO_ReadHandle *fileR;
110 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
112 fileW = GNUNET_BIO_write_open (fileName);
113 GNUNET_assert (NULL != fileW);
114 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, ""));
115 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
117 fileR = GNUNET_BIO_read_open (fileName);
118 GNUNET_assert (NULL != fileR);
119 GNUNET_assert (GNUNET_OK ==
120 GNUNET_BIO_read_string (fileR, "Read string error",
121 &readResultString, 200));
122 GNUNET_BIO_read_close (fileR, &msg);
123 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
124 GNUNET_free (fileName);
129 test_bigstring_rw (void)
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 GNUNET_assert (GNUNET_SYSERR ==
145 GNUNET_BIO_read_string (fileR, "Read string error",
146 &readResultString, 1));
147 GNUNET_BIO_read_close (fileR, &msg);
148 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
149 GNUNET_free (fileName);
157 static char meta[1024 * 1024 * 10];
158 memset (meta, 'b', sizeof (meta));
159 meta[sizeof (meta) - 1] = '\0';
160 struct GNUNET_BIO_WriteHandle *fileW;
161 struct GNUNET_BIO_ReadHandle *fileR;
162 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
163 struct GNUNET_CONTAINER_MetaData *metaDataW;
164 struct GNUNET_CONTAINER_MetaData *metaDataR;
165 metaDataW = GNUNET_CONTAINER_meta_data_create ();
166 metaDataR = GNUNET_CONTAINER_meta_data_create ();
167 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
168 GNUNET_assert (GNUNET_OK ==
169 GNUNET_CONTAINER_meta_data_insert (metaDataW,
170 EXTRACTOR_COMMENT, meta));
172 fileW = GNUNET_BIO_write_open (fileName);
173 GNUNET_assert (NULL != fileW);
174 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
175 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
177 fileR = GNUNET_BIO_read_open (fileName);
178 GNUNET_assert (NULL != fileR);
179 GNUNET_assert (GNUNET_SYSERR ==
180 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
182 GNUNET_BIO_read_close (fileR, &msg);
183 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
184 GNUNET_free (fileName);
189 test_nullfile_rw (void)
193 char *readResultString;
194 static char fileNameNO[102401];
195 char readResult[200];
196 memset (fileNameNO, 'a', sizeof (fileNameNO));
197 fileNameNO[sizeof (fileNameNO) - 1] = '\0';
198 const char *fileName = "/dev/full";
199 const char *fileNameR = "/dev/null";
200 struct GNUNET_BIO_WriteHandle *fileW, *fileWNO;
201 struct GNUNET_BIO_ReadHandle *fileR, *fileRNO;
202 struct GNUNET_CONTAINER_MetaData *metaDataW;
203 struct GNUNET_CONTAINER_MetaData *metaDataR;
204 metaDataW = GNUNET_CONTAINER_meta_data_create ();
205 metaDataR = GNUNET_CONTAINER_meta_data_create ();
206 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
208 fileWNO = GNUNET_BIO_write_open (fileNameNO);
209 GNUNET_assert (NULL == fileWNO);
211 fileRNO = GNUNET_BIO_read_open (fileNameNO);
212 GNUNET_assert (NULL == fileRNO);
214 fileW = GNUNET_BIO_write_open (fileName);
215 GNUNET_assert (NULL != fileW);
216 GNUNET_assert (GNUNET_SYSERR ==
217 GNUNET_BIO_write (fileW, TESTSTRING, 65537));
218 GNUNET_assert (GNUNET_SYSERR ==
219 GNUNET_BIO_write_string (fileW, TESTSTRING));
220 GNUNET_assert (GNUNET_SYSERR ==
221 GNUNET_BIO_write_meta_data (fileW, metaDataW));
222 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
223 fileW = GNUNET_BIO_write_open (fileName);
224 GNUNET_assert (NULL != fileW);
225 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
227 fileR = GNUNET_BIO_read_open (fileNameR);
228 GNUNET_assert (NULL != fileR);
229 GNUNET_assert (GNUNET_SYSERR ==
230 GNUNET_BIO_read (fileR, "Read error", readResult, 65537));
231 GNUNET_assert (GNUNET_SYSERR ==
232 GNUNET_BIO_read_string (fileR, "Read string error",
233 &readResultString, 200));
234 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_int64 (fileR, &testNum));
235 GNUNET_assert (GNUNET_SYSERR ==
236 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
238 GNUNET_BIO_read_close (fileR, &msg);
243 test_fakestring_rw (void)
248 struct GNUNET_BIO_WriteHandle *fileW;
249 struct GNUNET_BIO_ReadHandle *fileR;
250 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
252 fileW = GNUNET_BIO_write_open (fileName);
253 GNUNET_assert (NULL != fileW);
254 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
255 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
257 fileR = GNUNET_BIO_read_open (fileName);
258 GNUNET_assert (NULL != fileR);
259 GNUNET_assert (GNUNET_SYSERR ==
260 GNUNET_BIO_read_string (fileR, "Read string error",
262 GNUNET_BIO_read_close (fileR, &msg);
263 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
264 GNUNET_free (fileName);
269 test_fakemeta_rw (void)
273 struct GNUNET_BIO_WriteHandle *fileW;
274 struct GNUNET_BIO_ReadHandle *fileR;
275 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
276 struct GNUNET_CONTAINER_MetaData *metaDataR;
277 metaDataR = GNUNET_CONTAINER_meta_data_create ();
279 fileW = GNUNET_BIO_write_open (fileName);
280 GNUNET_assert (NULL != fileW);
281 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
282 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
284 fileR = GNUNET_BIO_read_open (fileName);
285 GNUNET_assert (NULL != fileR);
286 GNUNET_assert (GNUNET_SYSERR ==
287 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
289 GNUNET_BIO_read_close (fileR, &msg);
290 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
291 GNUNET_free (fileName);
296 test_fakebigmeta_rw (void)
299 int32_t tmpInt = 1024 * 1024 * 10;
300 struct GNUNET_BIO_WriteHandle *fileW;
301 struct GNUNET_BIO_ReadHandle *fileR;
302 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
303 struct GNUNET_CONTAINER_MetaData *metaDataR;
304 metaDataR = GNUNET_CONTAINER_meta_data_create ();
306 fileW = GNUNET_BIO_write_open (fileName);
307 GNUNET_assert (NULL != fileW);
308 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32 (fileW, tmpInt));
309 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
311 fileR = GNUNET_BIO_read_open (fileName);
312 GNUNET_assert (NULL != fileR);
313 GNUNET_assert (GNUNET_SYSERR ==
314 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
316 GNUNET_BIO_read_close (fileR, &msg);
317 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
318 GNUNET_free (fileName);
323 check_string_rw (void)
325 GNUNET_assert (0 == test_nullstring_rw ());
326 GNUNET_assert (0 == test_emptystring_rw ());
327 GNUNET_assert (0 == test_bigstring_rw ());
328 GNUNET_assert (0 == test_fakestring_rw ());
333 check_metadata_rw (void)
335 GNUNET_assert (0 == test_fakebigmeta_rw ());
336 GNUNET_assert (0 == test_fakemeta_rw ());
337 GNUNET_assert (0 == test_bigmeta_rw ());
344 GNUNET_assert (0 == test_normal_rw ());
345 GNUNET_assert (0 == test_nullfile_rw ());
350 main (int argc, char *argv[])
352 GNUNET_assert (0 == check_file_rw ());
353 GNUNET_assert (0 == check_metadata_rw ());
354 GNUNET_assert (0 == check_string_rw ());