error handling
[oweals/gnunet.git] / src / fs / test_fs_uri.c
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2003-2014 GNUnet e.V.
4
5      GNUnet is free software: you can redistribute it and/or modify it
6      under the terms of the GNU Affero General Public License as published
7      by the Free Software Foundation, either version 3 of the License,
8      or (at your 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      Affero General Public License for more details.
14
15      You should have received a copy of the GNU Affero General Public License
16      along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18      SPDX-License-Identifier: AGPL3.0-or-later
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 (NULL == ret)
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_CRYPTO_EddsaPrivateKey *pk;
85
86   baseURI =
87     GNUNET_FS_uri_parse
88     (
89       "gnunet://fs/chk/4QZP479A9SKGFNMQ2ZBCYE71YV2QMTVGWTVPB6A10ASVCKXDHB05DKPSC7ZF6E9P9W1VE47394EQY7NXA47Q6R35M7P1MJPGP59D1Z8.D54QD1K5XCG5878T6YZ19AM60MQ6FC0YNVK7QY08KK0KM0FJJ3KQWYG112FN5T07KN7J0X35DF6WVBT9B8ZMZ3X2BXJ22X3KFQ6MV2G.15999",
90       &emsg);
91   GNUNET_assert (baseURI != NULL);
92   GNUNET_assert (emsg == NULL);
93   pk = GNUNET_CRYPTO_eddsa_key_create ();
94   uri = GNUNET_FS_uri_loc_create (baseURI,
95                                   pk,
96                                   GNUNET_TIME_absolute_get ());
97   GNUNET_free (pk);
98   if (NULL == uri)
99   {
100     GNUNET_break (0);
101     GNUNET_FS_uri_destroy (baseURI);
102     return 1;
103   }
104   if (! GNUNET_FS_uri_test_loc (uri))
105   {
106     GNUNET_break (0);
107     GNUNET_FS_uri_destroy (uri);
108     GNUNET_FS_uri_destroy (baseURI);
109     return 1;
110   }
111   uri2 = GNUNET_FS_uri_loc_get_uri (uri);
112   if (! GNUNET_FS_uri_test_equal (baseURI, uri2))
113   {
114     GNUNET_break (0);
115     GNUNET_FS_uri_destroy (uri);
116     GNUNET_FS_uri_destroy (uri2);
117     GNUNET_FS_uri_destroy (baseURI);
118     return 1;
119   }
120   GNUNET_FS_uri_destroy (uri2);
121   GNUNET_FS_uri_destroy (baseURI);
122   uric = GNUNET_FS_uri_to_string (uri);
123 #if 0
124   /* not for the faint of heart: */
125   printf ("URI: `%s'\n", uric);
126 #endif
127   uri2 = GNUNET_FS_uri_parse (uric, &emsg);
128   GNUNET_free (uric);
129   if (uri2 == NULL)
130   {
131     fprintf (stderr, "URI parsing failed: %s\n", emsg);
132     GNUNET_break (0);
133     GNUNET_FS_uri_destroy (uri);
134     GNUNET_free (emsg);
135     return 1;
136   }
137   GNUNET_assert (NULL == emsg);
138   if (GNUNET_YES != GNUNET_FS_uri_test_equal (uri, uri2))
139   {
140     GNUNET_break (0);
141     GNUNET_FS_uri_destroy (uri);
142     GNUNET_FS_uri_destroy (uri2);
143     return 1;
144   }
145   GNUNET_FS_uri_destroy (uri2);
146   GNUNET_FS_uri_destroy (uri);
147   return 0;
148 }
149
150
151 static int
152 testNamespace (int i)
153 {
154   char *uri;
155   struct GNUNET_FS_Uri *ret;
156   char *emsg;
157   struct GNUNET_CRYPTO_EcdsaPrivateKey *ph;
158   struct GNUNET_CRYPTO_EcdsaPublicKey id;
159   char buf[1024];
160   char ubuf[1024];
161   char *sret;
162
163   if (NULL !=
164       (ret =
165          GNUNET_FS_uri_parse (
166            "gnunet://fs/sks/D1KJS9H2A82Q65VKQ0ML3RFU6U1D3VUK",
167            &emsg)))
168   {
169     GNUNET_FS_uri_destroy (ret);
170     GNUNET_assert (0);
171   }
172   GNUNET_free (emsg);
173   if (NULL !=
174       (ret =
175          GNUNET_FS_uri_parse
176          (
177            "gnunet://fs/sks/XQHH4R288W26EBV369F6RCE0PJVJTX2Y74Q2FJPMPGA31HJX2JG/this",
178            &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   ph = GNUNET_CRYPTO_ecdsa_key_create ();
191   GNUNET_CRYPTO_ecdsa_key_get_public (ph, &id);
192   sret = GNUNET_STRINGS_data_to_string (&id, sizeof(id),
193                                         ubuf, sizeof(ubuf) - 1);
194   GNUNET_assert (NULL != sret);
195   sret[0] = '\0';
196   GNUNET_snprintf (buf, sizeof(buf),
197                    "gnunet://fs/sks/%s/test",
198                    ubuf);
199   ret = GNUNET_FS_uri_parse (buf, &emsg);
200   if (NULL == ret)
201   {
202     GNUNET_free (emsg);
203     GNUNET_assert (0);
204   }
205   if (GNUNET_FS_uri_test_ksk (ret))
206   {
207     GNUNET_FS_uri_destroy (ret);
208     GNUNET_assert (0);
209   }
210   if (! GNUNET_FS_uri_test_sks (ret))
211   {
212     GNUNET_FS_uri_destroy (ret);
213     GNUNET_assert (0);
214   }
215
216   uri = GNUNET_FS_uri_to_string (ret);
217   if (0 !=
218       strcmp (uri,
219               buf))
220   {
221     GNUNET_FS_uri_destroy (ret);
222     GNUNET_free (uri);
223     GNUNET_assert (0);
224   }
225   GNUNET_free (uri);
226   GNUNET_FS_uri_destroy (ret);
227   return 0;
228 }
229
230
231 static int
232 testFile (int i)
233 {
234   char *uri;
235   struct GNUNET_FS_Uri *ret;
236   char *emsg;
237
238   if (NULL !=
239       (ret =
240          GNUNET_FS_uri_parse
241          (
242            "gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H00000440000.42",
243            &emsg)))
244   {
245     GNUNET_FS_uri_destroy (ret);
246     GNUNET_assert (0);
247   }
248   GNUNET_free (emsg);
249   if (NULL !=
250       (ret =
251          GNUNET_FS_uri_parse
252          (
253            "gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000",
254            &emsg)))
255   {
256     GNUNET_FS_uri_destroy (ret);
257     GNUNET_assert (0);
258   }
259   GNUNET_free (emsg);
260   if (NULL !=
261       (ret =
262          GNUNET_FS_uri_parse
263          (
264            "gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.FGH",
265            &emsg)))
266   {
267     GNUNET_FS_uri_destroy (ret);
268     GNUNET_assert (0);
269   }
270   GNUNET_free (emsg);
271   ret =
272     GNUNET_FS_uri_parse
273     (
274       "gnunet://fs/chk/4QZP479A9SKGFNMQ2ZBCYE71YV2QMTVGWTVPB6A10ASVCKXDHB05DKPSC7ZF6E9P9W1VE47394EQY7NXA47Q6R35M7P1MJPGP59D1Z8.D54QD1K5XCG5878T6YZ19AM60MQ6FC0YNVK7QY08KK0KM0FJJ3KQWYG112FN5T07KN7J0X35DF6WVBT9B8ZMZ3X2BXJ22X3KFQ6MV2G.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/4QZP479A9SKGFNMQ2ZBCYE71YV2QMTVGWTVPB6A10ASVCKXDHB05DKPSC7ZF6E9P9W1VE47394EQY7NXA47Q6R35M7P1MJPGP59D1Z8.D54QD1K5XCG5878T6YZ19AM60MQ6FC0YNVK7QY08KK0KM0FJJ3KQWYG112FN5T07KN7J0X35DF6WVBT9B8ZMZ3X2BXJ22X3KFQ6MV2G.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
337 /* end of test_fs_uri.c */