-towards block plugin for mesh
[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  * @file fs/test_fs_uri.c
22  * @brief Test for fs_uri.c
23  * @author Christian Grothoff
24  */
25 #include "platform.h"
26 #include "gnunet_util_lib.h"
27 #include "gnunet_fs_service.h"
28 #include "fs_api.h"
29
30
31 static int
32 testKeyword ()
33 {
34   char *uri;
35   struct GNUNET_FS_Uri *ret;
36   char *emsg;
37
38   if (NULL != (ret = GNUNET_FS_uri_parse ("gnunet://fs/ksk/++", &emsg)))
39   {
40     GNUNET_FS_uri_destroy (ret);
41     GNUNET_assert (0);
42   }
43   GNUNET_free (emsg);
44   ret = GNUNET_FS_uri_parse ("gnunet://fs/ksk/foo+bar", &emsg);
45   if (ret == NULL)
46   {
47     GNUNET_free (emsg);
48     GNUNET_assert (0);
49   }
50   if (!GNUNET_FS_uri_test_ksk (ret))
51   {
52     GNUNET_FS_uri_destroy (ret);
53     GNUNET_assert (0);
54   }
55   if ((2 != ret->data.ksk.keywordCount) ||
56       (0 != strcmp (" foo", ret->data.ksk.keywords[0])) ||
57       (0 != strcmp (" bar", ret->data.ksk.keywords[1])))
58   {
59     GNUNET_FS_uri_destroy (ret);
60     GNUNET_assert (0);
61   }
62
63   uri = GNUNET_FS_uri_to_string (ret);
64   if (0 != strcmp (uri, "gnunet://fs/ksk/foo+bar"))
65   {
66     GNUNET_free (uri);
67     GNUNET_FS_uri_destroy (ret);
68     GNUNET_assert (0);
69   }
70   GNUNET_free (uri);
71   GNUNET_FS_uri_destroy (ret);
72   return 0;
73 }
74
75
76 static int
77 testLocation ()
78 {
79   struct GNUNET_FS_Uri *uri;
80   char *uric;
81   struct GNUNET_FS_Uri *uri2;
82   struct GNUNET_FS_Uri *baseURI;
83   char *emsg;
84   struct GNUNET_CONFIGURATION_Handle *cfg;
85
86   baseURI =
87       GNUNET_FS_uri_parse
88       ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42",
89        &emsg);
90   GNUNET_assert (baseURI != NULL);
91   GNUNET_assert (emsg == NULL);
92   cfg = GNUNET_CONFIGURATION_create ();
93   if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg, "test_fs_uri_data.conf"))
94   {
95     FPRINTF (stderr, "%s",  "Failed to parse configuration file\n");
96     GNUNET_FS_uri_destroy (baseURI);
97     GNUNET_CONFIGURATION_destroy (cfg);
98     return 1;
99   }
100   uri = GNUNET_FS_uri_loc_create (baseURI, cfg, GNUNET_TIME_absolute_get ());
101   if (uri == NULL)
102   {
103     GNUNET_break (0);
104     GNUNET_FS_uri_destroy (baseURI);
105     GNUNET_CONFIGURATION_destroy (cfg);
106     return 1;
107   }
108   if (!GNUNET_FS_uri_test_loc (uri))
109   {
110     GNUNET_break (0);
111     GNUNET_FS_uri_destroy (uri);
112     GNUNET_FS_uri_destroy (baseURI);
113     GNUNET_CONFIGURATION_destroy (cfg);
114     return 1;
115   }
116   uri2 = GNUNET_FS_uri_loc_get_uri (uri);
117   if (!GNUNET_FS_uri_test_equal (baseURI, uri2))
118   {
119     GNUNET_break (0);
120     GNUNET_FS_uri_destroy (uri);
121     GNUNET_FS_uri_destroy (uri2);
122     GNUNET_FS_uri_destroy (baseURI);
123     GNUNET_CONFIGURATION_destroy (cfg);
124     return 1;
125   }
126   GNUNET_FS_uri_destroy (uri2);
127   GNUNET_FS_uri_destroy (baseURI);
128   uric = GNUNET_FS_uri_to_string (uri);
129 #if 0
130   /* not for the faint of heart: */
131   printf ("URI: `%s'\n", uric);
132 #endif
133   uri2 = GNUNET_FS_uri_parse (uric, &emsg);
134   GNUNET_free (uric);
135   if (uri2 == NULL)
136   {
137     GNUNET_break (0);
138     GNUNET_FS_uri_destroy (uri);
139     GNUNET_CONFIGURATION_destroy (cfg);
140     GNUNET_free (emsg);
141     return 1;
142   }
143   GNUNET_assert (NULL == emsg);
144   if (GNUNET_YES != GNUNET_FS_uri_test_equal (uri, uri2))
145   {
146     GNUNET_break (0);
147     GNUNET_FS_uri_destroy (uri);
148     GNUNET_FS_uri_destroy (uri2);
149     GNUNET_CONFIGURATION_destroy (cfg);
150     return 1;
151   }
152   GNUNET_FS_uri_destroy (uri2);
153   GNUNET_FS_uri_destroy (uri);
154   GNUNET_CONFIGURATION_destroy (cfg);
155   return 0;
156 }
157
158
159 static int
160 testNamespace (int i)
161 {
162   char *uri;
163   struct GNUNET_FS_Uri *ret;
164   char *emsg;
165
166   if (NULL !=
167       (ret =
168        GNUNET_FS_uri_parse ("gnunet://fs/sks/D1KJS9H2A82Q65VKQ0ML3RFU6U1D3VUK",
169                             &emsg)))
170   {
171     GNUNET_FS_uri_destroy (ret);
172     GNUNET_assert (0);
173   }
174   GNUNET_free (emsg);
175   if (NULL !=
176       (ret =
177        GNUNET_FS_uri_parse
178        ("gnunet://fs/sks/D1KJS9H2A82Q65VKQ0ML3RFU6U1D3V/test", &emsg)))
179   {
180     GNUNET_FS_uri_destroy (ret);
181     GNUNET_assert (0);
182   }
183   GNUNET_free (emsg);
184   if (NULL != (ret = GNUNET_FS_uri_parse ("gnunet://fs/sks/test", &emsg)))
185   {
186     GNUNET_FS_uri_destroy (ret);
187     GNUNET_assert (0);
188   }
189   GNUNET_free (emsg);
190   ret =
191       GNUNET_FS_uri_parse
192       ("gnunet://fs/sks/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820/test",
193        &emsg);
194   if (ret == NULL)
195   {
196     GNUNET_free (emsg);
197     GNUNET_assert (0);
198   }
199   if (GNUNET_FS_uri_test_ksk (ret))
200   {
201     GNUNET_FS_uri_destroy (ret);
202     GNUNET_assert (0);
203   }
204   if (!GNUNET_FS_uri_test_sks (ret))
205   {
206     GNUNET_FS_uri_destroy (ret);
207     GNUNET_assert (0);
208   }
209
210   uri = GNUNET_FS_uri_to_string (ret);
211   if (0 !=
212       strcmp (uri,
213               "gnunet://fs/sks/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820/test"))
214   {
215     GNUNET_FS_uri_destroy (ret);
216     GNUNET_free (uri);
217     GNUNET_assert (0);
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     GNUNET_assert (0);
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     GNUNET_assert (0);
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     GNUNET_assert (0);
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     GNUNET_assert (0);
269   }
270   if (GNUNET_FS_uri_test_ksk (ret))
271   {
272     GNUNET_FS_uri_destroy (ret);
273     GNUNET_assert (0);
274   }
275   if (GNUNET_FS_uri_test_sks (ret))
276   {
277     GNUNET_FS_uri_destroy (ret);
278     GNUNET_assert (0);
279   }
280   if (GNUNET_ntohll (ret->data.chk.file_length) != 42)
281   {
282     GNUNET_FS_uri_destroy (ret);
283     GNUNET_assert (0);
284   }
285
286   uri = GNUNET_FS_uri_to_string (ret);
287   if (0 !=
288       strcmp (uri,
289               "gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42"))
290   {
291     GNUNET_free (uri);
292     GNUNET_FS_uri_destroy (ret);
293     GNUNET_assert (0);
294   }
295   GNUNET_free (uri);
296   GNUNET_FS_uri_destroy (ret);
297   return 0;
298 }
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                     "WARNING",
309                     NULL);
310   GNUNET_CRYPTO_random_disable_entropy_gathering ();
311   failureCount += testKeyword ();
312   failureCount += testLocation ();
313   for (i = 0; i < 255; i++)
314   {
315     /* FPRINTF (stderr, "%s",  "."); */
316     failureCount += testNamespace (i);
317     failureCount += testFile (i);
318   }
319   /* FPRINTF (stderr, "%s",  "\n"); */
320   GNUNET_DISK_directory_remove ("/tmp/gnunet-test-fs-uri");
321   if (failureCount != 0)
322     return 1;
323   return 0;
324 }
325
326 /* end of test_fs_uri.c */