aboutsummaryrefslogtreecommitdiff
path: root/src/testbed
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2016-10-27 13:00:37 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2016-10-27 13:00:37 +0000
commit251c9287514c0e3a2cf6a3f6f978a27a49e65085 (patch)
tree0516668b8721fe2f320d3f2afcd014239ac6fe2b /src/testbed
parent7c5d2c6f7da4a48cbb997791d1dc514c842097a9 (diff)
downloadgnunet-251c9287514c0e3a2cf6a3f6f978a27a49e65085.tar.gz
gnunet-251c9287514c0e3a2cf6a3f6f978a27a49e65085.zip
Fix #4718: Do not echo BARRIER_STATUS messages back to the main controller/test driverAlso add a few FIXMEs to be fixed and fix testcase logic to accommodate new scheduler shutdown semantics
Diffstat (limited to 'src/testbed')
-rw-r--r--src/testbed/gnunet-service-testbed_barriers.c16
-rw-r--r--src/testbed/test_testbed_api_barriers.c44
2 files changed, 35 insertions, 25 deletions
diff --git a/src/testbed/gnunet-service-testbed_barriers.c b/src/testbed/gnunet-service-testbed_barriers.c
index 831bc3c6d..638263103 100644
--- a/src/testbed/gnunet-service-testbed_barriers.c
+++ b/src/testbed/gnunet-service-testbed_barriers.c
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet. 2 This file is part of GNUnet.
3 Copyright (C) 2008--2013 GNUnet e.V. 3 Copyright (C) 2008--2016 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
6 it under the terms of the GNU General Public License as published 6 it under the terms of the GNU General Public License as published
@@ -234,7 +234,7 @@ remove_barrier (struct Barrier *barrier)
234 GNUNET_CONTAINER_DLL_remove (barrier->head, 234 GNUNET_CONTAINER_DLL_remove (barrier->head,
235 barrier->tail, 235 barrier->tail,
236 ctx); 236 ctx);
237 GNUNET_free (ctx); 237 ctx->barrier = NULL;
238 } 238 }
239 GNUNET_free (barrier->name); 239 GNUNET_free (barrier->name);
240 GNUNET_free (barrier); 240 GNUNET_free (barrier);
@@ -546,6 +546,8 @@ wbarrier_status_cb (void *cls,
546 struct WBarrier *wrapper = cls; 546 struct WBarrier *wrapper = cls;
547 struct Barrier *barrier = wrapper->barrier; 547 struct Barrier *barrier = wrapper->barrier;
548 548
549 //FIXME: why are we removing the wrapper? They should only be removed if they
550 //barrier is crossed or errored out
549 GNUNET_assert (b_ == wrapper->hbarrier); 551 GNUNET_assert (b_ == wrapper->hbarrier);
550 wrapper->hbarrier = NULL; 552 wrapper->hbarrier = NULL;
551 GNUNET_CONTAINER_DLL_remove (barrier->whead, 553 GNUNET_CONTAINER_DLL_remove (barrier->whead,
@@ -713,6 +715,7 @@ handle_barrier_init (void *cls,
713 GNUNET_CONTAINER_DLL_insert_tail (barrier->whead, 715 GNUNET_CONTAINER_DLL_insert_tail (barrier->whead,
714 barrier->wtail, 716 barrier->wtail,
715 wrapper); 717 wrapper);
718 //FIXME: Increment barrier->num_wbarriers
716 wrapper->hbarrier = GNUNET_TESTBED_barrier_init_ (slave->controller, 719 wrapper->hbarrier = GNUNET_TESTBED_barrier_init_ (slave->controller,
717 barrier->name, 720 barrier->name,
718 barrier->quorum, 721 barrier->quorum,
@@ -898,16 +901,13 @@ handle_barrier_status (void *cls,
898 return; 901 return;
899 } 902 }
900 GNUNET_SERVICE_client_continue (client); 903 GNUNET_SERVICE_client_continue (client);
901 while (NULL != (client_ctx = barrier->head)) /* Notify peers */ 904 for(client_ctx = barrier->head; NULL != client_ctx; client_ctx = client_ctx->next) /* Notify peers */
902 { 905 {
903 env = GNUNET_MQ_msg_copy (&msg->header); 906 env = GNUNET_MQ_msg_copy (&msg->header);
904 GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), 907 GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client_ctx->client),
905 env); 908 env);
906 GNUNET_CONTAINER_DLL_remove (barrier->head,
907 barrier->tail,
908 client_ctx);
909 client_ctx->barrier = NULL;
910 } 909 }
910 //FIXME: Send status to wrappers if they exist
911} 911}
912 912
913/* end of gnunet-service-testbed_barriers.c */ 913/* end of gnunet-service-testbed_barriers.c */
diff --git a/src/testbed/test_testbed_api_barriers.c b/src/testbed/test_testbed_api_barriers.c
index 01c745a75..e712e2d5a 100644
--- a/src/testbed/test_testbed_api_barriers.c
+++ b/src/testbed/test_testbed_api_barriers.c
@@ -50,7 +50,7 @@ struct GNUNET_TESTBED_Barrier *barrier;
50/** 50/**
51 * Identifier for the shutdown task 51 * Identifier for the shutdown task
52 */ 52 */
53static struct GNUNET_SCHEDULER_Task *shutdown_task; 53static struct GNUNET_SCHEDULER_Task *timeout_task;
54 54
55/** 55/**
56 * Result of this test case 56 * Result of this test case
@@ -59,20 +59,30 @@ static int result;
59 59
60 60
61/** 61/**
62 * Shutdown this test case when it takes too long 62 * Handle SIGINT and SIGTERM
63 *
64 * @param cls NULL
65 */ 63 */
66static void 64static void
67do_shutdown (void *cls) 65shutdown_handler(void *cls)
68{ 66{
69 shutdown_task = NULL; 67 if (NULL != timeout_task)
70 if (NULL != barrier)
71 { 68 {
72 GNUNET_TESTBED_barrier_cancel (barrier); 69 GNUNET_SCHEDULER_cancel(timeout_task);
73 barrier = NULL; 70 timeout_task = NULL;
74 } 71 }
72}
75 73
74
75/**
76 * Shutdown this test case when it takes too long
77 *
78 * @param cls NULL
79 */
80static void
81do_timeout (void *cls)
82{
83 timeout_task = NULL;
84 if (barrier != NULL)
85 GNUNET_TESTBED_barrier_cancel (barrier);
76 GNUNET_SCHEDULER_shutdown (); 86 GNUNET_SCHEDULER_shutdown ();
77} 87}
78 88
@@ -112,20 +122,19 @@ barrier_cb (void *cls,
112 LOG (GNUNET_ERROR_TYPE_ERROR, 122 LOG (GNUNET_ERROR_TYPE_ERROR,
113 "Barrier initialisation failed: %s", 123 "Barrier initialisation failed: %s",
114 (NULL == emsg) ? "unknown reason" : emsg); 124 (NULL == emsg) ? "unknown reason" : emsg);
115 barrier = NULL; 125 break;
116 GNUNET_SCHEDULER_shutdown ();
117 return;
118 case GNUNET_TESTBED_BARRIERSTATUS_CROSSED: 126 case GNUNET_TESTBED_BARRIERSTATUS_CROSSED:
119 LOG (GNUNET_ERROR_TYPE_INFO, 127 LOG (GNUNET_ERROR_TYPE_INFO,
120 "Barrier crossed\n"); 128 "Barrier crossed\n");
121 if (old_status == GNUNET_TESTBED_BARRIERSTATUS_INITIALISED) 129 if (old_status == GNUNET_TESTBED_BARRIERSTATUS_INITIALISED)
122 result = GNUNET_OK; 130 result = GNUNET_OK;
123 barrier = NULL; 131 break;
124 GNUNET_SCHEDULER_shutdown ();
125 return;
126 default: 132 default:
127 GNUNET_assert (0); 133 GNUNET_assert (0);
134 return;
128 } 135 }
136 barrier = NULL;
137 GNUNET_SCHEDULER_shutdown ();
129} 138}
130 139
131 140
@@ -165,11 +174,12 @@ test_master (void *cls,
165 100, 174 100,
166 &barrier_cb, 175 &barrier_cb,
167 NULL); 176 NULL);
168 shutdown_task = 177 timeout_task =
169 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 178 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
170 (GNUNET_TIME_UNIT_SECONDS, 179 (GNUNET_TIME_UNIT_SECONDS,
171 10 * (NUM_PEERS + 1)), 180 10 * (NUM_PEERS + 1)),
172 &do_shutdown, NULL); 181 &do_timeout, NULL);
182 GNUNET_SCHEDULER_add_shutdown(&shutdown_handler, NULL);
173} 183}
174 184
175 185