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
37 char *readResultString;
38 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
39 struct GNUNET_BIO_WriteHandle *fileW;
40 struct GNUNET_BIO_ReadHandle *fileR;
41 struct GNUNET_CONTAINER_MetaData *metaDataW;
42 struct GNUNET_CONTAINER_MetaData *metaDataR;
43 metaDataW = GNUNET_CONTAINER_meta_data_create ();
44 metaDataR = GNUNET_CONTAINER_meta_data_create ();
45 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
47 fileW = GNUNET_BIO_write_open (fileName);
48 GNUNET_assert (NULL != fileW);
49 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
50 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
51 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int64 (fileW, (int64_t)TESTNUMBER64));
52 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
54 fileR = GNUNET_BIO_read_open (fileName);
55 GNUNET_assert (NULL != fileR);
56 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_string (fileR, "Read string error", &readResultString, 200));
57 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_meta_data (fileR, "Read meta error", &metaDataR));
58 GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_meta_data_test_equal (metaDataR, metaDataW));
59 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int64 (fileR, &testNum));
60 GNUNET_BIO_read_close (fileR, &msg);
61 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
62 GNUNET_CONTAINER_meta_data_destroy (metaDataR);
63 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
64 GNUNET_free (fileName);
71 char *readResultString = (char*) "not null";
72 struct GNUNET_BIO_WriteHandle *fileW;
73 struct GNUNET_BIO_ReadHandle *fileR;
74 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
76 fileW = GNUNET_BIO_write_open (fileName);
77 GNUNET_assert (NULL != fileW);
78 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, NULL));
79 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
81 fileR = GNUNET_BIO_read_open (fileName);
82 GNUNET_assert (NULL != fileR);
83 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_string (fileR, "Read string error", &readResultString, 200));
84 GNUNET_assert (NULL == readResultString);
85 GNUNET_BIO_read_close (fileR, &msg);
86 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
87 GNUNET_free (fileName);
93 test_emptystring_rw(void){
95 char *readResultString;
96 struct GNUNET_BIO_WriteHandle *fileW;
97 struct GNUNET_BIO_ReadHandle *fileR;
98 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
100 fileW = GNUNET_BIO_write_open (fileName);
101 GNUNET_assert (NULL != fileW);
102 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, ""));
103 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
105 fileR = GNUNET_BIO_read_open (fileName);
106 GNUNET_assert (NULL != fileR);
107 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_string (fileR, "Read string error", &readResultString, 200));
108 GNUNET_BIO_read_close (fileR, &msg);
109 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
110 GNUNET_free (fileName);
115 test_bigstring_rw(void){
117 char *readResultString;
118 struct GNUNET_BIO_WriteHandle *fileW;
119 struct GNUNET_BIO_ReadHandle *fileR;
120 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
122 fileW = GNUNET_BIO_write_open (fileName);
123 GNUNET_assert (NULL != fileW);
124 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
125 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
127 fileR = GNUNET_BIO_read_open (fileName);
128 GNUNET_assert (NULL != fileR);
129 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_string (fileR, "Read string error", &readResultString, 1));
130 GNUNET_BIO_read_close (fileR, &msg);
131 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
132 GNUNET_free (fileName);
139 static char meta[1024 * 1024 * 10];
140 memset(meta,'b',sizeof(meta));
141 meta[sizeof(meta)-1]='\0';
142 struct GNUNET_BIO_WriteHandle *fileW;
143 struct GNUNET_BIO_ReadHandle *fileR;
144 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
145 struct GNUNET_CONTAINER_MetaData *metaDataW;
146 struct GNUNET_CONTAINER_MetaData *metaDataR;
147 metaDataW = GNUNET_CONTAINER_meta_data_create ();
148 metaDataR = GNUNET_CONTAINER_meta_data_create ();
149 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
150 GNUNET_assert (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (metaDataW, EXTRACTOR_COMMENT, meta));
152 fileW = GNUNET_BIO_write_open (fileName);
153 GNUNET_assert (NULL != fileW);
154 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
155 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
157 fileR = GNUNET_BIO_read_open (fileName);
158 GNUNET_assert (NULL != fileR);
159 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_meta_data (fileR, "Read meta error", &metaDataR));
160 GNUNET_BIO_read_close (fileR, &msg);
161 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
162 GNUNET_free (fileName);
167 test_nullfile_rw(void){
170 char *readResultString;
171 static char fileNameNO[102401];
172 char readResult[200];
173 memset(fileNameNO,'a',sizeof(fileNameNO));
174 fileNameNO[sizeof(fileNameNO)-1] = '\0';
175 const char *fileName = "/dev/full";
176 const char *fileNameR = "/dev/null";
177 struct GNUNET_BIO_WriteHandle *fileW,*fileWNO;
178 struct GNUNET_BIO_ReadHandle *fileR,*fileRNO;
179 struct GNUNET_CONTAINER_MetaData *metaDataW;
180 struct GNUNET_CONTAINER_MetaData *metaDataR;
181 metaDataW = GNUNET_CONTAINER_meta_data_create ();
182 metaDataR = GNUNET_CONTAINER_meta_data_create ();
183 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
185 fileWNO = GNUNET_BIO_write_open(fileNameNO);
186 GNUNET_assert (NULL == fileWNO);
188 fileRNO = GNUNET_BIO_read_open (fileNameNO);
189 GNUNET_assert (NULL == fileRNO);
191 fileW = GNUNET_BIO_write_open (fileName);
192 GNUNET_assert (NULL != fileW);
193 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write (fileW, TESTSTRING, 65537));
194 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_string (fileW, TESTSTRING));
195 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_meta_data (fileW, metaDataW));
196 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
197 fileW = GNUNET_BIO_write_open (fileName);
198 GNUNET_assert (NULL != fileW);
199 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileW));
201 fileR = GNUNET_BIO_read_open (fileNameR);
202 GNUNET_assert (NULL != fileR);
203 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read (fileR, "Read error", readResult, 65537));
204 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_string (fileR, "Read string error", &readResultString, 200));
205 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_int64 (fileR, &testNum));
206 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_meta_data (fileR, "Read meta error", &metaDataR));
207 GNUNET_BIO_read_close (fileR, &msg);
212 test_fakestring_rw(void){
216 struct GNUNET_BIO_WriteHandle *fileW;
217 struct GNUNET_BIO_ReadHandle *fileR;
218 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
220 fileW = GNUNET_BIO_write_open (fileName);
221 GNUNET_assert (NULL != fileW);
222 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32(fileW, tmpInt));
223 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
225 fileR = GNUNET_BIO_read_open (fileName);
226 GNUNET_assert (NULL != fileR);
227 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_string(fileR, "Read string error", &readResult, 200));
228 GNUNET_BIO_read_close (fileR, &msg);
229 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
230 GNUNET_free (fileName);
235 test_fakemeta_rw(void){
238 struct GNUNET_BIO_WriteHandle *fileW;
239 struct GNUNET_BIO_ReadHandle *fileR;
240 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
241 struct GNUNET_CONTAINER_MetaData *metaDataR;
242 metaDataR = GNUNET_CONTAINER_meta_data_create ();
244 fileW = GNUNET_BIO_write_open (fileName);
245 GNUNET_assert (NULL != fileW);
246 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32(fileW,tmpInt));
247 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
249 fileR = GNUNET_BIO_read_open (fileName);
250 GNUNET_assert (NULL != fileR);
251 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_meta_data(fileR, "Read meta error", &metaDataR));
252 GNUNET_BIO_read_close (fileR, &msg);
253 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
254 GNUNET_free (fileName);
259 test_fakebigmeta_rw(void){
261 int32_t tmpInt = 1024*1024*10;
262 struct GNUNET_BIO_WriteHandle *fileW;
263 struct GNUNET_BIO_ReadHandle *fileR;
264 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
265 struct GNUNET_CONTAINER_MetaData *metaDataR;
266 metaDataR = GNUNET_CONTAINER_meta_data_create ();
268 fileW = GNUNET_BIO_write_open (fileName);
269 GNUNET_assert (NULL != fileW);
270 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32(fileW, tmpInt));
271 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
273 fileR = GNUNET_BIO_read_open (fileName);
274 GNUNET_assert (NULL != fileR);
275 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_meta_data(fileR, "Read meta error", &metaDataR));
276 GNUNET_BIO_read_close (fileR, &msg);
277 GNUNET_assert (GNUNET_OK == GNUNET_DISK_directory_remove (fileName));
278 GNUNET_free (fileName);
283 check_string_rw(void){
284 GNUNET_assert (0 == test_nullstring_rw());
285 GNUNET_assert (0 == test_emptystring_rw());
286 GNUNET_assert (0 == test_bigstring_rw());
287 GNUNET_assert (0 == test_fakestring_rw());
292 check_metadata_rw(void){
293 GNUNET_assert (0 == test_fakebigmeta_rw());
294 GNUNET_assert (0 == test_fakemeta_rw());
295 GNUNET_assert (0 == test_bigmeta_rw());
301 GNUNET_assert (0 == test_normal_rw());
302 GNUNET_assert (0 == test_nullfile_rw());
307 main (int argc, char *argv[]){
308 GNUNET_assert (0 == check_file_rw());
309 GNUNET_assert (0 == check_metadata_rw());
310 GNUNET_assert (0 == check_string_rw());