From: Matthew Jordan Date: Wed, 23 Jul 2014 16:45:15 +0000 (+0000) Subject: endpoints: Fix failing unit tests from r419196 X-Git-Tag: 12.5.0-rc1~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=429724a166bdb2cb7dc125c2b4cb7b831f031a4d;p=thirdparty%2Fasterisk.git endpoints: Fix failing unit tests from r419196 This patch does two things: (1) It updates the unit tests to expect additional stasis messages. More messages are now sent to the endpoint topic, due to forwarding all channel messages and the forwarding relationship set up between endpoints themselves. (2) Remove the technology forwarding subscription during ast_endpoint_shutdown. This prevents an improper double shutdown of an endpoint from occurring. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@419318 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/endpoints.c b/main/endpoints.c index 985f6e634e..07687eecc5 100644 --- a/main/endpoints.c +++ b/main/endpoints.c @@ -194,8 +194,6 @@ static void endpoint_dtor(void *obj) ao2_cleanup(endpoint->router); endpoint->router = NULL; - endpoint->tech_forward = stasis_forward_cancel(endpoint->tech_forward); - stasis_cp_single_unsubscribe(endpoint->topics); endpoint->topics = NULL; @@ -368,6 +366,7 @@ void ast_endpoint_shutdown(struct ast_endpoint *endpoint) } ao2_unlink(endpoints, endpoint); + endpoint->tech_forward = stasis_forward_cancel(endpoint->tech_forward); clear_msg = create_endpoint_snapshot_message(endpoint); if (clear_msg) { diff --git a/tests/test_stasis_endpoints.c b/tests/test_stasis_endpoints.c index 85d4afd17e..7ac52917a8 100644 --- a/tests/test_stasis_endpoints.c +++ b/tests/test_stasis_endpoints.c @@ -168,7 +168,7 @@ AST_TEST_DEFINE(cache_clear) cache_update, __func__, STASIS_SINK_DEFAULT_WAIT); ast_test_validate(test, 0 <= message_index); - /* First message should be a cache creation entry for our endpont */ + /* First message should be a cache creation entry for our endpoint */ msg = sink->messages[message_index]; type = stasis_message_type(msg); ast_test_validate(test, stasis_cache_update_type() == type); @@ -182,7 +182,10 @@ AST_TEST_DEFINE(cache_clear) ast_endpoint_shutdown(uut); uut = NULL; - message_index = stasis_message_sink_wait_for(sink, message_index + 1, + + /* Note: there's a few messages between the creation and the clear. + * Wait for all of them... */ + message_index = stasis_message_sink_wait_for(sink, message_index + 4, cache_update, __func__, STASIS_SINK_DEFAULT_WAIT); ast_test_validate(test, 0 <= message_index); /* Now we should have a cache removal entry */ @@ -252,20 +255,28 @@ AST_TEST_DEFINE(channel_messages) ast_hangup(chan); chan = NULL; - actual_count = stasis_message_sink_wait_for_count(sink, 4, + actual_count = stasis_message_sink_wait_for_count(sink, 6, STASIS_SINK_DEFAULT_WAIT); - ast_test_validate(test, 4 == actual_count); + ast_test_validate(test, 6 == actual_count); msg = sink->messages[1]; type = stasis_message_type(msg); + ast_test_validate(test, stasis_cache_update_type() == type); + + msg = sink->messages[2]; + type = stasis_message_type(msg); ast_test_validate(test, ast_channel_snapshot_type() == type); + msg = sink->messages[3]; + type = stasis_message_type(msg); + ast_test_validate(test, stasis_cache_update_type() == type); + /* The ordering of the cache clear and endpoint snapshot are * unspecified */ - msg = sink->messages[2]; + msg = sink->messages[4]; if (stasis_message_type(msg) == stasis_cache_clear_type()) { /* Okay; the next message should be the endpoint snapshot */ - msg = sink->messages[3]; + msg = sink->messages[5]; } type = stasis_message_type(msg);