0894b8b9386fbb06821c9fa18cf1c183c1ed7690
[oweals/gnunet.git] / src / fs / test_fs_uri.c
1 /*
2      This file is part of GNUnet.
3      (C) 2003, 2004, 2006, 2007, 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 3, 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 fs/test_fs_uri.c
23  * @brief Test for fs_uri.c
24  * @author Christian Grothoff
25  */
26
27 #include "platform.h"
28 #include "gnunet_util_lib.h"
29 #include "gnunet_fs_service.h"
30 #include "fs.h"
31
32 #define ABORT() { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); return 1; }
33
34 static int
35 testKeyword ()
36 {
37   char *uri;
38   struct GNUNET_FS_Uri *ret;
39   char *emsg;
40
41   if (NULL != (ret = GNUNET_FS_uri_parse ("gnunet://fs/ksk/++", &emsg)))
42     {
43       GNUNET_FS_uri_destroy (ret);
44       ABORT ();
45     }
46   GNUNET_free (emsg);
47   ret = GNUNET_FS_uri_parse ("gnunet://fs/ksk/foo+bar", &emsg);
48   if (ret == NULL)
49     {
50       GNUNET_free (emsg);
51       ABORT ();
52     }
53   if (!GNUNET_FS_uri_test_ksk (ret))
54     {
55       GNUNET_FS_uri_destroy (ret);
56       ABORT ();
57     }
58   if ((2 != ret->data.ksk.keywordCount) ||
59       (0 != strcmp (" foo", ret->data.ksk.keywords[0])) ||
60       (0 != strcmp (" bar", ret->data.ksk.keywords[1])))
61     {
62       GNUNET_FS_uri_destroy (ret);
63       ABORT ();
64     }
65
66   uri = GNUNET_FS_uri_to_string (ret);
67   if (0 != strcmp (uri, "gnunet://fs/ksk/foo+bar"))
68     {
69       GNUNET_free (uri);
70       GNUNET_FS_uri_destroy (ret);
71       ABORT ();
72     }
73   GNUNET_free (uri);
74   GNUNET_FS_uri_destroy (ret);
75   return 0;
76 }
77
78 static int
79 testLocation ()
80 {
81   struct GNUNET_FS_Uri *uri;
82   char *uric;
83   struct GNUNET_FS_Uri *uri2;
84   struct GNUNET_FS_Uri *baseURI;
85   char *emsg;
86   struct GNUNET_CONFIGURATION_Handle *cfg;
87
88   baseURI =
89     GNUNET_FS_uri_parse ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42", &emsg);
90   GNUNET_assert (baseURI != NULL);
91   GNUNET_assert (emsg == NULL);
92   cfg = GNUNET_CONFIGURATION_create ();
93   if (GNUNET_OK !=
94       GNUNET_CONFIGURATION_parse (cfg, "test_fs_uri_data.conf"))
95     {
96       fprintf (stderr, "Failed to parse configuration file\n");
97       GNUNET_FS_uri_destroy (baseURI);
98       GNUNET_CONFIGURATION_destroy (cfg);
99       return 1;
100     }
101   uri = GNUNET_FS_uri_loc_create (baseURI,
102                                   cfg,
103                                   GNUNET_TIME_absolute_get ());
104   if (uri == NULL)
105     {
106       GNUNET_break (0);
107       GNUNET_FS_uri_destroy (baseURI);
108       GNUNET_CONFIGURATION_destroy (cfg);
109       return 1;
110     }
111   if (!GNUNET_FS_uri_test_loc (uri))
112     {
113       GNUNET_break (0);
114       GNUNET_FS_uri_destroy (uri);
115       GNUNET_FS_uri_destroy (baseURI);
116       GNUNET_CONFIGURATION_destroy (cfg);
117       return 1;
118     }
119   uri2 = GNUNET_FS_uri_loc_get_uri (uri);
120   if (!GNUNET_FS_uri_test_equal (baseURI, uri2))
121     {
122       GNUNET_break (0);
123       GNUNET_FS_uri_destroy (uri);
124       GNUNET_FS_uri_destroy (uri2);
125       GNUNET_FS_uri_destroy (baseURI);
126       GNUNET_CONFIGURATION_destroy (cfg);
127       return 1;
128     }
129   GNUNET_FS_uri_destroy (uri2);
130   GNUNET_FS_uri_destroy (baseURI);
131   uric = GNUNET_FS_uri_to_string (uri);
132 #if 0
133   /* not for the faint of heart: */
134   printf ("URI: `%s'\n", uric);
135 #endif
136   uri2 = GNUNET_FS_uri_parse (uric, &emsg);
137   GNUNET_free (uric);
138   if (uri2 == NULL)
139     {
140       GNUNET_break (0);
141       GNUNET_FS_uri_destroy (uri);
142       GNUNET_CONFIGURATION_destroy (cfg);
143       GNUNET_free (emsg);
144       return 1;
145     }
146   GNUNET_assert (NULL == emsg);
147   if (GNUNET_YES != GNUNET_FS_uri_test_equal (uri, uri2))
148     {
149       GNUNET_break (0);
150       GNUNET_FS_uri_destroy (uri);
151       GNUNET_FS_uri_destroy (uri2);
152       GNUNET_CONFIGURATION_destroy (cfg);
153       return 1;
154     }
155   GNUNET_FS_uri_destroy (uri2);
156   GNUNET_FS_uri_destroy (uri);
157   GNUNET_CONFIGURATION_destroy (cfg);
158   return 0;
159 }
160
161 static int
162 testNamespace (int i)
163 {
164   char *uri;
165   struct GNUNET_FS_Uri *ret;
166   char *emsg;
167
168   if (NULL !=
169       (ret = GNUNET_FS_uri_parse ("gnunet://fs/sks/D1KJS9H2A82Q65VKQ0ML3RFU6U1D3VUK", &emsg)))
170     {
171       GNUNET_FS_uri_destroy (ret);
172       ABORT ();
173     }
174   GNUNET_free (emsg);
175   if (NULL !=
176       (ret = GNUNET_FS_uri_parse ("gnunet://fs/sks/D1KJS9H2A82Q65VKQ0ML3RFU6U1D3V/test", &emsg)))
177     {
178       GNUNET_FS_uri_destroy (ret);
179       ABORT ();    
180     }
181   GNUNET_free (emsg);
182   if (NULL != (ret = GNUNET_FS_uri_parse ("gnunet://fs/sks/test", &emsg)))
183     {
184       GNUNET_FS_uri_destroy (ret);
185       ABORT ();
186     }
187   GNUNET_free (emsg);
188   ret =
189     GNUNET_FS_uri_parse ("gnunet://fs/sks/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820/test", &emsg);
190   if (ret == NULL)
191     {
192       GNUNET_free (emsg);
193       ABORT ();
194     }
195   if (GNUNET_FS_uri_test_ksk (ret))
196     {
197       GNUNET_FS_uri_destroy (ret);
198       ABORT ();
199     }
200   if (!GNUNET_FS_uri_test_sks (ret))
201     {
202       GNUNET_FS_uri_destroy (ret);
203       ABORT ();
204     }
205
206   uri = GNUNET_FS_uri_to_string (ret);
207   if (0 != strcmp (uri,
208                    "gnunet://fs/sks/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820/test"))
209     {
210       GNUNET_FS_uri_destroy (ret);
211       GNUNET_free (uri);
212       ABORT ();
213     }
214   GNUNET_free (uri);
215   GNUNET_FS_uri_destroy (ret);
216   return 0;
217 }
218
219 static int
220 testFile (int i)
221 {
222   char *uri;
223   struct GNUNET_FS_Uri *ret;
224   char *emsg;
225
226   if (NULL !=
227       (ret = GNUNET_FS_uri_parse ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H00000440000.42", &emsg)))
228     {
229       GNUNET_FS_uri_destroy (ret);
230       ABORT ();
231     }
232   GNUNET_free (emsg);
233   if (NULL !=
234       (ret = GNUNET_FS_uri_parse ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000", &emsg)))
235     {
236       GNUNET_FS_uri_destroy (ret);
237       ABORT ();
238     }
239   GNUNET_free (emsg);
240   if (NULL !=
241       (ret = GNUNET_FS_uri_parse ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.FGH", &emsg)))
242     {
243       GNUNET_FS_uri_destroy (ret);
244       ABORT ();
245     }
246   GNUNET_free (emsg);
247   ret =
248     GNUNET_FS_uri_parse ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42", &emsg);
249   if (ret == NULL)
250     {
251       GNUNET_free (emsg);
252       ABORT ();
253     }
254   if (GNUNET_FS_uri_test_ksk (ret))
255     {
256       GNUNET_FS_uri_destroy (ret);
257       ABORT ();
258     }
259   if (GNUNET_FS_uri_test_sks (ret))
260     {
261       GNUNET_FS_uri_destroy (ret);
262       ABORT ();
263     }
264   if (GNUNET_ntohll (ret->data.chk.file_length) != 42)
265     {
266       GNUNET_FS_uri_destroy (ret);
267       ABORT ();
268     }
269
270   uri = GNUNET_FS_uri_to_string (ret);
271   if (0 != strcmp (uri,
272                    "gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42"))
273     {
274       GNUNET_free (uri);
275       GNUNET_FS_uri_destroy (ret);
276       ABORT ();
277     }
278   GNUNET_free (uri);
279   GNUNET_FS_uri_destroy (ret);
280   return 0;
281 }
282
283 int
284 main (int argc, char *argv[])
285 {
286   int failureCount = 0;
287   int i;
288
289   GNUNET_log_setup ("test_fs_uri", 
290 #if VERBOSE
291                     "DEBUG",
292 #else
293                     "WARNING",
294 #endif
295                     NULL);
296   GNUNET_CRYPTO_random_disable_entropy_gathering ();
297   failureCount += testKeyword ();
298   failureCount += testLocation ();
299   for (i = 0; i < 255; i++)
300     {
301       /* fprintf (stderr, "."); */
302       failureCount += testNamespace (i);
303       failureCount += testFile (i);
304     }
305   /* fprintf (stderr, "\n"); */
306   GNUNET_DISK_directory_remove ("/tmp/gnunet-test-fs-uri");
307   if (failureCount != 0)
308     return 1;
309   return 0;
310 }
311
312 /* end of test_fs_uri.c */