[Asterisk-code-review] tests/channels/pjsip/subscriptions/ast restart: Fix race con... (testsuite[master])
Richard Mudgett
asteriskteam at digium.com
Fri Mar 10 14:15:40 CST 2017
Richard Mudgett has uploaded a new change for review. ( https://gerrit.asterisk.org/5153 )
Change subject: tests/channels/pjsip/subscriptions/ast_restart: Fix race condition.
......................................................................
tests/channels/pjsip/subscriptions/ast_restart: Fix race condition.
The test is failing on fast machines because they restart and fully boot
before the testsuite reconnects the AMI connection. As a result the
expected second SUBSCRIPTION_ESTABLISHED event is never seen.
* Instead of ping-ponging back and forth between Asterisk and the SIPp
scenerio, change the test be more SIPp scenario driven.
* Enable PJSIP message debugging in the config file to ensure that logging
messages are enabled early enough to see the subscription recreation
NOTIFY message on fast machines.
Change-Id: Ie79c5ca9954287c1dda42a24305ccc8bdd0a6e07
---
M tests/channels/pjsip/subscriptions/ast_restart/configs/ast1/pjsip.conf
M tests/channels/pjsip/subscriptions/ast_restart/sipp/subscribe.xml
M tests/channels/pjsip/subscriptions/ast_restart/test-config.yaml
3 files changed, 35 insertions(+), 95 deletions(-)
git pull ssh://gerrit.asterisk.org:29418/testsuite refs/changes/53/5153/1
diff --git a/tests/channels/pjsip/subscriptions/ast_restart/configs/ast1/pjsip.conf b/tests/channels/pjsip/subscriptions/ast_restart/configs/ast1/pjsip.conf
index 148bbf6..ead6d27 100644
--- a/tests/channels/pjsip/subscriptions/ast_restart/configs/ast1/pjsip.conf
+++ b/tests/channels/pjsip/subscriptions/ast_restart/configs/ast1/pjsip.conf
@@ -1,3 +1,11 @@
+[global]
+type=global
+
+; Enable debugging so we can see the SIP messages right after a restart.
+; The SIPp test case module will turn it on but it may be too late for
+; the subscription recreation to be seen after the restart.
+debug=yes
+
[local]
type=transport
protocol=udp
diff --git a/tests/channels/pjsip/subscriptions/ast_restart/sipp/subscribe.xml b/tests/channels/pjsip/subscriptions/ast_restart/sipp/subscribe.xml
index e87351a..1ed154d 100644
--- a/tests/channels/pjsip/subscriptions/ast_restart/sipp/subscribe.xml
+++ b/tests/channels/pjsip/subscriptions/ast_restart/sipp/subscribe.xml
@@ -63,22 +63,8 @@
]]>
</send>
- <!-- NOTIFY for AMI reconnecting and then changing the device state -->
- <recv request="NOTIFY" crlf="true">
- </recv>
-
- <send>
- <![CDATA[
- SIP/2.0 200 OK
- [last_Via:]
- [last_From:]
- [last_To:]
- [last_Call-ID:]
- [last_CSeq:]
- Contact: <sip:[local_ip]:[local_port];transport=[transport]>
- Content-Length: 0
- ]]>
- </send>
+ <!-- Wait for the testsuite to reconnect AMI to catch the subscription refresh -->
+ <pause milliseconds="5000" />
<!-- Refresh subscription -->
<send retrans="500">
@@ -106,23 +92,6 @@
<action>
<ereg regexp="active;expires=[5,6][0,9][0,5-9]" check_it="true" search_in="hdr" header="Subscription-State" assign_to="resubstate" />
</action>
- </recv>
-
- <send>
- <![CDATA[
- SIP/2.0 200 OK
- [last_Via:]
- [last_From:]
- [last_To:]
- [last_Call-ID:]
- [last_CSeq:]
- Contact: <sip:[local_ip]:[local_port];transport=[transport]>
- Content-Length: 0
- ]]>
- </send>
-
- <!-- NOTIFY for AMI changing the device state again -->
- <recv request="NOTIFY" crlf="true">
</recv>
<send>
@@ -179,6 +148,9 @@
]]>
</send>
+ <!-- Wait for the testsuite to process the Unsubscribe -->
+ <pause milliseconds="2000" />
+
<Reference variables="substate,resubstate,unsubstate" />
</scenario>
diff --git a/tests/channels/pjsip/subscriptions/ast_restart/test-config.yaml b/tests/channels/pjsip/subscriptions/ast_restart/test-config.yaml
index 80470ed..63a2e3f 100644
--- a/tests/channels/pjsip/subscriptions/ast_restart/test-config.yaml
+++ b/tests/channels/pjsip/subscriptions/ast_restart/test-config.yaml
@@ -2,18 +2,14 @@
summary: 'Test subscription persistence over Asterisk restarts'
description: |
Tests that subscriptions survive an Asterisk restart.
- The test ping-pongs between the SIPp scenario and Asterisk
- by waiting for the other to signal completion of key events.
- 1) A SIPp scenario requests a subscription.
+ 1) The SIPp scenario requests a subscription.
2) Asterisk is restarted when the subscription gets established.
- 3) Asterisk changes the extension custom device state after the
- restart recreates the subscription.
- 4) The SIPp scenario refreshes the subscription.
- 5) Asterisk changes the extension custom device state again after
- the subscription is refreshed.
- 6) The SIPp scenario unsubscribes to complete the scenario.
- 7) The test completes successfully when Asterisk sees the
- subscription get terminated.
+ 3) The SIPp scenario sees the recreated subscription NOTIFY and
+ waits five seconds for the testsuite to reconnect the AMI connection.
+ 4) The SIPp scenario then refreshes the subscription.
+ 5) The SIPp scenario then unsubscribes and waits two seconds
+ for the testsuite to process the event before completing the
+ scenario.
properties:
minversion: [ '13.14.0', '14.3.0' ]
@@ -23,7 +19,6 @@
- python : 'starpy'
- sipp :
version : 'v3.0'
- - asterisk : 'func_devstate'
- asterisk : 'res_pjsip'
- asterisk : 'res_pjsip_pubsub'
tags:
@@ -39,7 +34,7 @@
typename: 'pluggable_modules.EventActionModule'
sipp-config:
- stop-after-scenarios: False
+ stop-after-scenarios: True
fail-on-any: True
# Indicate that the test is going to be restarting Asterisk so
@@ -57,8 +52,10 @@
ami-config:
-
- # Event generated on initial subscription creation
- # and on subscription recreation after a restart.
+ # Event generated on initial subscription creation.
+ # Event also generated on subscription recreation after
+ # a restart but we may not see it depending on timing
+ # or the speed of the machine.
ami-events:
conditions:
match:
@@ -77,31 +74,19 @@
Command: 'core restart gracefully'
-
# Wake up after Asterisk is fully booted again.
- # This tends to be too early for the restart NOTIFY to have
- # a chance to go out. Recreating persistent subscriptions
- # has to wait for Asterisk to be fully booted to ensure that
- # all pjsip modules are loaded and ready.
+ #
+ # Depending upon timing or the speed of the machine
+ # this event is either too early or too late to get
+ # Asterisk and the SIPp scenario resynchronized after
+ # recreating the persistent subscriptions. AMI either
+ # reconnects before Asterisk is fully booted and thus
+ # the persistent subscriptions haven't been recreated yet.
+ # Or AMI reconnects well after Asterisk has fully booted
+ # and the persistent subscriptions are already recreated.
+ #
# We'll just require that we get restarted once.
ami-restart:
count: '1'
- -
- ami-events:
- conditions:
- match:
- Event: 'TestEvent'
- State: 'SUBSCRIPTION_ESTABLISHED'
- requirements:
- match:
- Resource: 'alice'
- # Trigger on the second event
- count: '2'
- trigger-on-count: True
- ami-actions:
- action:
- Action: 'SetVar'
- ActionID: '23456'
- Variable: 'DEVICE_STATE(Custom:hitchcock)'
- Value: 'BUSY'
-
ami-events:
conditions:
@@ -112,30 +97,6 @@
match:
Resource: 'alice'
count: '1'
- trigger-on-count: True
- ami-actions:
- # Changing the custom device state again so we can re-run
- # the test without a previous run possibly interfering.
- # This is basically paranoia because I think the AstDB is
- # deleted between tests. However, refreshing the subscription
- # further tests that the subscription dialog is fully
- # recreated after the restart.
- action:
- Action: 'SetVar'
- ActionID: '34567'
- Variable: 'DEVICE_STATE(Custom:hitchcock)'
- Value: 'NOT_INUSE'
- -
- ami-events:
- conditions:
- match:
- Event: 'TestEvent'
- State: 'SUBSCRIPTION_STATE_CHANGED'
- requirements:
- match:
- Resource: 'alice'
- # Changed the custom device state twice.
- count: '2'
-
ami-events:
conditions:
@@ -146,4 +107,3 @@
match:
Resource: 'alice'
count: '1'
- stop_test:
--
To view, visit https://gerrit.asterisk.org/5153
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie79c5ca9954287c1dda42a24305ccc8bdd0a6e07
Gerrit-PatchSet: 1
Gerrit-Project: testsuite
Gerrit-Branch: master
Gerrit-Owner: Richard Mudgett <rmudgett at digium.com>
More information about the asterisk-code-review
mailing list