diff options
author | iphydf <iphydf@users.noreply.github.com> | 2018-08-01 23:02:13 +0000 |
---|---|---|
committer | iphydf <iphydf@users.noreply.github.com> | 2018-08-16 21:01:43 +0000 |
commit | d6d305feeb76735ee4b4e14c6bca737a5482bc19 (patch) | |
tree | 99005c635a452245006b3b5de44f1dd80da9f77f /auto_tests/onion_test.c | |
parent | 54066f338f185f2fbd6694d9a4877f42cbfa21c8 (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.c | 76 |
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 | } |
32 | static void do_onion(Onion *onion) | 32 | static 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 | ||
155 | START_TEST(test_basic) | 155 | static 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 | } |
306 | END_TEST | ||
307 | 314 | ||
308 | typedef struct { | 315 | typedef 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 | ||
390 | static void do_onions(Onions *on) | 409 | static 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 | ||
471 | START_TEST(test_announce) | 491 | static 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 | } |
556 | END_TEST | ||
557 | |||
558 | static 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 | ||
567 | int main(void) | 577 | int 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 | } |