d4ee8c302f94eff0599fb7da608cf5e967be388a
[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 */