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
34 main (int argc, char *argv[])
37 char *readResultString;
38 int64_t testNumber = (int64_t) TESTNUMBER64;
41 static char file[102400];
42 static char meta[1024 * 1024 * 10];
44 for (i = 0; i < 102400; i++)
48 for (j = 0; j < 1024 * 1024 * 10; j++)
52 char *fileName = GNUNET_DISK_mktemp ("gnunet_bio");
53 char *fileName2 = GNUNET_DISK_mktemp ("gnunet_zwei_bio");
54 char *fileName3 = GNUNET_DISK_mktemp ("gnunet_drei_bio");
55 char *fileName4 = GNUNET_DISK_mktemp ("gnunet_vier_bio");
57 struct GNUNET_BIO_ReadHandle *fileR, *fileR2, *fileR3, *fileR4;
58 struct GNUNET_BIO_WriteHandle *fileW, *fileW2, *fileW3, *fileW4;
59 struct GNUNET_CONTAINER_MetaData *metaDataW;
60 struct GNUNET_CONTAINER_MetaData *metaDataR;
61 struct GNUNET_BIO_ReadHandle *fileRNO;
62 struct GNUNET_BIO_WriteHandle *fileWNO;
63 struct GNUNET_CONTAINER_MetaData *metaData;
64 struct GNUNET_CONTAINER_MetaData *metaDataNO;
66 metaData = GNUNET_CONTAINER_meta_data_create ();
67 metaDataNO = GNUNET_CONTAINER_meta_data_create ();
68 metaDataR = GNUNET_CONTAINER_meta_data_create ();
69 metaDataW = GNUNET_CONTAINER_meta_data_create ();
70 GNUNET_CONTAINER_meta_data_add_publication_date (metaDataW);
71 GNUNET_CONTAINER_meta_data_add_publication_date (metaData);
72 GNUNET_assert (GNUNET_OK ==
73 GNUNET_CONTAINER_meta_data_insert (metaData,
74 EXTRACTOR_COMMENT, meta));
77 fileW = GNUNET_BIO_write_open (fileName);
78 GNUNET_assert (NULL != fileW);
79 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW, TESTSTRING));
80 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW, metaDataW));
81 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int64 (fileW, testNumber));
82 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW));
83 fileW2 = GNUNET_BIO_write_open (fileName2);
84 GNUNET_assert (NULL != fileW2);
85 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW2, NULL));
86 fileWNO = GNUNET_BIO_write_open (file);
87 GNUNET_assert (NULL != fileWNO);
88 GNUNET_assert (GNUNET_SYSERR ==
89 GNUNET_BIO_write_string (fileWNO, TESTSTRING));
90 GNUNET_assert (GNUNET_SYSERR ==
91 GNUNET_BIO_write_meta_data (fileWNO, metaDataW));
92 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_write_close (fileWNO));
93 fileW3 = GNUNET_BIO_write_open (fileName3);
94 GNUNET_assert (NULL != fileW3);
95 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data (fileW3, metaData));
96 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW3));
97 fileW4 = GNUNET_BIO_write_open (fileName4);
98 GNUNET_assert (NULL != fileW4);
99 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string (fileW4, ""));
100 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_close (fileW4));
103 fileRNO = GNUNET_BIO_read_open (file);
104 GNUNET_assert (NULL != fileRNO);
105 GNUNET_assert (GNUNET_SYSERR ==
106 GNUNET_BIO_read_string (fileRNO, "Read string error",
107 &readResultString, 200));
108 GNUNET_assert (GNUNET_SYSERR == GNUNET_BIO_read_int64 (fileRNO, &testNum));
109 GNUNET_assert (GNUNET_SYSERR ==
110 GNUNET_BIO_read_meta_data (fileRNO, "Read meta error",
112 fileR = GNUNET_BIO_read_open (fileName);
113 GNUNET_assert (NULL != fileR);
114 GNUNET_assert (GNUNET_OK ==
115 GNUNET_BIO_read_string (fileR, "Read string error",
116 &readResultString, 200));
117 GNUNET_assert (GNUNET_OK ==
118 GNUNET_BIO_read_meta_data (fileR, "Read meta error",
120 GNUNET_assert (GNUNET_YES ==
121 GNUNET_CONTAINER_meta_data_test_equal (metaDataR,
123 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int64 (fileR, &testNum));
124 fileR2 = GNUNET_BIO_read_open (fileName2);
125 GNUNET_assert (NULL != fileR2);
126 GNUNET_assert (GNUNET_SYSERR ==
127 GNUNET_BIO_read_string (fileR2, "Read string error",
128 &readResultString, 200));
129 fileR3 = GNUNET_BIO_read_open (fileName3);
130 GNUNET_assert (NULL != fileR3);
131 GNUNET_assert (GNUNET_SYSERR ==
132 GNUNET_BIO_read_meta_data (fileR3, "Read meta error",
134 fileR4 = GNUNET_BIO_read_open (fileName4);
135 GNUNET_assert (NULL != fileR4);
136 GNUNET_assert (GNUNET_OK ==
137 GNUNET_BIO_read_string (fileR4, "Read string error",
138 &readResultString, 200));
139 GNUNET_assert (GNUNET_SYSERR ==
140 GNUNET_BIO_read_string (fileR4, "Read string error",
141 &readResultString, 0));
142 GNUNET_BIO_read_close (fileR, &msg);
143 GNUNET_BIO_read_close (fileR2, &msg);
144 GNUNET_BIO_read_close (fileR3, &msg);
145 GNUNET_BIO_read_close (fileR4, &msg);
146 GNUNET_CONTAINER_meta_data_destroy (metaDataW);
147 GNUNET_CONTAINER_meta_data_destroy (metaDataNO);
148 GNUNET_CONTAINER_meta_data_destroy (metaDataR);
149 GNUNET_CONTAINER_meta_data_destroy (metaData);
150 GNUNET_free (fileName);
151 GNUNET_free (fileName2);
152 GNUNET_free (fileName3);
153 GNUNET_free (fileName4);