[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