aboutsummaryrefslogtreecommitdiff
path: root/src/testing/testing_api_loop.c
diff options
context:
space:
mode:
authort3sserakt <t3ss@posteo.de>2023-01-06 21:02:55 +0100
committert3sserakt <t3ss@posteo.de>2023-01-06 21:02:55 +0100
commit2c2b2911e1585dc378dbb88d4dd6aaec37b00316 (patch)
tree701cd3a2304a7e1fb74553c78d8a3d2a1cbcc6c2 /src/testing/testing_api_loop.c
parentd9f74f1751f0c4e08ddb2ce5f81a8cf8e4dcf1a2 (diff)
downloadgnunet-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.c104
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 @@
41struct GNUNET_TESTING_Interpreter 41struct 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)
618static void 614static void
619clear_msg (void *cls, int result) 615clear_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 */
649void 641void
650GNUNET_TESTING_send_message_to_netjail (struct GNUNET_TESTING_Interpreter *is, 642send_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
668void 660void
669TST_interpreter_send_barrier_advance (struct GNUNET_TESTING_Interpreter *is, 661TST_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 {