Author: kharwell
Date: Fri Jan  2 14:11:13 2015
New Revision: 6164

URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=6164
Log:
Dual channel redirect tests

Wrote three tests:

1) Redirect two channels that are in the Echo application, verify that they are 
both redirected to the appropriate dialplan location, make sure no surrogate 
channels are hanging around.

2) Redirect two channels that are bridged, verify that both channels are 
redirected to the same dialplan location, the bridge they were in gets 
destroyed, and neither channel is hung up by the process.

3) Redirect two channels that are in two different bridges, verify that both 
channels are redirected to the same dialplan location, the bridges they were in 
get destroyed, and neither channel is hung up by the process.

Also, added an option to the event action pluggable module instance that when 
set will not trigger the action until the count has been met on the event.

ASTERISK-24536
Reported by: Niklas Larsson
Review: https://reviewboard.asterisk.org/r/4283/

Added:
    asterisk/trunk/tests/manager/redirect/dual/
    asterisk/trunk/tests/manager/redirect/dual/app/
    asterisk/trunk/tests/manager/redirect/dual/app/configs/
    asterisk/trunk/tests/manager/redirect/dual/app/configs/ast1/
    asterisk/trunk/tests/manager/redirect/dual/app/configs/ast1/extensions.conf 
  (with props)
    asterisk/trunk/tests/manager/redirect/dual/app/test-config.yaml   (with 
props)
    asterisk/trunk/tests/manager/redirect/dual/bridge/
    asterisk/trunk/tests/manager/redirect/dual/bridge/different/
    asterisk/trunk/tests/manager/redirect/dual/bridge/different/configs/
    asterisk/trunk/tests/manager/redirect/dual/bridge/different/configs/ast1/
    
asterisk/trunk/tests/manager/redirect/dual/bridge/different/configs/ast1/extensions.conf
   (with props)
    
asterisk/trunk/tests/manager/redirect/dual/bridge/different/test-config.yaml   
(with props)
    asterisk/trunk/tests/manager/redirect/dual/bridge/same/
    asterisk/trunk/tests/manager/redirect/dual/bridge/same/configs/
    asterisk/trunk/tests/manager/redirect/dual/bridge/same/configs/ast1/
    
asterisk/trunk/tests/manager/redirect/dual/bridge/same/configs/ast1/extensions.conf
   (with props)
    asterisk/trunk/tests/manager/redirect/dual/bridge/same/test-config.yaml   
(with props)
    asterisk/trunk/tests/manager/redirect/dual/bridge/tests.yaml   (with props)
    asterisk/trunk/tests/manager/redirect/dual/tests.yaml   (with props)
Modified:
    asterisk/trunk/lib/python/asterisk/ami.py
    asterisk/trunk/tests/manager/redirect/tests.yaml

Modified: asterisk/trunk/lib/python/asterisk/ami.py
URL: 
http://svnview.digium.com/svn/testsuite/asterisk/trunk/lib/python/asterisk/ami.py?view=diff&rev=6164&r1=6163&r2=6164
==============================================================================
--- asterisk/trunk/lib/python/asterisk/ami.py (original)
+++ asterisk/trunk/lib/python/asterisk/ami.py Fri Jan  2 14:11:13 2015
@@ -667,19 +667,27 @@
 class AMIPluggableEventInstance(AMIHeaderMatchInstance):
     """Subclass of AMIEventInstance that works with the pluggable event action
     module.
+
+    Events can be set to 'trigger-on-count' meaning (when set to True) the
+    trigger callback will not be called until the min count is reached. For
+    event/actions this means actions won't be executed until an event reaches
+    its specified count.
     """
 
     def __init__(self, test_object, triggered_callback, config, data):
         """Setup the AMI event observer"""
         self.triggered_callback = triggered_callback
        self.data = data
+        self.trigger_on_count = config.get('trigger-on-count', False)
         super(AMIPluggableEventInstance, self).__init__(config, test_object)
 
     def event_callback(self, ami, event):
         """Callback called when an event is received from AMI"""
        super(AMIPluggableEventInstance, self).event_callback(ami, event)
-        if self.passed:
+        if self.passed and (not self.trigger_on_count or
+                            self.count['event'] == self.count['min']):
             self.triggered_callback(self.data, ami, event)
+
 
 class AMIPluggableEventModule(object):
     """Generates AMIEventInstance instances that match events for the pluggable

Added: 
asterisk/trunk/tests/manager/redirect/dual/app/configs/ast1/extensions.conf
URL: 
http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/manager/redirect/dual/app/configs/ast1/extensions.conf?view=auto&rev=6164
==============================================================================
--- asterisk/trunk/tests/manager/redirect/dual/app/configs/ast1/extensions.conf 
(added)
+++ asterisk/trunk/tests/manager/redirect/dual/app/configs/ast1/extensions.conf 
Fri Jan  2 14:11:13 2015
@@ -1,0 +1,14 @@
+[default]
+
+exten => one,1,Answer()
+      same => n,UserEvent(Next)
+      same => n,Echo()
+      same => n,Hangup()
+
+exten => two,1,Answer()
+      same => n,Echo()
+      same => n,Hangup()
+
+exten => redirect,1,Answer()
+      same => n,UserEvent(Redirected)
+      same => n,Echo() ; simple test case takes care of hangups

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/app/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/app/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/app/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: asterisk/trunk/tests/manager/redirect/dual/app/test-config.yaml
URL: 
http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/manager/redirect/dual/app/test-config.yaml?view=auto&rev=6164
==============================================================================
--- asterisk/trunk/tests/manager/redirect/dual/app/test-config.yaml (added)
+++ asterisk/trunk/tests/manager/redirect/dual/app/test-config.yaml Fri Jan  2 
14:11:13 2015
@@ -1,0 +1,89 @@
+testinfo:
+    summary: 'Redirect two channels that are in a dialplan application'
+    description: |
+        Redirect two channels that are in the Echo application, verify that
+        they are both redirected to the appropriate dialplan location, and
+        make sure no surrogate channels are hanging around.
+
+properties:
+    minversion: '13.2.0'
+    dependencies:
+        - python : 'twisted'
+        - python : 'starpy'
+        - asterisk: 'app_echo'
+        - asterisk: 'app_userevent'
+    tags:
+        - manager
+
+test-modules:
+    test-object:
+        config-section: test-config
+        typename: 'test_case.SimpleTestCase'
+    modules:
+        -
+            config-section: event-action-config
+            typename: 'pluggable_modules.EventActionModule'
+
+test-config:
+    # expect three user events - the first will kick off the second originate
+    # and the second/third one will be raised during redirect
+    expected_events: 3
+    test-iterations:
+        -
+            channel: 'Local/one@default'
+            application: 'Echo'
+        -
+            channel: 'Local/two@default'
+            application: 'Echo'
+
+event-action-config:
+    -
+        ami-events:
+            # once we receive two DialEnd events (both in the 'up' state)
+            # assume the channels are ready to be redirected
+            conditions:
+                match:
+                    Event: 'DialEnd'
+                    DestChannel: 'Local/.*1'
+            requirements:
+                match:
+                   DestChannelState: '6' # Up
+            count: '2'
+            trigger-on-count: True
+        ami-actions:
+            # redirect the channels to the "redirect" extension
+            action:
+                Action: 'Redirect'
+                Channel: 'Local/one@default-00000000;1'
+                Context: 'default'
+                Exten: 'redirect'
+                Priority: '1'
+                Extrachannel: 'Local/two@default-00000001;1'
+                Extracontext: 'default'
+                Extraexten: 'redirect'
+                Extrapriority: '1'
+    -
+        ami-events:
+            # check to make sure that the two user event are received (raised
+            # from the extension the channels got redirected to)
+            conditions:
+                match:
+                    Event: 'UserEvent'
+                    Channel: 'Local/.*1$'
+                requirements:
+                    UserEvent: 'Redirected'
+            count: '2'
+            trigger-on-count: True
+        ami-actions:
+            # the channels have been redirected at this point so check the
+            # current channel status
+            action:
+                Action: 'Status'
+    -
+        ami-events:
+            # make sure there are no surrogate channels around
+            conditions:
+                match:
+                    Event: 'Status'
+                    Channel: 'Surrogate/Local/.*'
+            count: '0'

Propchange: asterisk/trunk/tests/manager/redirect/dual/app/test-config.yaml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: asterisk/trunk/tests/manager/redirect/dual/app/test-config.yaml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Propchange: asterisk/trunk/tests/manager/redirect/dual/app/test-config.yaml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/configs/ast1/extensions.conf
URL: 
http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/manager/redirect/dual/bridge/different/configs/ast1/extensions.conf?view=auto&rev=6164
==============================================================================
--- 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/configs/ast1/extensions.conf
 (added)
+++ 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/configs/ast1/extensions.conf
 Fri Jan  2 14:11:13 2015
@@ -1,0 +1,24 @@
+[default]
+
+exten => alice0,1,Answer()
+      same => n,UserEvent(Next)
+      same => n,Echo()
+
+exten => call-bob0,1,Dial(Local/bob0@default,,Tt)
+      same => n,Hangup()
+
+exten => bob0,1,Answer()
+      same => n,Echo()
+
+exten => alice1,1,Answer()
+      same => n,Echo()
+
+exten => call-bob1,1,Dial(Local/bob1@default,,Tt)
+      same => n,Hangup()
+
+exten => bob1,1,Answer()
+      same => n,Echo()
+
+exten => redirect,1,Answer()
+      same => n,UserEvent(Redirected)
+      same => n,Echo() ; simple test case takes care of hangups

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/test-config.yaml
URL: 
http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/manager/redirect/dual/bridge/different/test-config.yaml?view=auto&rev=6164
==============================================================================
--- 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/test-config.yaml 
(added)
+++ 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/test-config.yaml 
Fri Jan  2 14:11:13 2015
@@ -1,0 +1,113 @@
+testinfo:
+    summary: 'Redirect two channels that are in two different bridges'
+    description: |
+        Redirect two channels that are in two different bridges, verify that
+        both channels are redirected to the same dialplan location, the bridges
+        they were in get destroyed, and neither channel is hung up by the 
process.
+
+properties:
+    minversion: '13.2.0'
+    dependencies:
+        - python : 'twisted'
+        - python : 'starpy'
+        - asterisk: 'app_dial'
+        - asterisk: 'app_echo'
+        - asterisk: 'app_userevent'
+    tags:
+        - manager
+
+test-modules:
+    test-object:
+        config-section: test-config
+        typename: 'test_case.SimpleTestCase'
+    modules:
+        -
+            config-section: event-action-config
+            typename: 'pluggable_modules.EventActionModule'
+
+test-config:
+    # expect four user events - the first initiates the second call, the second
+    # and third events are raised during redirect, and the fourth ends the test
+    expected_events: 4
+    test-iterations:
+        -
+            channel: 'Local/alice0@default'
+            context: 'default'
+            exten: 'call-bob0'
+            priority: '1'
+        -
+            channel: 'Local/alice1@default'
+            context: 'default'
+            exten: 'call-bob1'
+            priority: '1'
+
+event-action-config:
+    -
+        ami-events:
+            # once we receive two DialEnd events (both in the 'up' state)
+            # assume the channels are in their respective bridges and ready
+            # to be redirected
+            conditions:
+                match:
+                    Event: 'DialEnd'
+                    DestChannel: 'Local/bob.*1'
+            requirements:
+                match:
+                   DestChannelState: '6' # Up
+            count: '2'
+            trigger-on-count: True
+
+        ami-actions:
+            # redirect the channels to the "redirect" extension
+            action:
+                Action: 'Redirect'
+                Channel: 'Local/alice0@default-00000000;1'
+                Context: 'default'
+                Exten: 'redirect'
+                Priority: '1'
+                Extrachannel: 'Local/alice1@default-00000002;1'
+                Extracontext: 'default'
+                Extraexten: 'redirect'
+                Extrapriority: '1'
+    -
+        ami-events:
+            # verify that the bridges gets destroyed
+            conditions:
+                match:
+                    Event: 'BridgeDestroy'
+                    BridgeNumChannels: '0'
+            count: '2'
+    -
+        ami-events:
+            # check to make sure that the user events are received (raised from
+            # the extension the channels got redirected to) for both alices
+            conditions:
+                match:
+                    Event: 'UserEvent'
+                    Channel: 'Local/alice.*1$'
+                requirements:
+                    UserEvent: 'Redirected'
+            count: '2'
+            trigger-on-count: True
+
+        ami-actions:
+            # once we receive two redirected events check alices's status
+            action:
+                Action: 'Status'
+
+    -
+        ami-events:
+            # make sure the alices are still up
+            conditions:
+                match:
+                    Event: 'Status'
+                    Channel: 'Local/alice.*1$'
+            count: '2'
+            trigger-on-count: True
+
+        ami-actions:
+            # notify the simple test case to stop
+            action:
+                Action: 'UserEvent'
+                UserEvent: 'Done'
+

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/test-config.yaml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/test-config.yaml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/different/test-config.yaml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
asterisk/trunk/tests/manager/redirect/dual/bridge/same/configs/ast1/extensions.conf
URL: 
http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/manager/redirect/dual/bridge/same/configs/ast1/extensions.conf?view=auto&rev=6164
==============================================================================
--- 
asterisk/trunk/tests/manager/redirect/dual/bridge/same/configs/ast1/extensions.conf
 (added)
+++ 
asterisk/trunk/tests/manager/redirect/dual/bridge/same/configs/ast1/extensions.conf
 Fri Jan  2 14:11:13 2015
@@ -1,0 +1,14 @@
+[default]
+
+exten => alice,1,Answer()
+      same => n,Echo()
+
+exten => call-bob,1,Dial(Local/bob@default,,Tt)
+      same => n,Hangup()
+
+exten => bob,1,Answer()
+      same => n,Echo()
+
+exten => redirect,1,Answer()
+      same => n,UserEvent(Redirected)
+      same => n,Echo() ; simple test case takes care of hangups

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/same/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/same/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/same/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: asterisk/trunk/tests/manager/redirect/dual/bridge/same/test-config.yaml
URL: 
http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/manager/redirect/dual/bridge/same/test-config.yaml?view=auto&rev=6164
==============================================================================
--- asterisk/trunk/tests/manager/redirect/dual/bridge/same/test-config.yaml 
(added)
+++ asterisk/trunk/tests/manager/redirect/dual/bridge/same/test-config.yaml Fri 
Jan  2 14:11:13 2015
@@ -1,0 +1,114 @@
+testinfo:
+    summary: 'Redirect two channels that are in a bridge together'
+    description: |
+        Redirect two channels that are bridged, verify that both channels are
+        redirected to the same dialplan location, the bridge they were
+        in gets destroyed, and neither channel is hung up by the process.
+
+properties:
+    minversion: '13.2.0'
+    dependencies:
+        - python : 'twisted'
+        - python : 'starpy'
+        - asterisk: 'app_dial'
+        - asterisk: 'app_echo'
+        - asterisk: 'app_userevent'
+    tags:
+        - manager
+
+test-modules:
+    test-object:
+        config-section: test-config
+        typename: 'test_case.SimpleTestCase'
+    modules:
+        -
+            config-section: event-action-config
+            typename: 'pluggable_modules.EventActionModule'
+
+test-config:
+    # expect three user events - the first two are raised during redirect and
+    # the last event ends the test
+    expected_events: 3
+    test-iterations:
+        -
+            channel: 'Local/alice@default'
+            context: 'default'
+            exten: 'call-bob'
+            priority: '1'
+
+event-action-config:
+    -
+        ami-events:
+            # verify that alice and bob get bridged
+            conditions:
+                match:
+                    Event: 'BridgeEnter'
+                    Channel: 'Local/.*1$'
+            count: '2'
+    -
+        ami-events:
+            # wait for bob to enter the echo application before redirecting
+            # (note - this is the condition that triggers the redirect)
+            conditions:
+                match:
+                    Event: 'DialEnd'
+                    DestChannel: 'Local/bob.*1'
+            requirements:
+                match:
+                   DestChannelState: '6' # Up
+            count: '1'
+
+        ami-actions:
+            # redirect alice/bob to the "redirect" extension
+            action:
+                Action: 'Redirect'
+                Channel: 'Local/alice@default-00000000;1'
+                Context: 'default'
+                Exten: 'redirect'
+                Priority: '1'
+                Extrachannel: 'Local/bob@default-00000001;1'
+                Extracontext: 'default'
+                Extraexten: 'redirect'
+                Extrapriority: '1'
+    -
+        ami-events:
+            # verify that the bridge gets destroyed
+            conditions:
+                match:
+                    Event: 'BridgeDestroy'
+                    BridgeNumChannels: '0'
+            count: '1'
+    -
+        ami-events:
+            # check to make sure that the user event is received (raised
+            # from the extension the channel got redirected) for both
+            # alice and bob
+            conditions:
+                match:
+                    Event: 'UserEvent'
+                    Channel: 'Local/.*1$'
+                requirements:
+                    UserEvent: 'Redirected'
+            count: '2'
+            trigger-on-count: True
+
+        ami-actions:
+            # once we receive two redirected events check alice/bob's status
+            action:
+                Action: 'Status'
+
+    -
+        ami-events:
+            # make sure the alice/bob are still up
+            conditions:
+                match:
+                    Event: 'Status'
+                    Channel: 'Local/.*1$'
+            count: '2'
+            trigger-on-count: True
+
+        ami-actions:
+            # notify the simple test case to stop
+            action:
+                Action: 'UserEvent'
+                UserEvent: 'Done'

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/same/test-config.yaml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/same/test-config.yaml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Propchange: 
asterisk/trunk/tests/manager/redirect/dual/bridge/same/test-config.yaml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: asterisk/trunk/tests/manager/redirect/dual/bridge/tests.yaml
URL: 
http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/manager/redirect/dual/bridge/tests.yaml?view=auto&rev=6164
==============================================================================
--- asterisk/trunk/tests/manager/redirect/dual/bridge/tests.yaml (added)
+++ asterisk/trunk/tests/manager/redirect/dual/bridge/tests.yaml Fri Jan  2 
14:11:13 2015
@@ -1,0 +1,4 @@
+# Enter tests here in the order they should be considered for execution:
+tests:
+    - test: 'same'
+    - test: 'different'

Propchange: asterisk/trunk/tests/manager/redirect/dual/bridge/tests.yaml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: asterisk/trunk/tests/manager/redirect/dual/bridge/tests.yaml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Propchange: asterisk/trunk/tests/manager/redirect/dual/bridge/tests.yaml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: asterisk/trunk/tests/manager/redirect/dual/tests.yaml
URL: 
http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/manager/redirect/dual/tests.yaml?view=auto&rev=6164
==============================================================================
--- asterisk/trunk/tests/manager/redirect/dual/tests.yaml (added)
+++ asterisk/trunk/tests/manager/redirect/dual/tests.yaml Fri Jan  2 14:11:13 
2015
@@ -1,0 +1,4 @@
+# Enter tests here in the order they should be considered for execution:
+tests:
+    - test: 'app'
+    - dir: 'bridge'

Propchange: asterisk/trunk/tests/manager/redirect/dual/tests.yaml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: asterisk/trunk/tests/manager/redirect/dual/tests.yaml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Rev URL

Propchange: asterisk/trunk/tests/manager/redirect/dual/tests.yaml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: asterisk/trunk/tests/manager/redirect/tests.yaml
URL: 
http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/manager/redirect/tests.yaml?view=diff&rev=6164&r1=6163&r2=6164
==============================================================================
--- asterisk/trunk/tests/manager/redirect/tests.yaml (original)
+++ asterisk/trunk/tests/manager/redirect/tests.yaml Fri Jan  2 14:11:13 2015
@@ -1,3 +1,4 @@
 # Enter tests here in the order they should be considered for execution:
 tests:
     - dir:  'single'
+    - dir:  'dual'


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to