summaryrefslogtreecommitdiff
path: root/auto_tests/onion_test.c
diff options
context:
space:
mode:
authoriphydf <iphydf@users.noreply.github.com>2018-08-01 23:02:13 +0000
committeriphydf <iphydf@users.noreply.github.com>2018-08-16 21:01:43 +0000
commitd6d305feeb76735ee4b4e14c6bca737a5482bc19 (patch)
tree99005c635a452245006b3b5de44f1dd80da9f77f /auto_tests/onion_test.c
parent54066f338f185f2fbd6694d9a4877f42cbfa21c8 (diff)
Use per-instance `Mono_Time` for Messenger and onion.
Diffstat (limited to 'auto_tests/onion_test.c')
-rw-r--r--auto_tests/onion_test.c76
1 files changed, 40 insertions, 36 deletions
diff --git a/auto_tests/onion_test.c b/auto_tests/onion_test.c
index 0a9a0577..a11fb807 100644
--- a/auto_tests/onion_test.c
+++ b/auto_tests/onion_test.c
@@ -31,7 +31,7 @@ static inline IP get_loopback()
31} 31}
32static void do_onion(Onion *onion) 32static void do_onion(Onion *onion)
33{ 33{
34 unix_time_update(); 34 mono_time_update(onion->mono_time);
35 35
36 networking_poll(onion->net, nullptr); 36 networking_poll(onion->net, nullptr);
37 do_dht(onion->dht); 37 do_dht(onion->dht);
@@ -152,7 +152,7 @@ static int handle_test_4(void *object, IP_Port source, const uint8_t *packet, ui
152 return 0; 152 return 0;
153} 153}
154 154
155START_TEST(test_basic) 155static void test_basic(void)
156{ 156{
157 uint32_t index[] = { 1, 2, 3 }; 157 uint32_t index[] = { 1, 2, 3 };
158 Logger *log1 = logger_new(); 158 Logger *log1 = logger_new();
@@ -160,9 +160,12 @@ START_TEST(test_basic)
160 Logger *log2 = logger_new(); 160 Logger *log2 = logger_new();
161 logger_callback_log(log2, (logger_cb *)print_debug_log, nullptr, &index[1]); 161 logger_callback_log(log2, (logger_cb *)print_debug_log, nullptr, &index[1]);
162 162
163 Mono_Time *mono_time1 = mono_time_new();
164 Mono_Time *mono_time2 = mono_time_new();
165
163 IP ip = get_loopback(); 166 IP ip = get_loopback();
164 Onion *onion1 = new_onion(new_dht(log1, new_networking(log1, ip, 36567), true)); 167 Onion *onion1 = new_onion(mono_time1, new_dht(log1, mono_time1, new_networking(log1, ip, 36567), true));
165 Onion *onion2 = new_onion(new_dht(log2, new_networking(log2, ip, 36568), true)); 168 Onion *onion2 = new_onion(mono_time2, new_dht(log2, mono_time2, new_networking(log2, ip, 36568), true));
166 ck_assert_msg((onion1 != nullptr) && (onion2 != nullptr), "Onion failed initializing."); 169 ck_assert_msg((onion1 != nullptr) && (onion2 != nullptr), "Onion failed initializing.");
167 networking_registerhandler(onion2->net, NET_PACKET_ANNOUNCE_REQUEST, &handle_test_1, onion2); 170 networking_registerhandler(onion2->net, NET_PACKET_ANNOUNCE_REQUEST, &handle_test_1, onion2);
168 171
@@ -202,8 +205,8 @@ START_TEST(test_basic)
202 do_onion(onion2); 205 do_onion(onion2);
203 } 206 }
204 207
205 Onion_Announce *onion1_a = new_onion_announce(onion1->dht); 208 Onion_Announce *onion1_a = new_onion_announce(mono_time1, onion1->dht);
206 Onion_Announce *onion2_a = new_onion_announce(onion2->dht); 209 Onion_Announce *onion2_a = new_onion_announce(mono_time2, onion2->dht);
207 networking_registerhandler(onion1->net, NET_PACKET_ANNOUNCE_RESPONSE, &handle_test_3, onion1); 210 networking_registerhandler(onion1->net, NET_PACKET_ANNOUNCE_RESPONSE, &handle_test_3, onion1);
208 ck_assert_msg((onion1_a != nullptr) && (onion2_a != nullptr), "Onion_Announce failed initializing."); 211 ck_assert_msg((onion1_a != nullptr) && (onion2_a != nullptr), "Onion_Announce failed initializing.");
209 uint8_t zeroes[64] = {0}; 212 uint8_t zeroes[64] = {0};
@@ -229,7 +232,7 @@ START_TEST(test_basic)
229 random_bytes(sb_data, sizeof(sb_data)); 232 random_bytes(sb_data, sizeof(sb_data));
230 memcpy(&s, sb_data, sizeof(uint64_t)); 233 memcpy(&s, sb_data, sizeof(uint64_t));
231 memcpy(onion_announce_entry_public_key(onion2_a, 1), dht_get_self_public_key(onion2->dht), CRYPTO_PUBLIC_KEY_SIZE); 234 memcpy(onion_announce_entry_public_key(onion2_a, 1), dht_get_self_public_key(onion2->dht), CRYPTO_PUBLIC_KEY_SIZE);
232 onion_announce_entry_set_time(onion2_a, 1, unix_time()); 235 onion_announce_entry_set_time(onion2_a, 1, mono_time_get(mono_time2));
233 networking_registerhandler(onion1->net, NET_PACKET_ONION_DATA_RESPONSE, &handle_test_4, onion1); 236 networking_registerhandler(onion1->net, NET_PACKET_ONION_DATA_RESPONSE, &handle_test_4, onion1);
234 send_announce_request(onion1->net, &path, nodes[3], 237 send_announce_request(onion1->net, &path, nodes[3],
235 dht_get_self_public_key(onion1->dht), 238 dht_get_self_public_key(onion1->dht),
@@ -250,7 +253,9 @@ START_TEST(test_basic)
250 Logger *log3 = logger_new(); 253 Logger *log3 = logger_new();
251 logger_callback_log(log3, (logger_cb *)print_debug_log, nullptr, &index[2]); 254 logger_callback_log(log3, (logger_cb *)print_debug_log, nullptr, &index[2]);
252 255
253 Onion *onion3 = new_onion(new_dht(log3, new_networking(log3, ip, 36569), true)); 256 Mono_Time *mono_time3 = mono_time_new();
257
258 Onion *onion3 = new_onion(mono_time3, new_dht(log3, mono_time3, new_networking(log3, ip, 36569), true));
254 ck_assert_msg((onion3 != nullptr), "Onion failed initializing."); 259 ck_assert_msg((onion3 != nullptr), "Onion failed initializing.");
255 260
256 random_nonce(nonce); 261 random_nonce(nonce);
@@ -278,6 +283,7 @@ START_TEST(test_basic)
278 kill_onion(onion); 283 kill_onion(onion);
279 kill_dht(dht); 284 kill_dht(dht);
280 kill_networking(net); 285 kill_networking(net);
286 mono_time_free(mono_time3);
281 logger_kill(log3); 287 logger_kill(log3);
282 } 288 }
283 289
@@ -289,6 +295,7 @@ START_TEST(test_basic)
289 kill_onion(onion); 295 kill_onion(onion);
290 kill_dht(dht); 296 kill_dht(dht);
291 kill_networking(net); 297 kill_networking(net);
298 mono_time_free(mono_time2);
292 logger_kill(log2); 299 logger_kill(log2);
293 } 300 }
294 301
@@ -300,13 +307,14 @@ START_TEST(test_basic)
300 kill_onion(onion); 307 kill_onion(onion);
301 kill_dht(dht); 308 kill_dht(dht);
302 kill_networking(net); 309 kill_networking(net);
310 mono_time_free(mono_time1);
303 logger_kill(log1); 311 logger_kill(log1);
304 } 312 }
305} 313}
306END_TEST
307 314
308typedef struct { 315typedef struct {
309 Logger *log; 316 Logger *log;
317 Mono_Time *mono_time;
310 Onion *onion; 318 Onion *onion;
311 Onion_Announce *onion_a; 319 Onion_Announce *onion_a;
312 Onion_Client *onion_c; 320 Onion_Client *onion_c;
@@ -329,56 +337,67 @@ static Onions *new_onions(uint16_t port, uint32_t *index)
329 return nullptr; 337 return nullptr;
330 } 338 }
331 339
332 unix_time_update();
333
334 logger_callback_log(on->log, (logger_cb *)print_debug_log, nullptr, index); 340 logger_callback_log(on->log, (logger_cb *)print_debug_log, nullptr, index);
335 341
342 on->mono_time = mono_time_new();
343
344 if (!on->mono_time) {
345 logger_kill(on->log);
346 free(on);
347 return nullptr;
348 }
349
336 Networking_Core *net = new_networking(on->log, ip, port); 350 Networking_Core *net = new_networking(on->log, ip, port);
337 351
338 if (!net) { 352 if (!net) {
353 mono_time_free(on->mono_time);
339 logger_kill(on->log); 354 logger_kill(on->log);
340 free(on); 355 free(on);
341 return nullptr; 356 return nullptr;
342 } 357 }
343 358
344 DHT *dht = new_dht(on->log, net, true); 359 DHT *dht = new_dht(on->log, on->mono_time, net, true);
345 360
346 if (!dht) { 361 if (!dht) {
347 kill_networking(net); 362 kill_networking(net);
363 mono_time_free(on->mono_time);
348 logger_kill(on->log); 364 logger_kill(on->log);
349 free(on); 365 free(on);
350 return nullptr; 366 return nullptr;
351 } 367 }
352 368
353 on->onion = new_onion(dht); 369 on->onion = new_onion(on->mono_time, dht);
354 370
355 if (!on->onion) { 371 if (!on->onion) {
356 kill_dht(dht); 372 kill_dht(dht);
357 kill_networking(net); 373 kill_networking(net);
374 mono_time_free(on->mono_time);
358 logger_kill(on->log); 375 logger_kill(on->log);
359 free(on); 376 free(on);
360 return nullptr; 377 return nullptr;
361 } 378 }
362 379
363 on->onion_a = new_onion_announce(dht); 380 on->onion_a = new_onion_announce(on->mono_time, dht);
364 381
365 if (!on->onion_a) { 382 if (!on->onion_a) {
366 kill_onion(on->onion); 383 kill_onion(on->onion);
367 kill_dht(dht); 384 kill_dht(dht);
368 kill_networking(net); 385 kill_networking(net);
386 mono_time_free(on->mono_time);
369 logger_kill(on->log); 387 logger_kill(on->log);
370 free(on); 388 free(on);
371 return nullptr; 389 return nullptr;
372 } 390 }
373 391
374 TCP_Proxy_Info inf = {{{{0}}}}; 392 TCP_Proxy_Info inf = {{{{0}}}};
375 on->onion_c = new_onion_client(new_net_crypto(on->log, dht, &inf)); 393 on->onion_c = new_onion_client(on->mono_time, new_net_crypto(on->log, on->mono_time, dht, &inf));
376 394
377 if (!on->onion_c) { 395 if (!on->onion_c) {
378 kill_onion_announce(on->onion_a); 396 kill_onion_announce(on->onion_a);
379 kill_onion(on->onion); 397 kill_onion(on->onion);
380 kill_dht(dht); 398 kill_dht(dht);
381 kill_networking(net); 399 kill_networking(net);
400 mono_time_free(on->mono_time);
382 logger_kill(on->log); 401 logger_kill(on->log);
383 free(on); 402 free(on);
384 return nullptr; 403 return nullptr;
@@ -389,7 +408,7 @@ static Onions *new_onions(uint16_t port, uint32_t *index)
389 408
390static void do_onions(Onions *on) 409static void do_onions(Onions *on)
391{ 410{
392 unix_time_update(); 411 mono_time_update(on->mono_time);
393 412
394 networking_poll(on->onion->net, nullptr); 413 networking_poll(on->onion->net, nullptr);
395 do_dht(on->onion->dht); 414 do_dht(on->onion->dht);
@@ -407,6 +426,7 @@ static void kill_onions(Onions *on)
407 kill_net_crypto(c); 426 kill_net_crypto(c);
408 kill_dht(dht); 427 kill_dht(dht);
409 kill_networking(net); 428 kill_networking(net);
429 mono_time_free(on->mono_time);
410 logger_kill(on->log); 430 logger_kill(on->log);
411 free(on); 431 free(on);
412} 432}
@@ -468,7 +488,7 @@ static void dht_pk_callback(void *object, int32_t number, const uint8_t *dht_pub
468 } 488 }
469} 489}
470 490
471START_TEST(test_announce) 491static void test_announce(void)
472{ 492{
473 uint32_t i, j; 493 uint32_t i, j;
474 uint32_t index[NUM_ONIONS]; 494 uint32_t index[NUM_ONIONS];
@@ -553,29 +573,13 @@ START_TEST(test_announce)
553 kill_onions(onions[i]); 573 kill_onions(onions[i]);
554 } 574 }
555} 575}
556END_TEST
557
558static Suite *onion_suite(void)
559{
560 Suite *s = suite_create("Onion");
561
562 DEFTESTCASE_SLOW(basic, 5);
563 DEFTESTCASE_SLOW(announce, 70);
564 return s;
565}
566 576
567int main(void) 577int main(void)
568{ 578{
569 setvbuf(stdout, nullptr, _IONBF, 0); 579 setvbuf(stdout, nullptr, _IONBF, 0);
570 580
571 Suite *onion = onion_suite(); 581 test_basic();
572 SRunner *test_runner = srunner_create(onion); 582 test_announce();
573
574 int number_failed = 0;
575 srunner_run_all(test_runner, CK_NORMAL);
576 number_failed = srunner_ntests_failed(test_runner);
577 583
578 srunner_free(test_runner); 584 return 0;
579
580 return number_failed;
581} 585}