diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-07-20 14:49:06 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-07-20 14:49:06 +0000 |
commit | 9bc7c8f647057e7861d086d9cfde4e68b24ac162 (patch) | |
tree | 97dcca677cad5f638f7ad7dd86a5a110d325155c /src/testbed | |
parent | a40b39dd8a07f9c8ef080d643139d19e12267cfa (diff) | |
download | gnunet-9bc7c8f647057e7861d086d9cfde4e68b24ac162.tar.gz gnunet-9bc7c8f647057e7861d086d9cfde4e68b24ac162.zip |
peer start and stop
Diffstat (limited to 'src/testbed')
-rw-r--r-- | src/testbed/gnunet-service-testbed.c | 4 | ||||
-rw-r--r-- | src/testbed/test_testbed_api.c | 34 | ||||
-rw-r--r-- | src/testbed/testbed_api.c | 69 | ||||
-rw-r--r-- | src/testbed/testbed_api_peers.c | 2 |
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) | |||
140 | static void | 140 | static void |
141 | controller_cb(void *cls, const struct GNUNET_TESTBED_EventInformation *event) | 141 | controller_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 | */ | ||
348 | static int | ||
349 | handle_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 | ||