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