aboutsummaryrefslogtreecommitdiff
path: root/src/testbed
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-07-20 14:49:06 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-07-20 14:49:06 +0000
commit9bc7c8f647057e7861d086d9cfde4e68b24ac162 (patch)
tree97dcca677cad5f638f7ad7dd86a5a110d325155c /src/testbed
parenta40b39dd8a07f9c8ef080d643139d19e12267cfa (diff)
downloadgnunet-9bc7c8f647057e7861d086d9cfde4e68b24ac162.tar.gz
gnunet-9bc7c8f647057e7861d086d9cfde4e68b24ac162.zip
peer start and stop
Diffstat (limited to 'src/testbed')
-rw-r--r--src/testbed/gnunet-service-testbed.c4
-rw-r--r--src/testbed/test_testbed_api.c34
-rw-r--r--src/testbed/testbed_api.c69
-rw-r--r--src/testbed/testbed_api_peers.c2
4 files changed, 93 insertions, 16 deletions
diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c
index b0fb72228..7fc9ad219 100644
--- a/src/testbed/gnunet-service-testbed.c
+++ b/src/testbed/gnunet-service-testbed.c
@@ -789,6 +789,7 @@ handle_init (void *cls,
789 "Cannot determine the ip of master controller: %s\n", STRERROR (errno)); 789 "Cannot determine the ip of master controller: %s\n", STRERROR (errno));
790 GNUNET_assert (0); 790 GNUNET_assert (0);
791 } 791 }
792 LOG_DEBUG ("Master Controller IP: %s\n", master_context->master_ip);
792 master_context->system = 793 master_context->system =
793 GNUNET_TESTING_system_create ("testbed", master_context->master_ip); 794 GNUNET_TESTING_system_create ("testbed", master_context->master_ip);
794 host = GNUNET_TESTBED_host_create_with_id (master_context->host_id, 795 host = GNUNET_TESTBED_host_create_with_id (master_context->host_id,
@@ -1316,8 +1317,7 @@ handle_peer_start (void *cls,
1316 msg = (const struct GNUNET_TESTBED_PeerStartMessage *) message; 1317 msg = (const struct GNUNET_TESTBED_PeerStartMessage *) message;
1317 peer_id = ntohl (msg->peer_id); 1318 peer_id = ntohl (msg->peer_id);
1318 if ((peer_id >= peer_list_size) 1319 if ((peer_id >= peer_list_size)
1319 || (NULL == peer_list[peer_id]) 1320 || (NULL == peer_list[peer_id]))
1320 || (GNUNET_OK != GNUNET_TESTING_peer_start (peer_list[peer_id]->peer)))
1321 { 1321 {
1322 GNUNET_break (0); 1322 GNUNET_break (0);
1323 /* FIXME: reply with failure message or forward to slave controller */ 1323 /* FIXME: reply with failure message or forward to slave controller */
diff --git a/src/testbed/test_testbed_api.c b/src/testbed/test_testbed_api.c
index 3ae6dbd67..3bb45f730 100644
--- a/src/testbed/test_testbed_api.c
+++ b/src/testbed/test_testbed_api.c
@@ -140,15 +140,29 @@ do_abort (void *cls, const const struct GNUNET_SCHEDULER_TaskContext *tc)
140static void 140static void
141controller_cb(void *cls, const struct GNUNET_TESTBED_EventInformation *event) 141controller_cb(void *cls, const struct GNUNET_TESTBED_EventInformation *event)
142{ 142{
143 GNUNET_assert (GNUNET_TESTBED_ET_OPERATION_FINISHED == event->type); 143 switch (event->type)
144 GNUNET_assert (event->details.operation_finished.operation == operation); 144 {
145 GNUNET_assert (NULL == event->details.operation_finished.op_cls); 145 case GNUNET_TESTBED_ET_OPERATION_FINISHED:
146 GNUNET_assert (NULL == event->details.operation_finished.emsg); 146 GNUNET_assert (event->details.operation_finished.operation == operation);
147 GNUNET_assert (GNUNET_TESTBED_PIT_GENERIC == 147 GNUNET_assert (NULL == event->details.operation_finished.op_cls);
148 event->details.operation_finished.pit); 148 GNUNET_assert (NULL == event->details.operation_finished.emsg);
149 GNUNET_assert (NULL == event->details.operation_finished.op_result.generic); 149 GNUNET_assert (GNUNET_TESTBED_PIT_GENERIC ==
150 result = GNUNET_YES; 150 event->details.operation_finished.pit);
151 GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); 151 GNUNET_assert (NULL == event->details.operation_finished.op_result.generic);
152 break;
153 case GNUNET_TESTBED_ET_PEER_START:
154 GNUNET_assert (event->details.peer_start.host == host);
155 GNUNET_assert (event->details.peer_start.peer == peer);
156 operation = GNUNET_TESTBED_peer_stop (peer);
157 break;
158 case GNUNET_TESTBED_ET_PEER_STOP:
159 GNUNET_assert (event->details.peer_stop.peer == peer);
160 result = GNUNET_YES;
161 GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
162 break;
163 default:
164 GNUNET_assert (0); /* We should never reach this state */
165 }
152} 166}
153 167
154 168
@@ -171,7 +185,7 @@ peer_create_cb (void *cls,
171 GNUNET_assert (NULL != peer); 185 GNUNET_assert (NULL != peer);
172 GNUNET_assert (NULL != peer_ptr); 186 GNUNET_assert (NULL != peer_ptr);
173 *peer_ptr = peer; 187 *peer_ptr = peer;
174 operation = GNUNET_TESTBED_peer_destroy (peer); 188 operation = GNUNET_TESTBED_peer_start (peer);
175 GNUNET_assert (NULL != operation); 189 GNUNET_assert (NULL != operation);
176} 190}
177 191
diff --git a/src/testbed/testbed_api.c b/src/testbed/testbed_api.c
index f7d58e9bb..e03f9d3c9 100644
--- a/src/testbed/testbed_api.c
+++ b/src/testbed/testbed_api.c
@@ -272,15 +272,15 @@ handle_opsuccess (struct GNUNET_TESTBED_Controller *c,
272 break; 272 break;
273 default: 273 default:
274 GNUNET_break (0); 274 GNUNET_break (0);
275 } 275 }
276 GNUNET_CONTAINER_DLL_remove (c->op_head, c->op_tail, op);
277 GNUNET_free (op);
276 if (NULL != event) 278 if (NULL != event)
277 { 279 {
278 if (NULL != c->cc) 280 if (NULL != c->cc)
279 c->cc (c->cc_cls, event); 281 c->cc (c->cc_cls, event);
280 GNUNET_free (event); 282 GNUNET_free (event);
281 } 283 }
282 GNUNET_CONTAINER_DLL_remove (c->op_head, c->op_tail, op);
283 GNUNET_free (op);
284 return GNUNET_YES; 284 return GNUNET_YES;
285} 285}
286 286
@@ -337,6 +337,65 @@ handle_peer_create_success (struct GNUNET_TESTBED_Controller *c,
337 337
338 338
339/** 339/**
340 * Handler for GNUNET_MESSAGE_TYPE_TESTBED_PEEREVENT message from
341 * controller (testbed service)
342 *
343 * @param c the controller handler
344 * @param msg message received
345 * @return GNUNET_YES if we can continue receiving from service; GNUNET_NO if
346 * not
347 */
348static int
349handle_peer_event (struct GNUNET_TESTBED_Controller *c,
350 const struct GNUNET_TESTBED_PeerEventMessage *msg)
351{
352 struct GNUNET_TESTBED_Operation *op;
353 struct GNUNET_TESTBED_Peer *peer;
354 struct GNUNET_TESTBED_EventInformation event;
355 uint64_t op_id;
356
357 GNUNET_assert (sizeof (struct GNUNET_TESTBED_PeerEventMessage)
358 == ntohs (msg->header.size));
359 op_id = GNUNET_ntohll (msg->operation_id);
360 for (op = c->op_head; NULL != op; op = op->next)
361 {
362 if (op->operation_id == op_id)
363 break;
364 }
365 if (NULL == op)
366 {
367 LOG_DEBUG ("Operation not found\n");
368 return GNUNET_YES;
369 }
370 GNUNET_assert ((OP_PEER_START == op->type) || (OP_PEER_STOP == op->type));
371 peer = op->data;
372 GNUNET_assert (NULL != peer);
373 event.type = (enum GNUNET_TESTBED_EventType) ntohl (msg->event_type);
374 switch (event.type)
375 {
376 case GNUNET_TESTBED_ET_PEER_START:
377 event.details.peer_start.host = peer->host;
378 event.details.peer_start.peer = peer;
379 break;
380 case GNUNET_TESTBED_ET_PEER_STOP:
381 event.details.peer_stop.peer = peer;
382 break;
383 default:
384 GNUNET_assert (0); /* We should never reach this state */
385 }
386 GNUNET_CONTAINER_DLL_remove (c->op_head, c->op_tail, op);
387 GNUNET_free (op);
388 if (0 != ((GNUNET_TESTBED_ET_PEER_START | GNUNET_TESTBED_ET_PEER_STOP)
389 & c->event_mask))
390 {
391 if (NULL != c->cc)
392 c->cc (c->cc_cls, &event);
393 }
394 return GNUNET_YES;
395}
396
397
398/**
340 * Handler for messages from controller (testbed service) 399 * Handler for messages from controller (testbed service)
341 * 400 *
342 * @param cls the controller handler 401 * @param cls the controller handler
@@ -374,6 +433,10 @@ message_handler (void *cls, const struct GNUNET_MessageHeader *msg)
374 handle_peer_create_success 433 handle_peer_create_success
375 (c, (const struct GNUNET_TESTBED_PeerCreateSuccessEventMessage *)msg); 434 (c, (const struct GNUNET_TESTBED_PeerCreateSuccessEventMessage *)msg);
376 break; 435 break;
436 case GNUNET_MESSAGE_TYPE_TESTBED_PEEREVENT:
437 status =
438 handle_peer_event (c, (const struct GNUNET_TESTBED_PeerEventMessage *) msg);
439 break;
377 default: 440 default:
378 GNUNET_break (0); 441 GNUNET_break (0);
379 } 442 }
diff --git a/src/testbed/testbed_api_peers.c b/src/testbed/testbed_api_peers.c
index 0010105dc..2abf4ade1 100644
--- a/src/testbed/testbed_api_peers.c
+++ b/src/testbed/testbed_api_peers.c
@@ -195,7 +195,7 @@ GNUNET_TESTBED_peer_start (struct GNUNET_TESTBED_Peer *peer)
195 GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head, 195 GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head,
196 peer->controller->op_tail, op); 196 peer->controller->op_tail, op);
197 GNUNET_TESTBED_queue_message_ (peer->controller, &msg->header); 197 GNUNET_TESTBED_queue_message_ (peer->controller, &msg->header);
198 return NULL; 198 return op;
199} 199}
200 200
201 201