aboutsummaryrefslogtreecommitdiff
path: root/src/namestore/test_namestore_api_zone_iteration.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/namestore/test_namestore_api_zone_iteration.c')
-rw-r--r--src/namestore/test_namestore_api_zone_iteration.c223
1 files changed, 101 insertions, 122 deletions
diff --git a/src/namestore/test_namestore_api_zone_iteration.c b/src/namestore/test_namestore_api_zone_iteration.c
index 806605d94..af263c816 100644
--- a/src/namestore/test_namestore_api_zone_iteration.c
+++ b/src/namestore/test_namestore_api_zone_iteration.c
@@ -1,21 +1,19 @@
1/* 1/*
2 This file is part of GNUnet. 2 This file is part of GNUnet.
3 Copyright (C) 2013 GNUnet e.V. 3 Copyright (C) 2013, 2018 GNUnet e.V.
4 4
5 GNUnet is free software; you can redistribute it and/or modify 5 GNUnet is free software: you can redistribute it and/or modify it
6 it under the terms of the GNU General Public License as published 6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation; either version 3, or (at your 7 by the Free Software Foundation, either version 3 of the License,
8 option) any later version. 8 or (at your option) any later version.
9 9
10 GNUnet is distributed in the hope that it will be useful, but 10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of 11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details. 13 Affero General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU Affero General Public License
16 along with GNUnet; see the file COPYING. If not, write to the 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19*/ 17*/
20/** 18/**
21 * @file namestore/test_namestore_api_zone_iteration.c 19 * @file namestore/test_namestore_api_zone_iteration.c
@@ -25,6 +23,9 @@
25#include "gnunet_namestore_service.h" 23#include "gnunet_namestore_service.h"
26#include "gnunet_testing_lib.h" 24#include "gnunet_testing_lib.h"
27#include "namestore.h" 25#include "namestore.h"
26#include "gnunet_dnsparser_lib.h"
27
28#define TEST_RECORD_TYPE GNUNET_DNSPARSER_TYPE_TXT
28 29
29 30
30#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 100) 31#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 100)
@@ -56,8 +57,6 @@ static char * s_name_3;
56 57
57static struct GNUNET_GNSRECORD_Data *s_rd_3; 58static struct GNUNET_GNSRECORD_Data *s_rd_3;
58 59
59static char *directory;
60
61 60
62/** 61/**
63 * Re-establish the connection to the service. 62 * Re-establish the connection to the service.
@@ -68,43 +67,8 @@ static char *directory;
68static void 67static void
69endbadly (void *cls) 68endbadly (void *cls)
70{ 69{
71 if (NULL != zi) 70 endbadly_task = NULL;
72 { 71 GNUNET_SCHEDULER_shutdown ();
73 GNUNET_NAMESTORE_zone_iteration_stop (zi);
74 zi = NULL;
75 }
76 if (nsh != NULL)
77 {
78 GNUNET_NAMESTORE_disconnect (nsh);
79 nsh = NULL;
80 }
81 GNUNET_free_non_null(s_name_1);
82 GNUNET_free_non_null(s_name_2);
83 GNUNET_free_non_null(s_name_3);
84
85 if (s_rd_1 != NULL)
86 {
87 GNUNET_free ((void *)s_rd_1->data);
88 GNUNET_free (s_rd_1);
89 }
90 if (s_rd_2 != NULL)
91 {
92 GNUNET_free ((void *)s_rd_2->data);
93 GNUNET_free (s_rd_2);
94 }
95 if (s_rd_3 != NULL)
96 {
97 GNUNET_free ((void *)s_rd_3->data);
98 GNUNET_free (s_rd_3);
99 }
100
101 if (privkey != NULL)
102 GNUNET_free (privkey);
103 privkey = NULL;
104
105 if (privkey2 != NULL)
106 GNUNET_free (privkey2);
107 privkey2 = NULL;
108 res = 1; 72 res = 1;
109} 73}
110 74
@@ -117,41 +81,44 @@ end (void *cls)
117 GNUNET_NAMESTORE_zone_iteration_stop (zi); 81 GNUNET_NAMESTORE_zone_iteration_stop (zi);
118 zi = NULL; 82 zi = NULL;
119 } 83 }
120 if (endbadly_task != NULL) 84 if (NULL != endbadly_task)
121 { 85 {
122 GNUNET_SCHEDULER_cancel (endbadly_task); 86 GNUNET_SCHEDULER_cancel (endbadly_task);
123 endbadly_task = NULL; 87 endbadly_task = NULL;
124 } 88 }
125 89 if (NULL != privkey)
126 if (privkey != NULL) 90 {
127 GNUNET_free (privkey); 91 GNUNET_free (privkey);
128 privkey = NULL; 92 privkey = NULL;
129 93 }
130 if (privkey2 != NULL) 94 if (NULL != privkey2)
95 {
131 GNUNET_free (privkey2); 96 GNUNET_free (privkey2);
132 privkey2 = NULL; 97 privkey2 = NULL;
133 98 }
134 GNUNET_free (s_name_1); 99 GNUNET_free (s_name_1);
135 GNUNET_free (s_name_2); 100 GNUNET_free (s_name_2);
136 GNUNET_free (s_name_3); 101 GNUNET_free (s_name_3);
137 if (s_rd_1 != NULL) 102 if (NULL != s_rd_1)
138 { 103 {
139 GNUNET_free ((void *)s_rd_1->data); 104 GNUNET_free ((void *)s_rd_1->data);
140 GNUNET_free (s_rd_1); 105 GNUNET_free (s_rd_1);
141 } 106 }
142 if (s_rd_2 != NULL) 107 if (NULL != s_rd_2)
143 { 108 {
144 GNUNET_free ((void *)s_rd_2->data); 109 GNUNET_free ((void *)s_rd_2->data);
145 GNUNET_free (s_rd_2); 110 GNUNET_free (s_rd_2);
146 } 111 }
147 if (s_rd_3 != NULL) 112 if (NULL != s_rd_3)
148 { 113 {
149 GNUNET_free ((void *)s_rd_3->data); 114 GNUNET_free ((void *)s_rd_3->data);
150 GNUNET_free (s_rd_3); 115 GNUNET_free (s_rd_3);
151 } 116 }
152 if (nsh != NULL) 117 if (NULL != nsh)
118 {
153 GNUNET_NAMESTORE_disconnect (nsh); 119 GNUNET_NAMESTORE_disconnect (nsh);
154 nsh = NULL; 120 nsh = NULL;
121 }
155} 122}
156 123
157 124
@@ -170,7 +137,7 @@ zone_end (void *cls)
170 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 137 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
171 "Received last result, iteration done after receing %u results\n", 138 "Received last result, iteration done after receing %u results\n",
172 returned_records); 139 returned_records);
173 GNUNET_SCHEDULER_add_now (&end, NULL); 140 GNUNET_SCHEDULER_shutdown ();
174} 141}
175 142
176 143
@@ -191,7 +158,9 @@ zone_proc (void *cls,
191 int failed = GNUNET_NO; 158 int failed = GNUNET_NO;
192 159
193 GNUNET_assert (NULL != zone); 160 GNUNET_assert (NULL != zone);
194 if (0 == memcmp (zone, privkey, sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) 161 if (0 == memcmp (zone,
162 privkey,
163 sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey)))
195 { 164 {
196 if (0 == strcmp (label, s_name_1)) 165 if (0 == strcmp (label, s_name_1))
197 { 166 {
@@ -230,12 +199,15 @@ zone_proc (void *cls,
230 else 199 else
231 { 200 {
232 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 201 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
233 "Comparing result failed: got name `%s' for first zone\n", label); 202 "Comparing result failed: got name `%s' for first zone\n",
203 label);
234 failed = GNUNET_YES; 204 failed = GNUNET_YES;
235 GNUNET_break (0); 205 GNUNET_break (0);
236 } 206 }
237 } 207 }
238 else if (0 == memcmp (zone, privkey2, sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) 208 else if (0 == memcmp (zone,
209 privkey2,
210 sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey)))
239 { 211 {
240 if (0 == strcmp (label, s_name_3)) 212 if (0 == strcmp (label, s_name_3))
241 { 213 {
@@ -258,7 +230,8 @@ zone_proc (void *cls,
258 else 230 else
259 { 231 {
260 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 232 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
261 "Comparing result failed: got name `%s' for first zone\n", label); 233 "Comparing result failed: got name `%s' for first zone\n",
234 label);
262 failed = GNUNET_YES; 235 failed = GNUNET_YES;
263 GNUNET_break (0); 236 GNUNET_break (0);
264 } 237 }
@@ -282,29 +255,34 @@ zone_proc (void *cls,
282 else 255 else
283 { 256 {
284 GNUNET_break (0); 257 GNUNET_break (0);
285 GNUNET_SCHEDULER_add_now (&end, NULL); 258 GNUNET_SCHEDULER_shutdown ();
259 res = 1;
286 } 260 }
287} 261}
288 262
289 263
290static void 264static void
291put_cont (void *cls, int32_t success, const char *emsg) 265put_cont (void *cls,
266 int32_t success,
267 const char *emsg)
292{ 268{
293 static int c = 0; 269 static int c = 0;
294 270
295 if (success == GNUNET_OK) 271 if (success == GNUNET_OK)
296 { 272 {
297 c++; 273 c++;
298 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Created record %u \n", c); 274 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
275 "Created record %u \n",
276 c);
299 } 277 }
300 else 278 else
301 { 279 {
302 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to created records: `%s'\n", 280 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
281 "Failed to created records: `%s'\n",
303 emsg); 282 emsg);
304 GNUNET_break (0); 283 GNUNET_break (0);
305 if (NULL != endbadly_task) 284 GNUNET_SCHEDULER_shutdown ();
306 GNUNET_SCHEDULER_cancel (endbadly_task); 285 res = 1;
307 endbadly_task = GNUNET_SCHEDULER_add_now (&endbadly, NULL);
308 return; 286 return;
309 } 287 }
310 288
@@ -312,7 +290,8 @@ put_cont (void *cls, int32_t success, const char *emsg)
312 { 290 {
313 res = 1; 291 res = 1;
314 returned_records = 0; 292 returned_records = 0;
315 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "All records created, starting iteration over all zones \n"); 293 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
294 "All records created, starting iteration over all zones \n");
316 zi = GNUNET_NAMESTORE_zone_iteration_start (nsh, 295 zi = GNUNET_NAMESTORE_zone_iteration_start (nsh,
317 NULL, 296 NULL,
318 &fail_cb, 297 &fail_cb,
@@ -323,11 +302,11 @@ put_cont (void *cls, int32_t success, const char *emsg)
323 NULL); 302 NULL);
324 if (zi == NULL) 303 if (zi == NULL)
325 { 304 {
326 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to create zone iterator\n"); 305 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
306 "Failed to create zone iterator\n");
327 GNUNET_break (0); 307 GNUNET_break (0);
328 if (NULL != endbadly_task) 308 GNUNET_SCHEDULER_shutdown ();
329 GNUNET_SCHEDULER_cancel (endbadly_task); 309 res = 1;
330 endbadly_task = GNUNET_SCHEDULER_add_now (&endbadly, NULL);
331 return; 310 return;
332 } 311 }
333 } 312 }
@@ -337,14 +316,14 @@ put_cont (void *cls, int32_t success, const char *emsg)
337static struct GNUNET_GNSRECORD_Data * 316static struct GNUNET_GNSRECORD_Data *
338create_record (unsigned int count) 317create_record (unsigned int count)
339{ 318{
340 unsigned int c;
341 struct GNUNET_GNSRECORD_Data * rd; 319 struct GNUNET_GNSRECORD_Data * rd;
342 320
343 rd = GNUNET_malloc (count * sizeof (struct GNUNET_GNSRECORD_Data)); 321 rd = GNUNET_new_array (count,
344 for (c = 0; c < count; c++) 322 struct GNUNET_GNSRECORD_Data);
323 for (unsigned int c = 0; c < count; c++)
345 { 324 {
346 rd[c].expiration_time = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_HOURS).abs_value_us; 325 rd[c].expiration_time = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_HOURS).abs_value_us;
347 rd[c].record_type = 1111; 326 rd[c].record_type = TEST_RECORD_TYPE;
348 rd[c].data_size = 50; 327 rd[c].data_size = 50;
349 rd[c].data = GNUNET_malloc(50); 328 rd[c].data = GNUNET_malloc(50);
350 rd[c].flags = 0; 329 rd[c].flags = 0;
@@ -372,9 +351,8 @@ empty_zone_proc (void *cls,
372 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 351 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
373 _("Expected empty zone but received zone private key\n")); 352 _("Expected empty zone but received zone private key\n"));
374 GNUNET_break (0); 353 GNUNET_break (0);
375 if (endbadly_task != NULL) 354 GNUNET_SCHEDULER_shutdown ();
376 GNUNET_SCHEDULER_cancel (endbadly_task); 355 res = 1;
377 endbadly_task = GNUNET_SCHEDULER_add_now (&endbadly, NULL);
378 return; 356 return;
379 } 357 }
380 if ((NULL != label) || (NULL != rd) || (0 != rd_count)) 358 if ((NULL != label) || (NULL != rd) || (0 != rd_count))
@@ -382,9 +360,8 @@ empty_zone_proc (void *cls,
382 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 360 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
383 _("Expected no zone content but received data\n")); 361 _("Expected no zone content but received data\n"));
384 GNUNET_break (0); 362 GNUNET_break (0);
385 if (endbadly_task != NULL) 363 GNUNET_SCHEDULER_shutdown ();
386 GNUNET_SCHEDULER_cancel (endbadly_task); 364 res = 1;
387 endbadly_task = GNUNET_SCHEDULER_add_now (&endbadly, NULL);
388 return; 365 return;
389 } 366 }
390 GNUNET_assert (0); 367 GNUNET_assert (0);
@@ -412,7 +389,9 @@ empty_zone_end (void *cls)
412 "zonefiles%s%s", 389 "zonefiles%s%s",
413 DIR_SEPARATOR_STR, 390 DIR_SEPARATOR_STR,
414 "HGU0A0VCU334DN7F2I9UIUMVQMM7JMSD142LIMNUGTTV9R0CF4EG.zkey"); 391 "HGU0A0VCU334DN7F2I9UIUMVQMM7JMSD142LIMNUGTTV9R0CF4EG.zkey");
415 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Using zonekey file `%s' \n", hostkey_file); 392 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
393 "Using zonekey file `%s' \n",
394 hostkey_file);
416 privkey2 = GNUNET_CRYPTO_ecdsa_key_create_from_file(hostkey_file); 395 privkey2 = GNUNET_CRYPTO_ecdsa_key_create_from_file(hostkey_file);
417 GNUNET_free (hostkey_file); 396 GNUNET_free (hostkey_file);
418 GNUNET_assert (privkey2 != NULL); 397 GNUNET_assert (privkey2 != NULL);
@@ -425,8 +404,8 @@ empty_zone_end (void *cls)
425 privkey, 404 privkey,
426 s_name_1, 405 s_name_1,
427 1, s_rd_1, 406 1, s_rd_1,
428 &put_cont, NULL); 407 &put_cont,
429 408 NULL);
430 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 409 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
431 "Created record 2 \n"); 410 "Created record 2 \n");
432 GNUNET_asprintf(&s_name_2, "dummy2"); 411 GNUNET_asprintf(&s_name_2, "dummy2");
@@ -437,16 +416,18 @@ empty_zone_end (void *cls)
437 1, s_rd_2, 416 1, s_rd_2,
438 &put_cont, 417 &put_cont,
439 NULL); 418 NULL);
440
441 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 419 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
442 "Created record 3\n"); 420 "Created record 3\n");
443
444 /* name in different zone */ 421 /* name in different zone */
445 GNUNET_asprintf(&s_name_3, "dummy3"); 422 GNUNET_asprintf(&s_name_3, "dummy3");
446 s_rd_3 = create_record(1); 423 s_rd_3 = create_record(1);
447 GNUNET_NAMESTORE_records_store (nsh, privkey2, s_name_3, 424 GNUNET_NAMESTORE_records_store (nsh,
448 1, s_rd_3, 425 privkey2,
449 &put_cont, NULL); 426 s_name_3,
427 1,
428 s_rd_3,
429 &put_cont,
430 NULL);
450} 431}
451 432
452 433
@@ -455,31 +436,30 @@ run (void *cls,
455 const struct GNUNET_CONFIGURATION_Handle *cfg, 436 const struct GNUNET_CONFIGURATION_Handle *cfg,
456 struct GNUNET_TESTING_Peer *peer) 437 struct GNUNET_TESTING_Peer *peer)
457{ 438{
458 directory = NULL; 439 endbadly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
459 GNUNET_assert (GNUNET_OK == 440 &endbadly,
460 GNUNET_CONFIGURATION_get_value_string(cfg, "PATHS", 441 NULL);
461 "GNUNET_TEST_HOME", 442 GNUNET_SCHEDULER_add_shutdown (&end,
462 &directory)); 443 NULL);
463 GNUNET_DISK_directory_remove (directory); 444
464
465 endbadly_task = GNUNET_SCHEDULER_add_delayed(TIMEOUT, &endbadly, NULL);
466 nsh = GNUNET_NAMESTORE_connect (cfg); 445 nsh = GNUNET_NAMESTORE_connect (cfg);
467 GNUNET_break (NULL != nsh); 446 GNUNET_break (NULL != nsh);
468 /* first, iterate over empty namestore */ 447 /* first, iterate over empty namestore */
469 zi = GNUNET_NAMESTORE_zone_iteration_start(nsh, 448 zi = GNUNET_NAMESTORE_zone_iteration_start (nsh,
470 NULL, 449 NULL,
471 &fail_cb, 450 &fail_cb,
472 NULL, 451 NULL,
473 &empty_zone_proc, 452 &empty_zone_proc,
474 nsh, 453 nsh,
475 &empty_zone_end, 454 &empty_zone_end,
476 NULL); 455 NULL);
477 if (NULL == zi) 456 if (NULL == zi)
478 { 457 {
479 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to create zone iterator\n"); 458 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
459 "Failed to create zone iterator\n");
480 GNUNET_break (0); 460 GNUNET_break (0);
481 GNUNET_SCHEDULER_cancel (endbadly_task); 461 res = 1;
482 endbadly_task = GNUNET_SCHEDULER_add_now (&endbadly, NULL); 462 GNUNET_SCHEDULER_shutdown ();
483 } 463 }
484} 464}
485 465
@@ -494,6 +474,8 @@ main (int argc, char *argv[])
494 GNUNET_asprintf (&cfg_name, 474 GNUNET_asprintf (&cfg_name,
495 "test_namestore_api_%s.conf", 475 "test_namestore_api_%s.conf",
496 plugin_name); 476 plugin_name);
477 GNUNET_DISK_purge_cfg_dir (cfg_name,
478 "GNUNET_TEST_HOME");
497 res = 1; 479 res = 1;
498 if (0 != 480 if (0 !=
499 GNUNET_TESTING_peer_run ("test-namestore-api-zone-iteration", 481 GNUNET_TESTING_peer_run ("test-namestore-api-zone-iteration",
@@ -503,12 +485,9 @@ main (int argc, char *argv[])
503 { 485 {
504 res = 1; 486 res = 1;
505 } 487 }
488 GNUNET_DISK_purge_cfg_dir (cfg_name,
489 "GNUNET_TEST_HOME");
506 GNUNET_free (cfg_name); 490 GNUNET_free (cfg_name);
507 if (NULL != directory)
508 {
509 GNUNET_DISK_directory_remove (directory);
510 GNUNET_free (directory);
511 }
512 return res; 491 return res;
513} 492}
514 493