[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