diff options
author | t3sserakt <t3ss@posteo.de> | 2023-01-06 21:02:55 +0100 |
---|---|---|
committer | t3sserakt <t3ss@posteo.de> | 2023-01-06 21:02:55 +0100 |
commit | 2c2b2911e1585dc378dbb88d4dd6aaec37b00316 (patch) | |
tree | 701cd3a2304a7e1fb74553c78d8a3d2a1cbcc6c2 /src/testing/testing_api_loop.c | |
parent | d9f74f1751f0c4e08ddb2ce5f81a8cf8e4dcf1a2 (diff) | |
download | gnunet-2c2b2911e1585dc378dbb88d4dd6aaec37b00316.tar.gz gnunet-2c2b2911e1585dc378dbb88d4dd6aaec37b00316.zip |
- relsoved an coverity issue, worked on fixmes, code documentation and cleaned up up the barrier API
Diffstat (limited to 'src/testing/testing_api_loop.c')
-rw-r--r-- | src/testing/testing_api_loop.c | 104 |
1 files changed, 62 insertions, 42 deletions
diff --git a/src/testing/testing_api_loop.c b/src/testing/testing_api_loop.c index 7d76979dc..5385a53d7 100644 --- a/src/testing/testing_api_loop.c +++ b/src/testing/testing_api_loop.c | |||
@@ -41,11 +41,6 @@ | |||
41 | struct GNUNET_TESTING_Interpreter | 41 | struct GNUNET_TESTING_Interpreter |
42 | { | 42 | { |
43 | /** | 43 | /** |
44 | * Send handle for sending messages to netjail nodes. | ||
45 | */ | ||
46 | struct GNUNET_HELPER_SendHandle *sh; | ||
47 | |||
48 | /** | ||
49 | * Array with handles of helper processes for communication with netjails. | 44 | * Array with handles of helper processes for communication with netjails. |
50 | */ | 45 | */ |
51 | const struct GNUNET_HELPER_Handle **helper; | 46 | const struct GNUNET_HELPER_Handle **helper; |
@@ -291,6 +286,7 @@ finish_test (void *cls) | |||
291 | GNUNET_free (is->commands); | 286 | GNUNET_free (is->commands); |
292 | is->rc (is->rc_cls, | 287 | is->rc (is->rc_cls, |
293 | is->result); | 288 | is->result); |
289 | GNUNET_free (is->helper); | ||
294 | GNUNET_free (is); | 290 | GNUNET_free (is); |
295 | } | 291 | } |
296 | 292 | ||
@@ -618,11 +614,7 @@ loop_run (void *cls) | |||
618 | static void | 614 | static void |
619 | clear_msg (void *cls, int result) | 615 | clear_msg (void *cls, int result) |
620 | { | 616 | { |
621 | struct GNUNET_TESTING_Interpreter *is = cls; | 617 | GNUNET_assert (GNUNET_YES == result); |
622 | |||
623 | GNUNET_assert (NULL != is->sh); | ||
624 | GNUNET_free (is->sh); | ||
625 | is->sh = NULL; | ||
626 | } | 618 | } |
627 | 619 | ||
628 | /** | 620 | /** |
@@ -640,14 +632,14 @@ GNUNET_TESTING_add_netjail_helper (struct GNUNET_TESTING_Interpreter *is, | |||
640 | 632 | ||
641 | 633 | ||
642 | /** | 634 | /** |
643 | * Send Message to netjail nodes that a barrier can be advanced. | 635 | * Send Message to netjail nodes. |
644 | * | 636 | * |
645 | * @param is The interpreter. | 637 | * @param is The interpreter. |
646 | * @param global_node_number The node to inform. | 638 | * @param global_node_number The netjail node to inform. |
647 | * @param header The message to send. | 639 | * @param header The message to send. |
648 | */ | 640 | */ |
649 | void | 641 | void |
650 | GNUNET_TESTING_send_message_to_netjail (struct GNUNET_TESTING_Interpreter *is, | 642 | send_message_to_netjail (struct GNUNET_TESTING_Interpreter *is, |
651 | unsigned int global_node_number, | 643 | unsigned int global_node_number, |
652 | struct GNUNET_MessageHeader *header) | 644 | struct GNUNET_MessageHeader *header) |
653 | { | 645 | { |
@@ -655,31 +647,36 @@ GNUNET_TESTING_send_message_to_netjail (struct GNUNET_TESTING_Interpreter *is, | |||
655 | 647 | ||
656 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 648 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
657 | "send message of type %u to locals\n", | 649 | "send message of type %u to locals\n", |
658 | header->type); | 650 | ntohs (header->type)); |
659 | helper = is->helper[global_node_number - 1]; | 651 | helper = is->helper[global_node_number - 1]; |
660 | struct GNUNET_HELPER_SendHandle *sh = GNUNET_HELPER_send ( | 652 | struct GNUNET_HELPER_SendHandle *sh = GNUNET_HELPER_send ( |
661 | (struct GNUNET_HELPER_Handle *) helper, | 653 | (struct GNUNET_HELPER_Handle *) helper, |
662 | header, | 654 | header, |
663 | GNUNET_NO, | 655 | GNUNET_NO, |
664 | &clear_msg, | 656 | &clear_msg, |
665 | is); | 657 | NULL); |
666 | } | 658 | } |
667 | 659 | ||
668 | void | 660 | void |
669 | TST_interpreter_send_barrier_advance (struct GNUNET_TESTING_Interpreter *is, | 661 | TST_interpreter_send_barrier_crossable (struct GNUNET_TESTING_Interpreter *is, |
670 | const char *barrier_name, | 662 | const char *barrier_name, |
671 | unsigned int global_node_number) | 663 | unsigned int global_node_number) |
672 | { | 664 | { |
673 | struct CommandBarrierAdvanced *adm = GNUNET_new (struct | 665 | struct CommandBarrierCrossable *adm; |
674 | CommandBarrierAdvanced); | 666 | size_t msg_length; |
675 | size_t msg_length = sizeof(struct CommandBarrierAdvanced); | ||
676 | size_t name_len; | 667 | size_t name_len; |
668 | char *terminator = "\0"; | ||
677 | 669 | ||
678 | name_len = strlen (barrier_name) + 1; | 670 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
679 | adm->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_BARRIER_ADVANCED); | 671 | "send barrier name %s barrier_name\n", |
672 | barrier_name); | ||
673 | name_len = strlen (barrier_name); | ||
674 | msg_length = sizeof(struct CommandBarrierCrossable) + name_len + 1; | ||
675 | adm = GNUNET_malloc (msg_length); | ||
676 | adm->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_BARRIER_CROSSABLE); | ||
680 | adm->header.size = htons ((uint16_t) msg_length); | 677 | adm->header.size = htons ((uint16_t) msg_length); |
681 | memcpy (&adm[1], barrier_name, name_len); | 678 | memcpy (&adm[1], barrier_name, name_len); |
682 | GNUNET_TESTING_send_message_to_netjail (is, | 679 | send_message_to_netjail (is, |
683 | global_node_number, | 680 | global_node_number, |
684 | &adm->header); | 681 | &adm->header); |
685 | GNUNET_free (adm); | 682 | GNUNET_free (adm); |
@@ -697,13 +694,17 @@ free_barrier_node_cb (void *cls, | |||
697 | struct GNUNET_TESTING_Barrier *barrier = free_barrier_node_cb_cls->barrier; | 694 | struct GNUNET_TESTING_Barrier *barrier = free_barrier_node_cb_cls->barrier; |
698 | struct GNUNET_TESTING_Interpreter *is = free_barrier_node_cb_cls->is; | 695 | struct GNUNET_TESTING_Interpreter *is = free_barrier_node_cb_cls->is; |
699 | 696 | ||
697 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
698 | "free_barrier_node_cb\n"); | ||
700 | if (GNUNET_NO == is->finishing) | 699 | if (GNUNET_NO == is->finishing) |
701 | { | 700 | { |
702 | TST_interpreter_send_barrier_advance (is, | 701 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
702 | "TST_interpreter_send_barrier_crossable\n"); | ||
703 | TST_interpreter_send_barrier_crossable (is, | ||
703 | barrier->name, | 704 | barrier->name, |
704 | node->node_number); | 705 | node->node_number); |
705 | } | 706 | } |
706 | GNUNET_CONTAINER_multishortmap_remove (barrier->nodes, key, node); | 707 | GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multishortmap_remove (barrier->nodes, key, node)); |
707 | return GNUNET_YES; | 708 | return GNUNET_YES; |
708 | } | 709 | } |
709 | 710 | ||
@@ -728,7 +729,6 @@ TST_interpreter_get_barrier (struct GNUNET_TESTING_Interpreter *is, | |||
728 | &hc, | 729 | &hc, |
729 | sizeof (create_key)); | 730 | sizeof (create_key)); |
730 | barrier = GNUNET_CONTAINER_multishortmap_get (is->barriers, &create_key); | 731 | barrier = GNUNET_CONTAINER_multishortmap_get (is->barriers, &create_key); |
731 | // GNUNET_free (create_key); | ||
732 | return barrier; | 732 | return barrier; |
733 | } | 733 | } |
734 | 734 | ||
@@ -747,11 +747,17 @@ TST_interpreter_finish_attached_cmds (struct GNUNET_TESTING_Interpreter *is, | |||
747 | struct GNUNET_TESTING_Barrier *barrier = TST_interpreter_get_barrier (is, | 747 | struct GNUNET_TESTING_Barrier *barrier = TST_interpreter_get_barrier (is, |
748 | barrier_name); | 748 | barrier_name); |
749 | 749 | ||
750 | while (NULL != (pos = barrier->cmds_head)) | 750 | while (NULL != barrier && NULL != (pos = barrier->cmds_head)) |
751 | { | 751 | { |
752 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
753 | "command label %s\n", | ||
754 | pos->command->label); | ||
752 | if (GNUNET_NO == pos->command->ac->finished && | 755 | if (GNUNET_NO == pos->command->ac->finished && |
753 | GNUNET_NO == pos->command->asynchronous_finish) | 756 | GNUNET_NO == pos->command->asynchronous_finish) |
754 | { | 757 | { |
758 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
759 | "command label %s finish\n", | ||
760 | pos->command->label); | ||
755 | GNUNET_TESTING_async_finish (pos->command->ac); | 761 | GNUNET_TESTING_async_finish (pos->command->ac); |
756 | } | 762 | } |
757 | else if (GNUNET_NO == pos->command->ac->finished) | 763 | else if (GNUNET_NO == pos->command->ac->finished) |
@@ -761,18 +767,28 @@ TST_interpreter_finish_attached_cmds (struct GNUNET_TESTING_Interpreter *is, | |||
761 | GNUNET_CONTAINER_DLL_remove (barrier->cmds_head, | 767 | GNUNET_CONTAINER_DLL_remove (barrier->cmds_head, |
762 | barrier->cmds_tail, | 768 | barrier->cmds_tail, |
763 | pos); | 769 | pos); |
764 | // FIXME: DANGER DANGER! "pos" is a pointer to the array(!) element in an | 770 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
765 | // IS. This WILL crash and burn | 771 | "command entry label %s removed\n", |
766 | GNUNET_break (0); | 772 | pos->command->label); |
767 | GNUNET_free (pos); | 773 | GNUNET_free (pos); |
774 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
775 | "command entry freed\n"); | ||
776 | } | ||
777 | if (NULL != barrier->nodes) | ||
778 | { | ||
779 | free_barrier_node_cb_cls = GNUNET_new (struct FreeBarrierNodeCbCls); | ||
780 | free_barrier_node_cb_cls->barrier = barrier; | ||
781 | free_barrier_node_cb_cls->is = is; | ||
782 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
783 | "freeing nodes\n"); | ||
784 | GNUNET_CONTAINER_multishortmap_iterate (barrier->nodes, free_barrier_node_cb, | ||
785 | free_barrier_node_cb_cls); | ||
786 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
787 | "nodes freed\n"); | ||
788 | GNUNET_free (free_barrier_node_cb_cls); | ||
789 | GNUNET_CONTAINER_multishortmap_destroy (barrier->nodes); | ||
790 | barrier->nodes = NULL; | ||
768 | } | 791 | } |
769 | free_barrier_node_cb_cls = GNUNET_new (struct FreeBarrierNodeCbCls); | ||
770 | free_barrier_node_cb_cls->barrier = barrier; | ||
771 | free_barrier_node_cb_cls->is = is; | ||
772 | GNUNET_CONTAINER_multishortmap_iterate (barrier->nodes, free_barrier_node_cb, | ||
773 | free_barrier_node_cb_cls); | ||
774 | GNUNET_CONTAINER_multishortmap_destroy (barrier->nodes); | ||
775 | GNUNET_free (free_barrier_node_cb_cls); | ||
776 | } | 792 | } |
777 | 793 | ||
778 | 794 | ||
@@ -786,12 +802,16 @@ free_barriers_cb (void *cls, | |||
786 | struct CommandListEntry *pos; | 802 | struct CommandListEntry *pos; |
787 | struct FreeBarrierNodeCbCls *free_barrier_node_cb_cls; | 803 | struct FreeBarrierNodeCbCls *free_barrier_node_cb_cls; |
788 | 804 | ||
789 | free_barrier_node_cb_cls = GNUNET_new (struct FreeBarrierNodeCbCls); | 805 | if (NULL != barrier->nodes) |
790 | free_barrier_node_cb_cls->barrier = barrier; | 806 | { |
791 | free_barrier_node_cb_cls->is = is; | 807 | free_barrier_node_cb_cls = GNUNET_new (struct FreeBarrierNodeCbCls); |
792 | GNUNET_CONTAINER_multishortmap_iterate (barrier->nodes, free_barrier_node_cb, | 808 | free_barrier_node_cb_cls->barrier = barrier; |
793 | free_barrier_node_cb_cls); | 809 | free_barrier_node_cb_cls->is = is; |
794 | GNUNET_CONTAINER_multishortmap_destroy (barrier->nodes); | 810 | GNUNET_CONTAINER_multishortmap_iterate (barrier->nodes, free_barrier_node_cb, |
811 | free_barrier_node_cb_cls); | ||
812 | GNUNET_CONTAINER_multishortmap_destroy (barrier->nodes); | ||
813 | barrier->nodes = NULL; | ||
814 | } | ||
795 | 815 | ||
796 | while (NULL != (pos = barrier->cmds_head)) | 816 | while (NULL != (pos = barrier->cmds_head)) |
797 | { | 817 | { |