indentation
[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
90       ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42",
91        &emsg);
92   GNUNET_assert (baseURI != NULL);
93   GNUNET_assert (emsg == NULL);
94   cfg = GNUNET_CONFIGURATION_create ();
95   if (GNUNET_OK != GNUNET_CONFIGURATION_parse (cfg, "test_fs_uri_data.conf"))
96   {
97     fprintf (stderr, "Failed to parse configuration file\n");
98     GNUNET_FS_uri_destroy (baseURI);
99     GNUNET_CONFIGURATION_destroy (cfg);
100     return 1;
101   }
102   uri = GNUNET_FS_uri_loc_create (baseURI, cfg, GNUNET_TIME_absolute_get ());
103   if (uri == NULL)
104   {
105     GNUNET_break (0);
106     GNUNET_FS_uri_destroy (baseURI);
107     GNUNET_CONFIGURATION_destroy (cfg);
108     return 1;
109   }
110   if (!GNUNET_FS_uri_test_loc (uri))
111   {
112     GNUNET_break (0);
113     GNUNET_FS_uri_destroy (uri);
114     GNUNET_FS_uri_destroy (baseURI);
115     GNUNET_CONFIGURATION_destroy (cfg);
116     return 1;
117   }
118   uri2 = GNUNET_FS_uri_loc_get_uri (uri);
119   if (!GNUNET_FS_uri_test_equal (baseURI, uri2))
120   {
121     GNUNET_break (0);
122     GNUNET_FS_uri_destroy (uri);
123     GNUNET_FS_uri_destroy (uri2);
124     GNUNET_FS_uri_destroy (baseURI);
125     GNUNET_CONFIGURATION_destroy (cfg);
126     return 1;
127   }
128   GNUNET_FS_uri_destroy (uri2);
129   GNUNET_FS_uri_destroy (baseURI);
130   uric = GNUNET_FS_uri_to_string (uri);
131 #if 0
132   /* not for the faint of heart: */
133   printf ("URI: `%s'\n", uric);
134 #endif
135   uri2 = GNUNET_FS_uri_parse (uric, &emsg);
136   GNUNET_free (uric);
137   if (uri2 == NULL)
138   {
139     GNUNET_break (0);
140     GNUNET_FS_uri_destroy (uri);
141     GNUNET_CONFIGURATION_destroy (cfg);
142     GNUNET_free (emsg);
143     return 1;
144   }
145   GNUNET_assert (NULL == emsg);
146   if (GNUNET_YES != GNUNET_FS_uri_test_equal (uri, uri2))
147   {
148     GNUNET_break (0);
149     GNUNET_FS_uri_destroy (uri);
150     GNUNET_FS_uri_destroy (uri2);
151     GNUNET_CONFIGURATION_destroy (cfg);
152     return 1;
153   }
154   GNUNET_FS_uri_destroy (uri2);
155   GNUNET_FS_uri_destroy (uri);
156   GNUNET_CONFIGURATION_destroy (cfg);
157   return 0;
158 }
159
160 static int
161 testNamespace (int i)
162 {
163   char *uri;
164   struct GNUNET_FS_Uri *ret;
165   char *emsg;
166
167   if (NULL !=
168       (ret =
169        GNUNET_FS_uri_parse ("gnunet://fs/sks/D1KJS9H2A82Q65VKQ0ML3RFU6U1D3VUK",
170                             &emsg)))
171   {
172     GNUNET_FS_uri_destroy (ret);
173     ABORT ();
174   }
175   GNUNET_free (emsg);
176   if (NULL !=
177       (ret =
178        GNUNET_FS_uri_parse
179        ("gnunet://fs/sks/D1KJS9H2A82Q65VKQ0ML3RFU6U1D3V/test", &emsg)))
180   {
181     GNUNET_FS_uri_destroy (ret);
182     ABORT ();
183   }
184   GNUNET_free (emsg);
185   if (NULL != (ret = GNUNET_FS_uri_parse ("gnunet://fs/sks/test", &emsg)))
186   {
187     GNUNET_FS_uri_destroy (ret);
188     ABORT ();
189   }
190   GNUNET_free (emsg);
191   ret =
192       GNUNET_FS_uri_parse
193       ("gnunet://fs/sks/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820/test",
194        &emsg);
195   if (ret == NULL)
196   {
197     GNUNET_free (emsg);
198     ABORT ();
199   }
200   if (GNUNET_FS_uri_test_ksk (ret))
201   {
202     GNUNET_FS_uri_destroy (ret);
203     ABORT ();
204   }
205   if (!GNUNET_FS_uri_test_sks (ret))
206   {
207     GNUNET_FS_uri_destroy (ret);
208     ABORT ();
209   }
210
211   uri = GNUNET_FS_uri_to_string (ret);
212   if (0 != strcmp (uri,
213                    "gnunet://fs/sks/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820/test"))
214   {
215     GNUNET_FS_uri_destroy (ret);
216     GNUNET_free (uri);
217     ABORT ();
218   }
219   GNUNET_free (uri);
220   GNUNET_FS_uri_destroy (ret);
221   return 0;
222 }
223
224 static int
225 testFile (int i)
226 {
227   char *uri;
228   struct GNUNET_FS_Uri *ret;
229   char *emsg;
230
231   if (NULL !=
232       (ret =
233        GNUNET_FS_uri_parse
234        ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H00000440000.42",
235         &emsg)))
236   {
237     GNUNET_FS_uri_destroy (ret);
238     ABORT ();
239   }
240   GNUNET_free (emsg);
241   if (NULL !=
242       (ret =
243        GNUNET_FS_uri_parse
244        ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000",
245         &emsg)))
246   {
247     GNUNET_FS_uri_destroy (ret);
248     ABORT ();
249   }
250   GNUNET_free (emsg);
251   if (NULL !=
252       (ret =
253        GNUNET_FS_uri_parse
254        ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.FGH",
255         &emsg)))
256   {
257     GNUNET_FS_uri_destroy (ret);
258     ABORT ();
259   }
260   GNUNET_free (emsg);
261   ret =
262       GNUNET_FS_uri_parse
263       ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42",
264        &emsg);
265   if (ret == NULL)
266   {
267     GNUNET_free (emsg);
268     ABORT ();
269   }
270   if (GNUNET_FS_uri_test_ksk (ret))
271   {
272     GNUNET_FS_uri_destroy (ret);
273     ABORT ();
274   }
275   if (GNUNET_FS_uri_test_sks (ret))
276   {
277     GNUNET_FS_uri_destroy (ret);
278     ABORT ();
279   }
280   if (GNUNET_ntohll (ret->data.chk.file_length) != 42)
281   {
282     GNUNET_FS_uri_destroy (ret);
283     ABORT ();
284   }
285
286   uri = GNUNET_FS_uri_to_string (ret);
287   if (0 != strcmp (uri,
288                    "gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42"))
289   {
290     GNUNET_free (uri);
291     GNUNET_FS_uri_destroy (ret);
292     ABORT ();
293   }
294   GNUNET_free (uri);
295   GNUNET_FS_uri_destroy (ret);
296   return 0;
297 }
298
299 int
300 main (int argc, char *argv[])
301 {
302   int failureCount = 0;
303   int i;
304
305   GNUNET_log_setup ("test_fs_uri",
306 #if VERBOSE
307                     "DEBUG",
308 #else
309                     "WARNING",
310 #endif
311                     NULL);
312   GNUNET_CRYPTO_random_disable_entropy_gathering ();
313   failureCount += testKeyword ();
314   failureCount += testLocation ();
315   for (i = 0; i < 255; i++)
316   {
317     /* fprintf (stderr, "."); */
318     failureCount += testNamespace (i);
319     failureCount += testFile (i);
320   }
321   /* fprintf (stderr, "\n"); */
322   GNUNET_DISK_directory_remove ("/tmp/gnunet-test-fs-uri");
323   if (failureCount != 0)
324     return 1;
325   return 0;
326 }
327
328 /* end of test_fs_uri.c */