[asterisk-commits] jrose: testsuite/asterisk/trunk r4111 - in /asterisk/trunk/tests/bridge/parkc...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Sep 5 11:18:35 CDT 2013
Author: jrose
Date: Thu Sep 5 11:18:28 2013
New Revision: 4111
URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=4111
Log:
testsuite: Update call parking timeout tests to accomodate Asterisk 12
(issue ASTERISK-22328)
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/2816/
Added:
asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/configs/ast1/res_parking.conf (with props)
asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/configs/ast1/res_parking.conf (with props)
Modified:
asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/Executioner.py
asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/test-config.yaml
asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/Executioner.py
asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/test-config.yaml
Modified: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/Executioner.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/Executioner.py?view=diff&rev=4111&r1=4110&r2=4111
==============================================================================
--- asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/Executioner.py (original)
+++ asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/Executioner.py Thu Sep 5 11:18:28 2013
@@ -9,11 +9,13 @@
import sys
import logging
-import re
sys.path.append("lib/python")
+from version import AsteriskVersion
+
LOGGER = logging.getLogger(__name__)
+
class Executioner(object):
def __init__(self, module_config, test_object):
@@ -22,14 +24,25 @@
test_object.register_ami_observer(self.ami_connect)
self.test_object = test_object
+ running_version = AsteriskVersion()
+ if (running_version < AsteriskVersion("12.0.0")):
+ self.asterisk12Events = False
+ else:
+ self.asterisk12Events = True
+
self.calls = []
- self.calls.append({'test' : '1', 'parker' : 'SIP/alice', 'lot' : 'parkinglot_test1', 'slot' : '401'})
- self.calls.append({'test' : '2', 'parker' : 'SIP/alice', 'lot' : 'parkinglot_test2', 'slot' : '501'})
- self.calls.append({'test' : '3', 'parker' : 'SIP/alice', 'lot' : 'parkinglot_test3', 'slot' : '601'})
+ self.calls.append({'test': '1', 'parker': 'SIP/alice',
+ 'lot': 'parkinglot_test1', 'slot': '401'})
+ self.calls.append({'test': '2', 'parker': 'SIP/alice',
+ 'lot': 'parkinglot_test2', 'slot': '501'})
+ self.calls.append({'test': '3', 'parker': 'SIP/alice',
+ 'lot': 'parkinglot_test3', 'slot': '601'})
self.userevents_received = 0
self.passed_dialplan = 0
self.failures_logged = 0
- self.fail_token = self.test_object.create_fail_token("No success indicated by Executioner.")
+ self.fail_token = \
+ self.test_object.create_fail_token("No success indicated by "
+ "Executioner.")
return
def ami_connect(self, ami):
@@ -47,14 +60,29 @@
not_right = True
if event.get('application') != 'Dial':
not_right = True
- if event.get('appdata') != 'SIP/alice,3,Hk':
- not_right = True
- if event.get('registrar') != 'features':
- not_right = True
+
+ appdata = event.get('appdata')
+ registrar = event.get('registrar')
+
+ if self.asterisk12Events:
+ # Asterisk 12's parking uses a different registrar from previous
+ # versions and puts features on channels directly instead of in
+ # the dialplan
+ if appdata != 'SIP/alice,3':
+ not_right = True
+ if registrar != 'res_parking':
+ not_right = True
+ else:
+ if appdata != 'SIP/alice,3,Hk':
+ not_right = True
+ if registrar != 'features':
+ not_right = True
if not_right:
- # We don't handle failure here since the last check_user_event will simply see if one ever succeeded
- LOGGER.info("Received a dialplan entry that didn't match the expected one.")
+ # We don't handle failure here since the last check_user_event
+ # will simply see if one ever succeeded
+ LOGGER.info("Received a dialplan entry that didn't match the "
+ "expected one.")
return
LOGGER.info("Received a dialplan entry that matched our expectations.")
@@ -82,50 +110,70 @@
# Make sure the test wasn't from a failure condition
if not event.get('success'):
- LOGGER.error("Test Phase %d: User Event didn't include a success tag. Test Failed." % this_test)
+ LOGGER.error("Test Phase %d: User Event didn't include a success "
+ "tag. Test Failed." % this_test)
self.failures_logged += 1
if event.get('success') != 'true':
- LOGGER.error("Test Phase %d: User Event didn't indicate success. Test Failed." % this_test)
+ LOGGER.error("Test Phase %d: User Event didn't indicate success. "
+ "Test Failed." % this_test)
self.failures_logged += 1
- # Make sure each variable that was supposed to be set matches our expectations.
+ # Make sure each variable that was supposed to be set matches our
+ # expectations.
mismatches = 0
if event.get('parker') != this_expectation['parker']:
- LOGGER.error("Test Phase %d: User event condition mismatch on parker. Got '%s' but '%s' was expected." % (this_test, event.get('parker'), this_expectation['parker']))
+ LOGGER.error("Test Phase %d: User event condition mismatch on "
+ "parker. Got '%s' but '%s' was expected." %
+ (this_test, event.get('parker'),
+ this_expectation['parker']))
mismatches += 1
if event.get('slot') != this_expectation['slot']:
- LOGGER.error("Test Phase %d: User Event condition mismatch on slot. Got '%s' but '%s' was expected." % (this_test, event.get('slot'), this_expectation['slot']))
+ LOGGER.error("Test Phase %d: User Event condition mismatch on "
+ "slot. Got '%s' but '%s' was expected." %
+ (this_test, event.get('slot'),
+ this_expectation['slot']))
mismatches += 1
if event.get('lot') != this_expectation['lot']:
- LOGGER.error("Test Phase %d: User Event condition mismatch on lot. Got '%s' but '%s' was expected." % (this_test, event.get('lot'), this_expectation['lot']))
+ LOGGER.error("Test Phase %d: User Event condition mismatch on "
+ "lot. Got '%s' but '%s' was expected." %
+ (this_test, event.get('lot'),
+ this_expectation['lot']))
mismatches += 1
if mismatches > 0:
- LOGGER.error("Test Phase %d: Mismatches were present in the channel variables set by park call timeout. Test failed." % this_test)
+ LOGGER.error("Test Phase %d: Mismatches were present in the "
+ "channel variables set by park call timeout." %
+ this_test)
self.failures_logged += 1
- # For the first test, we should also make sure the park-dial extension was added. This will require another event.
+ # For the first test, we should also make sure the park-dial extension
+ # was added. This will require another event.
if self.userevents_received == 1:
- message = {'action': 'ShowDialPlan', 'context': 'park-dial', 'extension': 'SIP_alice'}
+ message = {'action': 'ShowDialPlan', 'context': 'park-dial',
+ 'extension': 'SIP_alice'}
self.ami.sendMessage(message)
# Looks like the test was successful. Yay.
LOGGER.info("Test Phase %d: Passed." % this_test)
- # Once all the tests are complete, we need to check final pass conditions
+ # Once all the tests are complete, check final pass conditions
if len(self.calls) == 0:
- # clear the fail token since we have reached where we decide ultimately whether it failed or not.
+ # clear the fail token since we reach the point when we can
+ # decisively find out whether it failed or not.
self.test_object.remove_fail_token(self.fail_token)
if not self.passed_dialplan:
- LOGGER.error("We never received a ListDialPlan event with the right extension data in it. Test failed.")
+ LOGGER.error("We never received a ListDialPlan event with "
+ "the right extension data in it. Test failed.")
self.failures_logged += 1
self.test_object.set_passed(False)
if self.failures_logged == 0:
- LOGGER.info("All phases complete and the dialplan check showed the proper entry. Yay. Test Passed.")
+ LOGGER.info("All phases complete and the dialplan check "
+ "showed the proper entry. Yay. Test Passed.")
self.test_object.set_passed(True)
else:
- LOGGER.error("Test failed with %d errors.\n", self.failures_logged)
+ LOGGER.error("Test failed with %d errors.\n" %
+ self.failures_logged)
self.test_object.set_passed(False)
Added: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/configs/ast1/res_parking.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/configs/ast1/res_parking.conf?view=auto&rev=4111
==============================================================================
--- asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/configs/ast1/res_parking.conf (added)
+++ asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/configs/ast1/res_parking.conf Thu Sep 5 11:18:28 2013
@@ -1,0 +1,28 @@
+[general]
+
+[parkinglot_test1]
+context => parkedcalls
+parkext => 400
+parkpos => 401-409
+parkingtime=5
+comebackdialtime=3
+comebacktoorigin=no
+comebackcontext=park_context1
+
+[parkinglot_test2]
+context => parkedcalls
+parkext => 500
+parkpos => 501-509
+parkingtime=5
+comebackdialtime=3
+comebacktoorigin=no
+comebackcontext=park_context2
+
+[parkinglot_test3]
+context => parkedcalls
+parkext => 600
+parkpos => 601-609
+parkingtime=5
+comebackdialtime=3
+comebacktoorigin=no
+comebackcontext=park_context3
Propchange: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/configs/ast1/res_parking.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/configs/ast1/res_parking.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/configs/ast1/res_parking.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/test-config.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/test-config.yaml?view=diff&rev=4111&r1=4110&r2=4111
==============================================================================
--- asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/test-config.yaml (original)
+++ asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_no/test-config.yaml Thu Sep 5 11:18:28 2013
@@ -14,9 +14,13 @@
typename: 'BridgeTestCase.BridgeTestCase'
modules:
-
+ maxversion: '12.0.0'
config-section: 'cdr-config'
typename: 'cdr.CDRModule'
-
+ -
+ minversion: '12.0.0'
+ config-section: 'cdr-config-12'
+ typename: 'cdr.CDRModule'
-
typename: 'Executioner.Executioner'
@@ -79,6 +83,96 @@
disposition: 'ANSWERED'
amaflags: 'DOCUMENTATION'
+cdr-config-12:
+ -
+ # In Asterisk 12, there are three phases to each call - Alice's call to bob is first, followed by Bob's time spent parked, and lastly Bob's period after leaving the parking bridge
+ file: 'Master'
+ lines:
+ -
+ source: '1234'
+ destination: 'test1'
+ dcontext: 'default'
+ callerid: '"Alice" <1234>'
+ channel: '.*/alice-.*'
+ dchannel: '.*/bob-.*'
+ lastapp: 'Dial'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '4321'
+ destination: 'SIP_alice'
+ dcontext: 'park_context1'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'AppDial' # There is some expectation that these may later change to 'Park'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '4321'
+ destination: 'SIP_alice'
+ dcontext: 'park_context1'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'UserEvent'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '1234'
+ destination: 'test2'
+ dcontext: 'default'
+ callerid: '"Alice" <1234>'
+ channel: '.*/alice-.*'
+ dchannel: '.*/bob-.*'
+ lastapp: 'Dial'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '4321'
+ destination: 's'
+ dcontext: 'park_context2'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'AppDial' # There is some expectation that these may later change to 'Park'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '4321'
+ destination: 's'
+ dcontext: 'park_context2'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'UserEvent'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '1234'
+ destination: 'test3'
+ dcontext: 'default'
+ callerid: '"Alice" <1234>'
+ channel: '.*/alice-.*'
+ dchannel: '.*/bob-.*'
+ lastapp: 'Dial'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '4321'
+ destination: 's'
+ dcontext: 'default'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'AppDial' # There is some expectation that these may later change to 'Park'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '4321'
+ destination: 's'
+ dcontext: 'default'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'UserEvent'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+
properties:
minversion: '11.0.0'
dependencies:
Modified: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/Executioner.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/Executioner.py?view=diff&rev=4111&r1=4110&r2=4111
==============================================================================
--- asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/Executioner.py (original)
+++ asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/Executioner.py Thu Sep 5 11:18:28 2013
@@ -14,6 +14,9 @@
LOGGER = logging.getLogger(__name__)
+from version import AsteriskVersion
+
+
class Executioner(object):
def __init__(self, module_config, test_object):
self.ami = None
@@ -22,15 +25,26 @@
test_object.register_ami_observer(self.ami_connect)
self.test_object = test_object
+ running_version = AsteriskVersion()
+ if (running_version < AsteriskVersion("12.0.0")):
+ self.asterisk12Events = False
+ else:
+ self.asterisk12Events = True
+
self.calls = []
- self.calls.append({'parker' : 'SIP/alice', 'lot' : 'parkinglot_test1', 'slot' : '401', 'status' : 'ANSWER', 'post' : False})
- self.calls.append({'parker' : 'SIP/alice', 'lot' : 'parkinglot_test1', 'slot' : '402', 'status' : 'NOANSWER', 'post' : True})
- self.calls.append({'parker' : 'SIP/alice', 'lot' : 'parkinglot_test1', 'slot' : '403', 'status' : 'BUSY', 'post' : True})
+ self.calls.append({'parker': 'SIP/alice', 'lot': 'parkinglot_test1',
+ 'slot': '401', 'status': 'ANSWER', 'post': False})
+ self.calls.append({'parker': 'SIP/alice', 'lot': 'parkinglot_test1',
+ 'slot': '402', 'status': 'NOANSWER', 'post': True})
+ self.calls.append({'parker': 'SIP/alice', 'lot': 'parkinglot_test1',
+ 'slot': '403', 'status': 'BUSY', 'post': True})
self.current_call = None
self.current_call_post = False
# Automatically fail if we don't remove this token.
- self.fail_token = self.test_object.create_fail_token("This test should fail all the time right now.")
+ self.fail_token = \
+ self.test_object.create_fail_token("This test should fail all the "
+ "time right now.")
self.userevents_received = 0
self.failures_logged = 0
@@ -52,7 +66,8 @@
def respond_to_park(self, ami, event):
self.parks_received += 1
new_db_value = self.parks_received
- message = {'action': 'DBPut', 'Family': 'test', 'Key': 'position', 'Val': new_db_value}
+ message = {'action': 'DBPut', 'Family': 'test', 'Key': 'position',
+ 'Val': new_db_value}
self.alice_ami.sendMessage(message)
self.current_call = self.calls.pop(0)
@@ -61,14 +76,19 @@
def user_event_match(self, event):
num_failures = 0
+
if (event.get('parker') != self.current_call['parker']):
- num_failures += 1
- if (event.get('slot') != self.current_call['slot']):
- num_failures += 1
- if (event.get('lot') != self.current_call['lot']):
num_failures += 1
if (event.get('status') != self.current_call['status']):
num_failures += 1
+
+ if self.asterisk12Events:
+ # These values aren't set in Asterisk 11 when
+ # comebacktoorigin = yes, but they are in 12.
+ if (event.get('slot') != self.current_call['slot']):
+ num_failures += 1
+ if (event.get('lot') != self.current_call['lot']):
+ num_failures += 1
if (num_failures):
LOGGER.info("Failing event: %s" % event)
@@ -79,31 +99,43 @@
def check_parkhangup(self, ami, event):
match_failures = self.user_event_match(event)
if (match_failures):
- LOGGER.error("Test Phase %d: %d Mismatches were observed in a park_postcall event. Test failed." % (self.parks_received, match_failures))
+ LOGGER.error("Test Phase %d: %d Mismatches were observed in a "
+ "park_postcall event. Test failed." %
+ (self.parks_received, match_failures))
self.failures_logged += 1
- # Check if a call received a post test user event against whether or not it was supposed to.
- if (self.current_call['post'] == True and not self.current_call_post):
- LOGGER.error("Test Phase %d: Test failed because this phase should have received a post call user event and didn't." % self.parks_received)
+ # Check if a call received a post test user event against whether or
+ # not it was supposed to.
+ if (self.current_call['post'] is True and not self.current_call_post):
+ LOGGER.error("Test Phase %d: Test failed because this phase "
+ "should have received a post call user event and "
+ "didn't." % self.parks_received)
self.failures_logged += 1
- if (self.current_call['post'] == False and self.current_call_post):
- LOGGER.error("Test Phase %d: Test failed because this phase should not have received a post call user event and did." % self.parks_received)
+ if (self.current_call['post'] is False and self.current_call_post):
+ LOGGER.error("Test Phase %d: Test failed because this phase "
+ "should not have received a post call user event "
+ "and did." % self.parks_received)
self.failures_logged += 1
- # Once all the tests are complete, we need to check final pass conditions
+ # Once all the tests are complete, check final pass conditions
if len(self.calls) == 0:
self.test_object.remove_fail_token(self.fail_token)
if self.failures_logged == 0:
- LOGGER.info("All phases complete and the dialplan check showed the proper entry. Yay. Test Passed.")
+ LOGGER.info("All phases complete and the dialplan check "
+ "showed the proper entry. Yay. Test Passed.")
self.test_object.set_passed(True)
else:
- LOGGER.error("Test failed with %d errors.\n", self.failures_logged)
+ LOGGER.error("Test failed with %d errors.\n" %
+ self.failures_logged)
+ self.test_object.set_passed(False)
def check_parkpostcall(self, ami, event):
match_failures = self.user_event_match(event)
if (match_failures):
- LOGGER.error("Test Phase %d: %d mismatches were observed in a park_postcall event. Test failed." % (self.parks_received, match_failures))
+ LOGGER.error("Test Phase %d: %d mismatches were observed in a "
+ "park_postcall event. Test failed." %
+ (self.parks_received, match_failures))
self.failures_logged += 1
self.current_call_post = True
Added: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/configs/ast1/res_parking.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/configs/ast1/res_parking.conf?view=auto&rev=4111
==============================================================================
--- asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/configs/ast1/res_parking.conf (added)
+++ asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/configs/ast1/res_parking.conf Thu Sep 5 11:18:28 2013
@@ -1,0 +1,10 @@
+[general]
+
+[parkinglot_test1]
+context => parkedcalls
+parkext => 400
+parkpos => 401-409
+parkingtime=5
+comebackdialtime=3
+comebacktoorigin=yes
+findslot => next
Propchange: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/configs/ast1/res_parking.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/configs/ast1/res_parking.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/configs/ast1/res_parking.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/test-config.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/test-config.yaml?view=diff&rev=4111&r1=4110&r2=4111
==============================================================================
--- asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/test-config.yaml (original)
+++ asterisk/trunk/tests/bridge/parkcall_timeout/comebacktoorigin_yes/test-config.yaml Thu Sep 5 11:18:28 2013
@@ -13,9 +13,13 @@
typename: 'BridgeTestCase.BridgeTestCase'
modules:
-
+ maxversion: '12.0.0'
config-section: 'cdr-config'
typename: 'cdr.CDRModule'
-
+ -
+ minversion: '12.0.0'
+ config-section: 'cdr-config-12'
+ typename: 'cdr.CDRModule'
-
typename: 'Executioner.Executioner'
@@ -107,6 +111,132 @@
lastapp: 'UserEvent'
disposition: 'BUSY'
amaflags: 'DOCUMENTATION'
+
+cdr-config-12:
+ -
+ file: 'Master'
+ lines:
+ -
+ source: '1234'
+ destination: 'test'
+ dcontext: 'default'
+ callerid: '"Alice" <1234>'
+ channel: '.*/alice-.*'
+ dchannel: '.*/bob-.*'
+ lastapp: 'Dial'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ # new in 12
+ source: '4321'
+ destination: 'SIP_alice'
+ dcontext: 'park-dial'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'AppDial' # May be changed to Park at some point.
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '4321'
+ destination: 'SIP_alice'
+ dcontext: 'park-dial'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ dchannel: '.*/alice-.*'
+ lastapp: 'Dial'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ # new in 12
+ source: '4321'
+ destination: 'h'
+ dcontext: 'park-dial'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'UserEvent'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '1234'
+ destination: 'test'
+ dcontext: 'default'
+ callerid: '"Alice" <1234>'
+ channel: '.*/alice-.*'
+ dchannel: '.*/bob-.*'
+ lastapp: 'Dial'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ # new in 12
+ source: '4321'
+ destination: 'SIP_alice'
+ dcontext: 'park-dial'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'AppDial' # May be changed to Park at some point.
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '4321'
+ destination: 'SIP_alice'
+ dcontext: 'park-dial'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ dchannel: '.*/alice-.*'
+ lastapp: 'AppDial'
+ disposition: 'NO ANSWER'
+ amaflags: 'DOCUMENTATION'
+ -
+ # new in 12
+ source: '4321'
+ destination: 'h'
+ dcontext: 'park-dial'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'UserEvent'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '1234'
+ destination: 'test'
+ dcontext: 'default'
+ callerid: '"Alice" <1234>'
+ channel: '.*/alice-.*'
+ dchannel: '.*/bob-.*'
+ lastapp: 'Dial'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ # new in 12
+ source: '4321'
+ destination: 'SIP_alice'
+ dcontext: 'park-dial'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'AppDial' # May be changed to Park at some point.
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+ -
+ source: '4321'
+ destination: 'SIP_alice'
+ dcontext: 'park-dial'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ dchannel: '.*/alice-.*'
+ lastapp: 'AppDial'
+ disposition: 'BUSY'
+ amaflags: 'DOCUMENTATION'
+ -
+ # new in 12
+ source: '4321'
+ destination: 'h'
+ dcontext: 'park-dial'
+ callerid: '"Bob" <4321>'
+ channel: '.*/bob-.*'
+ lastapp: 'UserEvent'
+ disposition: 'ANSWERED'
+ amaflags: 'DOCUMENTATION'
+
properties:
minversion: '11.0.0'
More information about the asterisk-commits
mailing list