-not all uris are ksks
[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_api.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_load (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 !=
213       strcmp (uri,
214               "gnunet://fs/sks/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820/test"))
215   {
216     GNUNET_FS_uri_destroy (ret);
217     GNUNET_free (uri);
218     ABORT ();
219   }
220   GNUNET_free (uri);
221   GNUNET_FS_uri_destroy (ret);
222   return 0;
223 }
224
225 static int
226 testFile (int i)
227 {
228   char *uri;
229   struct GNUNET_FS_Uri *ret;
230   char *emsg;
231
232   if (NULL !=
233       (ret =
234        GNUNET_FS_uri_parse
235        ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H00000440000.42",
236         &emsg)))
237   {
238     GNUNET_FS_uri_destroy (ret);
239     ABORT ();
240   }
241   GNUNET_free (emsg);
242   if (NULL !=
243       (ret =
244        GNUNET_FS_uri_parse
245        ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000",
246         &emsg)))
247   {
248     GNUNET_FS_uri_destroy (ret);
249     ABORT ();
250   }
251   GNUNET_free (emsg);
252   if (NULL !=
253       (ret =
254        GNUNET_FS_uri_parse
255        ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.FGH",
256         &emsg)))
257   {
258     GNUNET_FS_uri_destroy (ret);
259     ABORT ();
260   }
261   GNUNET_free (emsg);
262   ret =
263       GNUNET_FS_uri_parse
264       ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42",
265        &emsg);
266   if (ret == NULL)
267   {
268     GNUNET_free (emsg);
269     ABORT ();
270   }
271   if (GNUNET_FS_uri_test_ksk (ret))
272   {
273     GNUNET_FS_uri_destroy (ret);
274     ABORT ();
275   }
276   if (GNUNET_FS_uri_test_sks (ret))
277   {
278     GNUNET_FS_uri_destroy (ret);
279     ABORT ();
280   }
281   if (GNUNET_ntohll (ret->data.chk.file_length) != 42)
282   {
283     GNUNET_FS_uri_destroy (ret);
284     ABORT ();
285   }
286
287   uri = GNUNET_FS_uri_to_string (ret);
288   if (0 !=
289       strcmp (uri,
290               "gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42"))
291   {
292     GNUNET_free (uri);
293     GNUNET_FS_uri_destroy (ret);
294     ABORT ();
295   }
296   GNUNET_free (uri);
297   GNUNET_FS_uri_destroy (ret);
298   return 0;
299 }
300
301 int
302 main (int argc, char *argv[])
303 {
304   int failureCount = 0;
305   int i;
306
307   GNUNET_log_setup ("test_fs_uri",
308 #if VERBOSE
309                     "DEBUG",
310 #else
311                     "WARNING",
312 #endif
313                     NULL);
314   GNUNET_CRYPTO_random_disable_entropy_gathering ();
315   failureCount += testKeyword ();
316   failureCount += testLocation ();
317   for (i = 0; i < 255; i++)
318   {
319     /* fprintf (stderr, "."); */
320     failureCount += testNamespace (i);
321     failureCount += testFile (i);
322   }
323   /* fprintf (stderr, "\n"); */
324   GNUNET_DISK_directory_remove ("/tmp/gnunet-test-fs-uri");
325   if (failureCount != 0)
326     return 1;
327   return 0;
328 }
329
330 /* end of test_fs_uri.c */