]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
endpoints: Fix failing unit tests from r419196
authorMatthew Jordan <mjordan@digium.com>
Wed, 23 Jul 2014 16:46:13 +0000 (16:46 +0000)
committerMatthew Jordan <mjordan@digium.com>
Wed, 23 Jul 2014 16:46:13 +0000 (16:46 +0000)
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.
........

Merged revisions 419318 from http://svn.asterisk.org/svn/asterisk/branches/12

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@419319 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/endpoints.c
tests/test_stasis_endpoints.c

index 985f6e634eebfcdae7322d748ac224cc660d05a7..07687eecc5066f515f6b1fe009870aa3d54b2968 100644 (file)
@@ -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) {
index 85d4afd17ed2df456c5271a11cc75de9f9bd0944..7ac52917a80d1f214f790196ed70646162e424e5 100644 (file)
@@ -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);