89.1%
[oweals/gnunet.git] / src / util / test_bio.c
1 /*
2      This file is part of GNUnet.
3      (C) 2009 Christian Grothoff (and other contributing authors)
4
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.
9
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.
14
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.
19 */
20
21 /**
22  * @file util/test_bio.c
23  * @brief testcase for the buffered IO module
24  * @author Ji Lu
25  */
26
27
28 #include "platform.h"
29 #include "gnunet_util_lib.h"
30 #define TESTSTRING "testString"
31 #define TESTNUMBER64 100000L
32
33 int
34 main (int argc, char *argv[])
35 {
36
37   char *readResultString;
38   int64_t testNumber = (int64_t) TESTNUMBER64;
39   int64_t testNum;
40   char *msg;
41   static char file[102400];
42   static char meta[1024 * 1024 * 10];
43   int i, j;
44   for (i = 0; i < 102400; i++)
45     {
46       file[i] = 'a';
47     }
48   for (j = 0; j < 1024 * 1024 * 10; j++)
49     {
50       meta[j] = 'b';
51     }
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");
56
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;
65
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));
75
76 ///////////write
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));
101
102 ////////////read
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",
111                                             &metaDataNO));
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",
119                                             &metaDataR));
120   GNUNET_assert (GNUNET_YES ==
121                  GNUNET_CONTAINER_meta_data_test_equal (metaDataR,
122                                                         metaDataW));
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",
133                                             &metaDataR));
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);
154
155
156   return 0;
157
158 }                               /* end of main */