c673fc11f3485c67b7e50d417814803132d5a1a6
[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     char file[102400];
42     char meta[1024*1024*10];
43     int i,j;
44     for(i=0;i<102400;i++){
45         file[i]='a';
46     }
47     for(j=0;j<1024*1024*10;j++){
48         meta[j]='b';
49     }
50         char* fileName = GNUNET_DISK_mktemp ("gnunet_bio");
51         char* fileName2 = GNUNET_DISK_mktemp ("gnunet_zwei_bio");
52         char* fileName3 = GNUNET_DISK_mktemp ("gnunet_drei_bio");
53         char* fileName4 = GNUNET_DISK_mktemp ("gnunet_vier_bio");
54
55         struct GNUNET_BIO_ReadHandle *fileR,*fileR2,*fileR3,*fileR4;
56         struct GNUNET_BIO_WriteHandle *fileW,*fileW2,*fileW3,*fileW4;
57         struct GNUNET_CONTAINER_MetaData *metaDataW;
58         struct GNUNET_CONTAINER_MetaData *metaDataR;
59         struct GNUNET_BIO_ReadHandle *fileRNO;
60         struct GNUNET_BIO_WriteHandle *fileWNO;
61         struct GNUNET_CONTAINER_MetaData *metaData;
62         struct GNUNET_CONTAINER_MetaData *metaDataNO;
63
64         metaData = GNUNET_CONTAINER_meta_data_create();
65         metaDataNO = GNUNET_CONTAINER_meta_data_create();
66         metaDataR = GNUNET_CONTAINER_meta_data_create();
67         metaDataW = GNUNET_CONTAINER_meta_data_create();
68         GNUNET_CONTAINER_meta_data_add_publication_date(metaDataW);
69         GNUNET_CONTAINER_meta_data_add_publication_date(metaData);
70         GNUNET_assert(GNUNET_OK == GNUNET_CONTAINER_meta_data_insert(metaData,EXTRACTOR_COMMENT,meta));
71
72 ///////////write
73         fileW = GNUNET_BIO_write_open(fileName);
74         GNUNET_assert(NULL != fileW);
75         GNUNET_assert(GNUNET_OK == GNUNET_BIO_write_string(fileW, TESTSTRING));
76         GNUNET_assert(GNUNET_OK == GNUNET_BIO_write_meta_data(fileW,metaDataW));
77         GNUNET_assert(GNUNET_OK == GNUNET_BIO_write_int64(fileW,testNumber));
78         GNUNET_assert(GNUNET_OK == GNUNET_BIO_write_close(fileW));
79         fileW2 = GNUNET_BIO_write_open(fileName2);
80         GNUNET_assert(NULL != fileW2);
81         GNUNET_assert(GNUNET_OK == GNUNET_BIO_write_string(fileW2,NULL));
82         fileWNO = GNUNET_BIO_write_open(file);
83         fileW3 = GNUNET_BIO_write_open(fileName3);
84         GNUNET_assert(NULL != fileW3);
85         GNUNET_assert(GNUNET_OK == GNUNET_BIO_write_meta_data(fileW3,metaData));
86         fileW4 = GNUNET_BIO_write_open(fileName4);
87         GNUNET_assert(NULL != fileW4);
88         GNUNET_assert(GNUNET_OK == GNUNET_BIO_write_string(fileW4,""));
89         GNUNET_assert(NULL != fileWNO);
90         GNUNET_assert(GNUNET_SYSERR == GNUNET_BIO_write_string(fileWNO, TESTSTRING));
91         GNUNET_assert(GNUNET_SYSERR == GNUNET_BIO_write_meta_data(fileWNO,metaDataW));
92         GNUNET_assert(GNUNET_SYSERR == GNUNET_BIO_write_close(fileWNO));
93
94 ////////////read
95         fileRNO = GNUNET_BIO_read_open(file);
96         GNUNET_assert(NULL != fileRNO);
97         GNUNET_assert(GNUNET_SYSERR == GNUNET_BIO_read_string(fileRNO, "Read string error", &readResultString, 200));
98         GNUNET_assert(GNUNET_SYSERR == GNUNET_BIO_read_int64(fileRNO, &testNum));
99         GNUNET_assert(GNUNET_SYSERR == GNUNET_BIO_read_meta_data(fileRNO,"Read meta error", &metaDataNO));
100         fileR = GNUNET_BIO_read_open(fileName);
101         GNUNET_assert(NULL != fileR);
102         GNUNET_assert(GNUNET_OK == GNUNET_BIO_read_string(fileR, "Read string error", &readResultString, 200));
103         GNUNET_assert(GNUNET_OK == GNUNET_BIO_read_meta_data(fileR, "Read meta error", &metaDataR));
104         GNUNET_assert(GNUNET_YES == GNUNET_CONTAINER_meta_data_test_equal(metaDataR,metaDataW));
105     GNUNET_assert(GNUNET_OK == GNUNET_BIO_read_int64(fileR, &testNum));
106         fileR2 = GNUNET_BIO_read_open(fileName2);
107     GNUNET_assert(NULL != fileR2);
108     GNUNET_assert(GNUNET_SYSERR == GNUNET_BIO_read_string(fileR2, "Read string error", &readResultString, 200));
109         fileR3 = GNUNET_BIO_read_open(fileName3);
110     GNUNET_assert(NULL != fileR3);
111     GNUNET_assert(GNUNET_SYSERR == GNUNET_BIO_read_meta_data(fileR3, "Read meta error", &metaDataR));
112     fileR4 = GNUNET_BIO_read_open(fileName4);
113     GNUNET_assert(NULL != fileR4);
114     GNUNET_assert(GNUNET_OK == GNUNET_BIO_read_string(fileR4, "Read string error", &readResultString, 200));
115     GNUNET_BIO_read_close(fileR,&msg);
116     GNUNET_BIO_read_close(fileR2,&msg);
117     GNUNET_BIO_read_close(fileR3,&msg);
118     GNUNET_BIO_read_close(fileR4,&msg);
119         GNUNET_CONTAINER_meta_data_destroy(metaDataW);
120         GNUNET_CONTAINER_meta_data_destroy(metaDataNO);
121         GNUNET_CONTAINER_meta_data_destroy(metaDataR);
122         GNUNET_CONTAINER_meta_data_destroy(metaData);
123     GNUNET_free(fileName);
124     GNUNET_free(fileName2);
125     GNUNET_free(fileName3);
126     GNUNET_free(fileName4);
127
128
129     return 0;
130
131 }                               /* end of main */