[asterisk-commits] mjordan: testsuite/asterisk/trunk r2358 - /asterisk/trunk/lib/python/asterisk/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon Sep 19 16:11:11 CDT 2011
Author: mjordan
Date: Mon Sep 19 16:11:09 2011
New Revision: 2358
URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=2358
Log:
Necessary library change for new SIP tests
Modified:
asterisk/trunk/lib/python/asterisk/sipp.py
Modified: asterisk/trunk/lib/python/asterisk/sipp.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/lib/python/asterisk/sipp.py?view=diff&rev=2358&r1=2357&r2=2358
==============================================================================
--- asterisk/trunk/lib/python/asterisk/sipp.py (original)
+++ asterisk/trunk/lib/python/asterisk/sipp.py Mon Sep 19 16:11:09 2011
@@ -18,6 +18,89 @@
from asterisk import Asterisk
logger = logging.getLogger(__name__)
+
+
+class SIPpScenario:
+ """
+ A SIPp based scenario for the Asterisk testsuite.
+
+ Unlike SIPpTest, SIPpScenario does not attempt to manage the Asterisk instance.
+ Instead, it will launch a SIPp scenario, assuming that there is an instance of
+ Asterisk already in existence to handle the SIP messages. This is useful
+ when a SIPp scenario must be integrated with a more complex test (using the TestCase
+ class, for example)
+ """
+ def __init__(self, test_dir, scenario):
+ """
+ Arguments:
+
+ test_dir - The path to the directory containing the run-test file.
+
+ scenario - a SIPp scenario to execute. The scenario should
+ be a dictionary with the key 'scenario' being the filename
+ of the SIPp scneario. Any other key-value pairs are treated as arguments
+ to SIPp. For example, specity '-timeout' : '60s' to set the
+ timeout option to SIPp to 60 seconds. If a parameter specified
+ is also one specified by default, the value provided will be used.
+ The default SIPp parameters include:
+ -p <port> - Unless otherwise specified, the port number will
+ be 5060 + <scenario list index, starting at 1>.
+ So, the first SIPp sceario will use port 5061.
+ -m 1 - Stop the test after 1 'call' is processed.
+ -i 127.0.0.1 - Use this as the local IP address for the Contact
+ headers, Via headers, etc.
+ -timeout 20s - Set a global test timeout of 20 seconds.
+ """
+ self.scenario = scenario
+ self.test_dir = test_dir
+ self.default_port = 5061
+ self.sipp = None
+
+ def run(self):
+ sipp_args = [
+ 'sipp', '127.0.0.1',
+ '-sf', '%s/sipp/%s' % (self.test_dir, self.scenario['scenario'])
+ ]
+ default_args = {
+ '-p' : self.default_port,
+ '-m' : '1',
+ '-i' : '127.0.0.1',
+ '-timeout' : '20s'
+ }
+
+ # Override and extend defaults
+ default_args.update(self.scenario)
+ del default_args['scenario']
+
+ # Override and extend defaults
+ default_args.update(self.scenario)
+ del default_args['scenario']
+
+ for (key, val) in default_args.items():
+ sipp_args.extend([ key, val ])
+
+ logger.info("Executing SIPp scenario: %s" % self.scenario['scenario'])
+ logger.info(sipp_args)
+
+ self.sipp = subprocess.Popen(sipp_args,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+ def waitAndEvaluate(self):
+
+ (out, err) = self.sipp.communicate()
+
+ result = self.sipp.wait()
+ logger.debug(out)
+ if result:
+ logger.warn("SIPp scenario FAILED")
+ passed = False
+ logger.warn(err)
+ else:
+ logger.info("SIPp scenario PASSED")
+ passed = True
+
+ return passed
+
class SIPpTest:
"""
More information about the asterisk-commits
mailing list