- Remove printf, use GNUNET_log INFO
[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   struct GNUNET_PseudonymHandle *ph;
166   struct GNUNET_PseudonymIdentifier id;
167   char buf[1024];
168   char ubuf[1024];
169   char *sret;
170
171   if (NULL !=
172       (ret =
173        GNUNET_FS_uri_parse ("gnunet://fs/sks/D1KJS9H2A82Q65VKQ0ML3RFU6U1D3VUK",
174                             &emsg)))
175   {
176     GNUNET_FS_uri_destroy (ret);
177     GNUNET_assert (0);
178   }
179   GNUNET_free (emsg);
180   if (NULL !=
181       (ret =
182        GNUNET_FS_uri_parse
183        ("gnunet://fs/sks/D1KJS9H2A82Q65VKQ0ML3RFU6U1D3V/test", &emsg)))
184   {
185     GNUNET_FS_uri_destroy (ret);
186     GNUNET_assert (0);
187   }
188   GNUNET_free (emsg);
189   if (NULL != (ret = GNUNET_FS_uri_parse ("gnunet://fs/sks/test", &emsg)))
190   {
191     GNUNET_FS_uri_destroy (ret);
192     GNUNET_assert (0);
193   }
194   GNUNET_free (emsg);
195   ph = GNUNET_PSEUDONYM_create (NULL);
196   GNUNET_PSEUDONYM_get_identifier (ph, &id);
197   sret = GNUNET_STRINGS_data_to_string (&id, sizeof (id),
198                                         ubuf, sizeof (ubuf) - 1);
199   GNUNET_assert (NULL != sret);
200   sret[0] = '\0';
201   GNUNET_snprintf (buf, sizeof (buf),
202                    "gnunet://fs/sks/%s/test",
203                    ubuf);
204   ret = GNUNET_FS_uri_parse (buf, &emsg);
205   if (NULL == ret)
206   {
207     GNUNET_free (emsg);
208     GNUNET_assert (0);
209   }
210   if (GNUNET_FS_uri_test_ksk (ret))
211   {
212     GNUNET_FS_uri_destroy (ret);
213     GNUNET_assert (0);
214   }
215   if (!GNUNET_FS_uri_test_sks (ret))
216   {
217     GNUNET_FS_uri_destroy (ret);
218     GNUNET_assert (0);
219   }
220
221   uri = GNUNET_FS_uri_to_string (ret);
222   if (0 !=
223       strcmp (uri,
224               buf))
225   {
226     GNUNET_FS_uri_destroy (ret);
227     GNUNET_free (uri);
228     GNUNET_assert (0);
229   }
230   GNUNET_free (uri);
231   GNUNET_FS_uri_destroy (ret);
232   return 0;
233 }
234
235 static int
236 testFile (int i)
237 {
238   char *uri;
239   struct GNUNET_FS_Uri *ret;
240   char *emsg;
241
242   if (NULL !=
243       (ret =
244        GNUNET_FS_uri_parse
245        ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H00000440000.42",
246         &emsg)))
247   {
248     GNUNET_FS_uri_destroy (ret);
249     GNUNET_assert (0);
250   }
251   GNUNET_free (emsg);
252   if (NULL !=
253       (ret =
254        GNUNET_FS_uri_parse
255        ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000",
256         &emsg)))
257   {
258     GNUNET_FS_uri_destroy (ret);
259     GNUNET_assert (0);
260   }
261   GNUNET_free (emsg);
262   if (NULL !=
263       (ret =
264        GNUNET_FS_uri_parse
265        ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.FGH",
266         &emsg)))
267   {
268     GNUNET_FS_uri_destroy (ret);
269     GNUNET_assert (0);
270   }
271   GNUNET_free (emsg);
272   ret =
273       GNUNET_FS_uri_parse
274       ("gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42",
275        &emsg);
276   if (ret == NULL)
277   {
278     GNUNET_free (emsg);
279     GNUNET_assert (0);
280   }
281   if (GNUNET_FS_uri_test_ksk (ret))
282   {
283     GNUNET_FS_uri_destroy (ret);
284     GNUNET_assert (0);
285   }
286   if (GNUNET_FS_uri_test_sks (ret))
287   {
288     GNUNET_FS_uri_destroy (ret);
289     GNUNET_assert (0);
290   }
291   if (GNUNET_ntohll (ret->data.chk.file_length) != 42)
292   {
293     GNUNET_FS_uri_destroy (ret);
294     GNUNET_assert (0);
295   }
296
297   uri = GNUNET_FS_uri_to_string (ret);
298   if (0 !=
299       strcmp (uri,
300               "gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.42"))
301   {
302     GNUNET_free (uri);
303     GNUNET_FS_uri_destroy (ret);
304     GNUNET_assert (0);
305   }
306   GNUNET_free (uri);
307   GNUNET_FS_uri_destroy (ret);
308   return 0;
309 }
310
311
312 int
313 main (int argc, char *argv[])
314 {
315   int failureCount = 0;
316   int i;
317
318   GNUNET_log_setup ("test_fs_uri",
319                     "WARNING",
320                     NULL);
321   failureCount += testKeyword ();
322   failureCount += testLocation ();
323   for (i = 0; i < 255; i++)
324   {
325     /* FPRINTF (stderr, "%s",  "."); */
326     failureCount += testNamespace (i);
327     failureCount += testFile (i);
328   }
329   /* FPRINTF (stderr, "%s",  "\n"); */
330   GNUNET_DISK_directory_remove ("/tmp/gnunet-test-fs-uri");
331   if (failureCount != 0)
332     return 1;
333   return 0;
334 }
335
336 /* end of test_fs_uri.c */