[asterisk-commits] mmichelson: testsuite/asterisk/trunk r4124 - in /asterisk/trunk/tests/apps/qu...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Sep 6 09:16:24 CDT 2013


Author: mmichelson
Date: Fri Sep  6 09:16:22 2013
New Revision: 4124

URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=4124
Log:
Get the failing queue tests to pass.

This mostly involved changing expected events in the test to be
what Asterisk 12 sends.

The position_priority_maxlen test was rewritten in python as well.
I noticed about a 5x speedup on test runs once this change was made.


Removed:
    asterisk/trunk/tests/apps/queues/position_priority_maxlen/test.lua
Modified:
    asterisk/trunk/tests/apps/queues/position_priority_maxlen/configs/ast1/extensions.conf
    asterisk/trunk/tests/apps/queues/position_priority_maxlen/run-test
    asterisk/trunk/tests/apps/queues/queue_baseline/run-test
    asterisk/trunk/tests/apps/queues/set_penalty/run-test

Modified: asterisk/trunk/tests/apps/queues/position_priority_maxlen/configs/ast1/extensions.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/queues/position_priority_maxlen/configs/ast1/extensions.conf?view=diff&rev=4124&r1=4123&r2=4124
==============================================================================
--- asterisk/trunk/tests/apps/queues/position_priority_maxlen/configs/ast1/extensions.conf (original)
+++ asterisk/trunk/tests/apps/queues/position_priority_maxlen/configs/ast1/extensions.conf Fri Sep  6 09:16:22 2013
@@ -2,4 +2,5 @@
 
 exten => test,1,Answer
 exten => test,n,Queue(test_queue,,,,,,,,,${QUEUE_POS})
+exten => test,n,ExecIf($[${QUEUESTATUS}=FULL]?UserEvent(FULL))
 exten => test,n,Hangup

Modified: asterisk/trunk/tests/apps/queues/position_priority_maxlen/run-test
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/queues/position_priority_maxlen/run-test?view=diff&rev=4124&r1=4123&r2=4124
==============================================================================
--- asterisk/trunk/tests/apps/queues/position_priority_maxlen/run-test (original)
+++ asterisk/trunk/tests/apps/queues/position_priority_maxlen/run-test Fri Sep  6 09:16:22 2013
@@ -1,4 +1,116 @@
-#!/usr/bin/env bash
-set -e
+#!/usr/bin/env python
+'''
+Copyright (C) 2013, Digium, Inc.
+Mark Michelson <mmichelson at digium.com>
 
-asttest -a /$AST_TEST_ROOT -s tests/apps/queues/position_priority_maxlen
+This program is free software, distributed under the terms of
+the GNU General Public License Version 2.
+'''
+import sys
+import logging
+from twisted.internet import reactor
+
+sys.path.append("lib/python")
+from asterisk.TestCase import TestCase
+
+LOGGER = logging.getLogger(__name__)
+
+TEST_RUNS = [
+    # 1
+    {'Priority': None, 'Position': None, 'ExpectedPosition': 1},
+    # 1,2
+    {'Priority': None, 'Position': None, 'ExpectedPosition': 2},
+    # 3,1,2
+    {'Priority': 1, 'Position': None, 'ExpectedPosition': 1},
+    # 3,4,1,2
+    {'Priority': 1, 'Position': None, 'ExpectedPosition': 2},
+    # 5,3,4,1,2
+    {'Priority': 2, 'Position': None, 'ExpectedPosition': 1},
+    # 5,3,4,1,6,2
+    {'Priority': None, 'Position': 5, 'ExpectedPosition': 5},
+    # 5,3,4,1,6,2,7
+    {'Priority': None, 'Position': 200, 'ExpectedPosition': 7},
+    # 5,3,4,8,1,6,2,7
+    {'Priority': None, 'Position': 1, 'ExpectedPosition': 4},
+    # 9,5,3,4,8,1,6,2,7
+    {'Priority': 8, 'Position': 3, 'ExpectedPosition': 1},
+    # 9,5,3,4,10,8,1,6,2,7
+    {'Priority': 1, 'Position': 7, 'ExpectedPosition': 5},
+    # 9,5,3,11,4,10,8,1,6,2,7
+    {'Priority': 1, 'Position': 4, 'ExpectedPosition': 4},
+    # Unable to join due to maxlen
+    {'Priority': 2, 'Position': 5, 'ExpectedPosition': None},
+]
+
+
+class QueuePositionPriority(TestCase):
+    def __init__(self):
+        TestCase.__init__(self)
+        self.create_asterisk()
+        self.test_run = 0
+        self.passed = False
+
+    def check_position(self, ami, event):
+        position = int(event.get('position'))
+        if position != TEST_RUNS[self.test_run]['ExpectedPosition']:
+            LOGGER.error("Queue caller %d entered at unexpected position %d. \
+                    Expected %d" % (self.test_run, position,
+                                    TEST_RUNS[self.test_run]
+                                    ['ExpectedPosition']))
+            self.stop_reactor()
+        else:
+            self.test_run += 1
+            self.execute_call()
+
+    def check_full(self, ami, event):
+        if event.get('userevent') != 'FULL':
+            return
+
+        if TEST_RUNS[self.test_run]['ExpectedPosition'] is not None:
+            LOGGER.error("Queue caller %s was rejected when expected to enter \
+                    at position %d" % (self.test_run, TEST_RUNS[self.test_run]
+                                       ['ExpectedPosition']))
+        else:
+            # This just so happens to be the final caller, so we're done!
+            self.passed = True
+
+        self.stop_reactor()
+
+    def ami_connect(self, ami):
+        TestCase.ami_connect(self, ami)
+        # In Asterisk 12+, the event when a caller joins is "QueueCallerJoin"
+        ami.registerEvent("QueueCallerJoin", self.check_position)
+        # In Asterisk 11-, the event when a caller joins is "Join"
+        ami.registerEvent("Join", self.check_position)
+        ami.registerEvent("UserEvent", self.check_full)
+        self.execute_call()
+
+    def execute_call(self):
+        if self.test_run >= len(TEST_RUNS):
+            LOGGER.error("Too many callers have entered the queue")
+            self.stop_reactor()
+
+        variables = {}
+        prio = TEST_RUNS[self.test_run].get('Priority')
+        pos = TEST_RUNS[self.test_run].get('Position')
+        if prio:
+            variables['QUEUE_PRIO'] = prio
+        if pos:
+            variables['QUEUE_POS'] = pos
+        self.ami[0].originate(channel="Local/test at test_context/n",
+                              application="Echo", variable=variables)
+
+    def run(self):
+        TestCase.run(self)
+        self.create_ami_factory()
+
+
+def main():
+    test = QueuePositionPriority()
+    reactor.run()
+    if test.passed:
+        return 0
+    return 1
+
+if __name__ == "__main__":
+    sys.exit(main() or 0)

Modified: asterisk/trunk/tests/apps/queues/queue_baseline/run-test
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/queues/queue_baseline/run-test?view=diff&rev=4124&r1=4123&r2=4124
==============================================================================
--- asterisk/trunk/tests/apps/queues/queue_baseline/run-test (original)
+++ asterisk/trunk/tests/apps/queues/queue_baseline/run-test Fri Sep  6 09:16:22 2013
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # vim: sw=3 et:
 '''
-Copyright (C) 2011, Digium, Inc.
+Copyright (C) 2011-2013, Digium, Inc.
 Matt Jordan <mjordan at digium.com>
 
 Ported from original lua queue_baseline test by Matt Nicholson
@@ -20,6 +20,7 @@
 sys.path.append("lib/python")
 
 from asterisk.TestCase import TestCase
+from asterisk.version import AsteriskVersion
 
 logger = logging.getLogger(__name__)
 
@@ -28,12 +29,20 @@
 
     def __init__(self):
         super(QueueBaseline, self).__init__()
+        self.ast_version = AsteriskVersion()
+
+        if self.ast_version < AsteriskVersion("12"):
+            join = "Join"
+            leave = "Leave"
+        else:
+            join = "QueueCallerJoin"
+            leave = "QueueCallerLeave"
 
         self.expected_events = {
-            "Join": False,
+            join: False,
             "AgentCalled": False,
             "AgentConnect": False,
-            "Leave": False,
+            leave: False,
             "AgentComplete": False
             }
         self.events_received = 0

Modified: asterisk/trunk/tests/apps/queues/set_penalty/run-test
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/queues/set_penalty/run-test?view=diff&rev=4124&r1=4123&r2=4124
==============================================================================
--- asterisk/trunk/tests/apps/queues/set_penalty/run-test (original)
+++ asterisk/trunk/tests/apps/queues/set_penalty/run-test Fri Sep  6 09:16:22 2013
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 '''
-Copyright (C) 2011, Digium, Inc.
+Copyright (C) 2011-2013, Digium, Inc.
 Jonathan Rose <jrose at digium.com>
 
 This program is free software, distributed under the terms of
@@ -13,6 +13,7 @@
 sys.path.append("lib/python")
 from asterisk.asterisk import Asterisk
 from asterisk.TestCase import TestCase
+from asterisk.version import AsteriskVersion
 from twisted.internet import reactor, defer
 from starpy import manager
 
@@ -31,6 +32,12 @@
         self.state = 0 # State of the test... determines next action and next event expectations.
         self.passed = False
         self.state_passed_flags = 0 # Meant to be used like a bit array for storing condition successes on specific states.
+        self.ast_version = AsteriskVersion()
+
+        if self.ast_version < AsteriskVersion("12"):
+            self.interface = 'location'
+        else:
+            self.interface = 'interface'
 
     #Setup loopback for QueueMemberPenalty events and set first test state
     def ami_connect(self, ami):
@@ -46,7 +53,7 @@
     #Evaluates events according to the expectations of a given state and advances the state when finished.
     def state_receive(self, event, ami):
         if (self.state == 1):
-            if (event['queue'] == "queue1" and event['location'] == "sip/mem1" and event['penalty'] == "1"):
+            if (event['queue'] == "queue1" and event[self.interface] == "sip/mem1" and event['penalty'] == "1"):
                 logger.info("state 1: Successfully Completed")
                 self.state_advance(ami)
 
@@ -55,11 +62,11 @@
                 self.stop_reactor()
 
         elif (self.state == 2):
-            if (event['queue'] == "queue1" and event['location'] == "sip/mem2" and event['penalty'] == "2"):
+            if (event['queue'] == "queue1" and event[self.interface] == "sip/mem2" and event['penalty'] == "2"):
                 logger.info("state 2: verified condition 1")
                 self.state_passed_flags = self.state_passed_flags | 1
 
-            elif (event['queue'] == "queue2" and event['location'] == "sip/mem2" and event['penalty'] == '2'):
+            elif (event['queue'] == "queue2" and event[self.interface] == "sip/mem2" and event['penalty'] == '2'):
                 logger.info("state 2: verified condition 2")
                 self.state_passed_flags = self.state_passed_flags | 2
 
@@ -72,15 +79,15 @@
                 self.state_advance(ami)
 
         elif (self.state == 3):
-            if (event['queue'] == "queue1" and event['location'] == "sip/mem3" and event['penalty'] == '3'):
+            if (event['queue'] == "queue1" and event[self.interface] == "sip/mem3" and event['penalty'] == '3'):
                 logger.info("state 3: verified condition 1")
                 self.state_passed_flags = self.state_passed_flags | 1
 
-            elif (event['queue'] == "queue2" and event['location'] == "sip/mem3" and event['penalty'] == '3'):
+            elif (event['queue'] == "queue2" and event[self.interface] == "sip/mem3" and event['penalty'] == '3'):
                 logger.info("state 3: verified condition 2")
                 self.state_passed_flags = self.state_passed_flags | 2
 
-            elif (event['queue'] == "queue3" and event['location'] == "sip/mem3" and event['penalty'] == '3'):
+            elif (event['queue'] == "queue3" and event[self.interface] == "sip/mem3" and event['penalty'] == '3'):
                 logger.info("state 3: verified condition 3")
                 self.state_passed_flags = self.state_passed_flags | 4
 
@@ -93,7 +100,7 @@
                 self.state_advance(ami)
 
         elif (self.state == 4):
-            if (event['queue'] == "queue3" and event['location'] == "sip/mem1" and event['penalty'] == '4'):
+            if (event['queue'] == "queue3" and event[self.interface] == "sip/mem1" and event['penalty'] == '4'):
                 logger.info("state 4: Successfully Completed")
                 self.state_advance(ami)
 




More information about the asterisk-commits mailing list