[asterisk-commits] russell: testsuite/asterisk/trunk r162 - in /asterisk/trunk: lib/python/aster...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Mar 31 02:23:12 CDT 2010
Author: russell
Date: Wed Mar 31 02:23:07 2010
New Revision: 162
URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=162
Log:
Extend lib/python, add 2 new tests.
In lib/python, add the ability to create multiple running instances of Asterisk
from within a python script. This was inspired by the same feature provided by
asttest for tests written in lua.
Add the 'ami-login' test. This uses Asterisk() from lib/python/ to create an
instance of Asterisk and ensure that it can log in to the AMI interface
successfully.
Add the 'iax-call-basic' test. This creates 2 Asterisk() instances and originates
an IAX2 call between them. Both ends connect to a FastAGI server implemented by
the test script to verify that the call was set up.
Added:
asterisk/trunk/lib/python/asterisk/asterisk.py (with props)
asterisk/trunk/tests/ami-login/ (with props)
asterisk/trunk/tests/ami-login/configs/
asterisk/trunk/tests/ami-login/configs/logger.conf (with props)
asterisk/trunk/tests/ami-login/configs/manager.conf (with props)
asterisk/trunk/tests/ami-login/run-test (with props)
asterisk/trunk/tests/ami-login/test-config.yaml (with props)
asterisk/trunk/tests/iax-call-basic/ (with props)
asterisk/trunk/tests/iax-call-basic/configs/
asterisk/trunk/tests/iax-call-basic/configs/extensions.conf (with props)
asterisk/trunk/tests/iax-call-basic/configs/iax.conf (with props)
asterisk/trunk/tests/iax-call-basic/configs/logger.conf (with props)
asterisk/trunk/tests/iax-call-basic/configs/manager.conf (with props)
asterisk/trunk/tests/iax-call-basic/configs2/
asterisk/trunk/tests/iax-call-basic/configs2/extensions.conf (with props)
asterisk/trunk/tests/iax-call-basic/configs2/iax.conf (with props)
asterisk/trunk/tests/iax-call-basic/configs2/logger.conf (with props)
asterisk/trunk/tests/iax-call-basic/configs2/manager.conf (with props)
asterisk/trunk/tests/iax-call-basic/run-test (with props)
asterisk/trunk/tests/iax-call-basic/test-config.yaml (with props)
Modified:
asterisk/trunk/tests/tests.yaml
Added: asterisk/trunk/lib/python/asterisk/asterisk.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/lib/python/asterisk/asterisk.py?view=auto&rev=162
==============================================================================
--- asterisk/trunk/lib/python/asterisk/asterisk.py (added)
+++ asterisk/trunk/lib/python/asterisk/asterisk.py Wed Mar 31 02:23:07 2010
@@ -1,0 +1,230 @@
+#!/usr/bin/env python
+""" Asterisk Instances in Python.
+
+This module provides an interface for creating instances of Asterisk
+from within python code.
+
+Copyright (C) 2010, Digium, Inc.
+Russell Bryant <russell at digium.com>
+
+This program is free software, distributed under the terms of
+the GNU General Public License Version 2.
+"""
+
+import sys
+import os
+import time
+import shutil
+import subprocess
+
+from config import ConfigFile
+
+
+class Asterisk:
+ """An instance of Asterisk.
+
+ This class assumes that Asterisk has been installed on the system. The
+ installed version of Asterisk will be mirrored for this dynamically created
+ instance.
+
+ Instantiate an Asterisk object to create an instance of Asterisk from
+ within python code. Multiple instances of Asterisk are allowed. However,
+ custom configuration will need to be provided to prevent some modules from
+ conflicting with each other. For example, modules that listen for network
+ connections will need to be configured to use different ports on each
+ instance of Asterisk.
+ """
+
+ def __init__(self, base=None):
+ """Construct an Asterisk instance.
+
+ Keyword Arguments:
+ base -- This is the root of the files associated with this instance of
+ Asterisk. By default, the base is "tmp/" within the current working
+ directory. Given a base, a unique directory name will be generated to
+ hold all files.
+
+ Example Usage:
+ self.asterisk = Asterisk(base=os.path.join(os.getcwd(),
+ "tests/ami-login/tmp"))
+ """
+ # Find the system installed asterisk.conf
+ ast_confs = [
+ "/etc/asterisk/asterisk.conf",
+ "/usr/local/etc/asterisk/asterisk.conf"
+ ]
+ ast_conf = None
+ for c in ast_confs:
+ if os.path.exists(c):
+ ast_conf = ConfigFile(c)
+ break
+ if ast_conf is None:
+ print "No asterisk.conf found on the system!"
+ return
+
+ # Choose an install base
+ self.base = base
+ if self.base is None:
+ self.base = "%s/tmp" % os.getcwd()
+ i = 1
+ while True:
+ if not os.path.isdir("%s/ast%d" % (self.base, i)):
+ self.base = "%s/ast%d" % (self.base, i)
+ break
+ i += 1
+ os.makedirs(self.base)
+
+ # Mirror system install directory structure
+ dir_cat = None
+ for c in ast_conf.categories:
+ if c.name == "directories":
+ dir_cat = c
+ if dir_cat is None:
+ print "Unable to discover dir layout from asterisk.conf"
+ return
+ self.__gen_ast_conf(ast_conf, dir_cat)
+ for (var, val) in dir_cat.options:
+ self.__mirror_dir(var, val)
+
+ def start(self):
+ """Start this instance of Asterisk.
+
+ This function starts up this instance of Asterisk.
+
+ Example Usage:
+ asterisk.start()
+ """
+ cmd = [
+ "asterisk",
+ "-f", "-g", "-q", "-m",
+ "-C", "%s" % os.path.join(self.astetcdir, "asterisk.conf")
+ ]
+ self.process = subprocess.Popen(cmd)
+ time.sleep(5.0)
+ # XXX
+ # We need a _much_ better way to determine if Asterisk
+ # is actually up and running and fully initialized
+
+ def stop(self):
+ """Stop this instance of Asterisk.
+
+ This function is used to stop this instance of Asterisk.
+
+ Example Usage:
+ asterisk.stop()
+ """
+ self.process.terminate()
+ time.sleep(5.0)
+ try:
+ if not self.process.poll():
+ self.process.kill()
+ except OSError:
+ pass
+ (self.stdout, self.stderr) = self.process.communicate()
+ return self.process.returncode
+
+ def install_config(self, cfg_path):
+ """Install a custom configuration file for this instance of Asterisk.
+
+ By default, the configuration used will be whatever is found in the
+ system install of Asterisk. However, custom configuration files to be
+ used only by this instance can be provided via this API call.
+
+ Keyword Arguments:
+ cfg_path -- This argument must be the path to the configuration file
+ to be installed into the directory tree for this instance of Asterisk.
+
+ Example Usage:
+ asterisk.install_config("tests/my-cool-test/configs/manager.conf")
+ """
+ if not os.path.exists(cfg_path):
+ print "Config file '%s' does not exist" % cfg_path
+ return
+ if not self.astetcdir:
+ print "Don't know where to put local config!"
+ return
+ target_path = os.path.join(self.astetcdir, os.path.basename(cfg_path))
+ if os.path.exists(target_path):
+ os.remove(target_path)
+ try:
+ shutil.copyfile(cfg_path, target_path)
+ except shutil.Error:
+ print "'%s' and '%s' are the same file" % (cfg_path, target_path)
+ except IOError:
+ print "The destination is not writable '%s'" % target_path
+
+ def cli_exec(self, cli_cmd):
+ """Execute a CLI command on this instance of Asterisk.
+
+ Keyword Arguments:
+ cli_cmd -- The command to execute.
+
+ Example Usage:
+ asterisk.cli_exec("core set verbose 10")
+ """
+ cmd = [
+ "asterisk",
+ "-C", "%s" % os.path.join(self.astetcdir, "asterisk.conf"),
+ "-rx", "%s" % cli_cmd
+ ]
+ print "Executing %s ..." % cmd
+ process = subprocess.Popen(cmd)
+ process.wait()
+
+ def __gen_ast_conf(self, ast_conf, dir_cat):
+ self.astetcdir = None
+ for (var, val) in dir_cat.options:
+ if var == "astetcdir":
+ self.astetcdir = "%s%s" % (self.base, val)
+ os.makedirs(self.astetcdir)
+
+ if self.astetcdir is None:
+ print "Could not determine astetcdir"
+ return
+
+ local_ast_conf_path = os.path.join(self.astetcdir, "asterisk.conf")
+
+ try:
+ f = open(local_ast_conf_path, "w")
+ except IOError:
+ print "Failed to open %s" % local_ast_conf_path
+ return
+ except:
+ print "Unexpected error: %s" % sys.exc_info()[0]
+ return
+
+ for c in ast_conf.categories:
+ f.write("[%s]\n\n" % c.name)
+ if c.name == "directories":
+ for (var, val) in c.options:
+ f.write("%s = %s%s\n" % (var, self.base, val))
+ else:
+ for (var, val) in c.options:
+ f.write("%s = %s\n" % (var, val))
+ f.write("\n")
+
+ f.close()
+
+ def __mirror_dir(self, ast_dir_name, ast_dir_path):
+ self.__makedirs(ast_dir_path)
+ dirs_only = [ "astrundir", "astlogdir", "astspooldir" ]
+ if ast_dir_name in dirs_only:
+ return
+ blacklist = [ "astdb" ]
+ for dirname, dirnames, filenames in os.walk(ast_dir_path):
+ for filename in filenames:
+ target = "%s/%s" % (self.base, os.path.join(ast_dir_path,
+ dirname, filename))
+ if os.path.exists(target) or filename in blacklist:
+ continue
+ os.symlink(os.path.join(ast_dir_path, dirname, filename),
+ target)
+
+ def __makedirs(self, ast_dir_path):
+ target_dir = "%s%s" % (self.base, ast_dir_path)
+ if not os.path.exists(target_dir):
+ os.makedirs(target_dir)
+ for dirname, dirnames, filenames in os.walk(ast_dir_path):
+ for d in dirnames:
+ self.__makedirs(os.path.join(target_dir, dirname, d))
+
Propchange: asterisk/trunk/lib/python/asterisk/asterisk.py
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/lib/python/asterisk/asterisk.py
------------------------------------------------------------------------------
svn:executable = *
Propchange: asterisk/trunk/lib/python/asterisk/asterisk.py
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/lib/python/asterisk/asterisk.py
------------------------------------------------------------------------------
svn:mime-type = text/plain
Propchange: asterisk/trunk/tests/ami-login/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Mar 31 02:23:07 2010
@@ -1,0 +1,1 @@
+tmp
Added: asterisk/trunk/tests/ami-login/configs/logger.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/ami-login/configs/logger.conf?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/ami-login/configs/logger.conf (added)
+++ asterisk/trunk/tests/ami-login/configs/logger.conf Wed Mar 31 02:23:07 2010
@@ -1,0 +1,7 @@
+[general]
+
+[logfiles]
+
+console =>
+messages => notice,warning,error
+full => notice,warning,error,debug,verbose
Propchange: asterisk/trunk/tests/ami-login/configs/logger.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/ami-login/configs/logger.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/ami-login/configs/logger.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/ami-login/configs/manager.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/ami-login/configs/manager.conf?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/ami-login/configs/manager.conf (added)
+++ asterisk/trunk/tests/ami-login/configs/manager.conf Wed Mar 31 02:23:07 2010
@@ -1,0 +1,10 @@
+[general]
+enabled = yes
+port = 5038
+bindaddr = 127.0.0.1
+
+[user]
+secret = mysecret
+read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
+write = system,call,agent,user,config,command,reporting,originate
+
Propchange: asterisk/trunk/tests/ami-login/configs/manager.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/ami-login/configs/manager.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/ami-login/configs/manager.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/ami-login/run-test
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/ami-login/run-test?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/ami-login/run-test (added)
+++ asterisk/trunk/tests/ami-login/run-test Wed Mar 31 02:23:07 2010
@@ -1,0 +1,82 @@
+#!/usr/bin/env python
+'''
+Copyright (C) 2010, Digium, Inc.
+Russell Bryant <russell at digium.com>
+
+This program is free software, distributed under the terms of
+the GNU General Public License Version 2.
+'''
+
+import sys
+import os
+import shutil
+import time
+from twisted.application import service, internet
+from twisted.internet import reactor, defer
+from starpy import manager
+
+sys.path.append("lib/python")
+from asterisk.asterisk import Asterisk
+
+
+class AMILoginTest:
+ def __init__(self):
+ self.passed = False
+
+ reactor.callWhenRunning(self.run)
+
+ print "Creating Asterisk instance ..."
+ self.asterisk = Asterisk(base=os.path.join(os.getcwd(),
+ "tests/ami-login/tmp"))
+ self.asterisk.install_config("tests/ami-login/configs/manager.conf")
+ self.asterisk.install_config("tests/ami-login/configs/logger.conf")
+
+ def start_asterisk(self):
+ print "Starting Asterisk ..."
+ self.asterisk.start()
+
+ def stop_asterisk(self):
+ print "Stopping Asterisk ..."
+ self.asterisk.stop()
+
+ def on_logoff(self, ami):
+ print "Logoff successful."
+ self.passed = True
+ reactor.stop()
+
+ def on_logoff_error(self):
+ print "Logoff failed."
+ reactor.stop()
+ self.stop_asterisk()
+
+ def on_connect(self, ami):
+ print "Connected. Now logging off ..."
+ ami.logoff().addCallbacks(self.on_logoff, self.on_logoff_error)
+
+ def on_connect_error(self, ami):
+ print "FAILED TO CONNECT AND LOGIN TO AMI"
+ reactor.stop()
+ self.stop_asterisk()
+
+ def run(self):
+ self.start_asterisk()
+
+ print "Logging in to the AMI ..."
+ self.ami_factory = manager.AMIFactory("user", "mysecret")
+ self.ami_factory.login('127.0.0.1', 5038).addCallbacks(self.on_connect,
+ self.on_connect_error)
+
+def main():
+ test = AMILoginTest()
+ reactor.run()
+ test.stop_asterisk()
+ if test.passed:
+ return 0
+ return 1
+
+
+if __name__ == "__main__":
+ sys.exit(main() or 0)
+
+
+# vim:sw=4:ts=4:expandtab:textwidth=79
Propchange: asterisk/trunk/tests/ami-login/run-test
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/ami-login/run-test
------------------------------------------------------------------------------
svn:executable = *
Propchange: asterisk/trunk/tests/ami-login/run-test
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/ami-login/run-test
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/ami-login/test-config.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/ami-login/test-config.yaml?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/ami-login/test-config.yaml (added)
+++ asterisk/trunk/tests/ami-login/test-config.yaml Wed Mar 31 02:23:07 2010
@@ -1,0 +1,11 @@
+testinfo:
+ summary: 'Test loggin in to the Asterisk Manager Interface'
+ description: |
+ 'This test provides a basic AMI sanity check. It will log in,
+ and log out.'
+
+properties:
+ minversion: '1.4'
+ dependencies:
+ - python : 'twisted'
+ - python : 'starpy'
Propchange: asterisk/trunk/tests/ami-login/test-config.yaml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/ami-login/test-config.yaml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/ami-login/test-config.yaml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Propchange: asterisk/trunk/tests/iax-call-basic/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Mar 31 02:23:07 2010
@@ -1,0 +1,1 @@
+tmp
Added: asterisk/trunk/tests/iax-call-basic/configs/extensions.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/iax-call-basic/configs/extensions.conf?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/iax-call-basic/configs/extensions.conf (added)
+++ asterisk/trunk/tests/iax-call-basic/configs/extensions.conf Wed Mar 31 02:23:07 2010
@@ -1,0 +1,8 @@
+[general]
+
+[globals]
+
+[iaxtest]
+
+exten => 1000,1,Answer()
+exten => 1000,n,AGI(agi://127.0.0.1:4573)
Propchange: asterisk/trunk/tests/iax-call-basic/configs/extensions.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/iax-call-basic/configs/extensions.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/iax-call-basic/configs/extensions.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/iax-call-basic/configs/iax.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/iax-call-basic/configs/iax.conf?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/iax-call-basic/configs/iax.conf (added)
+++ asterisk/trunk/tests/iax-call-basic/configs/iax.conf Wed Mar 31 02:23:07 2010
@@ -1,0 +1,14 @@
+[general]
+
+bindport=4570
+bindaddr=127.0.0.1
+
+disallow=all
+allow=ulaw
+
+jitterbuffer=no
+forcejitterbuffer=no
+
+[guest]
+type=user
+context=iaxtest
Propchange: asterisk/trunk/tests/iax-call-basic/configs/iax.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/iax-call-basic/configs/iax.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/iax-call-basic/configs/iax.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/iax-call-basic/configs/logger.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/iax-call-basic/configs/logger.conf?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/iax-call-basic/configs/logger.conf (added)
+++ asterisk/trunk/tests/iax-call-basic/configs/logger.conf Wed Mar 31 02:23:07 2010
@@ -1,0 +1,8 @@
+[general]
+
+[logfiles]
+
+console =>
+;console => notice,warning,error,debug
+messages => notice,warning,error
+full => notice,warning,error,debug,verbose
Propchange: asterisk/trunk/tests/iax-call-basic/configs/logger.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/iax-call-basic/configs/logger.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/iax-call-basic/configs/logger.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/iax-call-basic/configs/manager.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/iax-call-basic/configs/manager.conf?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/iax-call-basic/configs/manager.conf (added)
+++ asterisk/trunk/tests/iax-call-basic/configs/manager.conf Wed Mar 31 02:23:07 2010
@@ -1,0 +1,10 @@
+[general]
+enabled = yes
+port = 5038
+bindaddr = 127.0.0.1
+
+[user]
+secret = mysecret
+read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
+write = system,call,agent,user,config,command,reporting,originate
+
Propchange: asterisk/trunk/tests/iax-call-basic/configs/manager.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/iax-call-basic/configs/manager.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/iax-call-basic/configs/manager.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/iax-call-basic/configs2/extensions.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/iax-call-basic/configs2/extensions.conf?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/iax-call-basic/configs2/extensions.conf (added)
+++ asterisk/trunk/tests/iax-call-basic/configs2/extensions.conf Wed Mar 31 02:23:07 2010
@@ -1,0 +1,8 @@
+[general]
+
+[globals]
+
+[iaxtest]
+
+exten => 1000,1,Answer()
+exten => 1000,n,AGI(agi://127.0.0.1:4573)
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/extensions.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/extensions.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/extensions.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/iax-call-basic/configs2/iax.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/iax-call-basic/configs2/iax.conf?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/iax-call-basic/configs2/iax.conf (added)
+++ asterisk/trunk/tests/iax-call-basic/configs2/iax.conf Wed Mar 31 02:23:07 2010
@@ -1,0 +1,11 @@
+[general]
+
+bindport=4569
+bindaddr=127.0.0.1
+
+disallow=all
+allow=ulaw
+
+[guest]
+type=user
+context=iaxtest
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/iax.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/iax.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/iax.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/iax-call-basic/configs2/logger.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/iax-call-basic/configs2/logger.conf?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/iax-call-basic/configs2/logger.conf (added)
+++ asterisk/trunk/tests/iax-call-basic/configs2/logger.conf Wed Mar 31 02:23:07 2010
@@ -1,0 +1,8 @@
+[general]
+
+[logfiles]
+
+console =>
+;console => notice,warning,error,debug
+messages => notice,warning,error
+full => notice,warning,error,debug,verbose
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/logger.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/logger.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/logger.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/iax-call-basic/configs2/manager.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/iax-call-basic/configs2/manager.conf?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/iax-call-basic/configs2/manager.conf (added)
+++ asterisk/trunk/tests/iax-call-basic/configs2/manager.conf Wed Mar 31 02:23:07 2010
@@ -1,0 +1,10 @@
+[general]
+enabled = yes
+port = 5039
+bindaddr = 127.0.0.1
+
+[user]
+secret = mysecret
+read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
+write = system,call,agent,user,config,command,reporting,originate
+
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/manager.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/manager.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/iax-call-basic/configs2/manager.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/iax-call-basic/run-test
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/iax-call-basic/run-test?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/iax-call-basic/run-test (added)
+++ asterisk/trunk/tests/iax-call-basic/run-test Wed Mar 31 02:23:07 2010
@@ -1,0 +1,104 @@
+#!/usr/bin/env python
+'''
+Copyright (C) 2010, Digium, Inc.
+Russell Bryant <russell at digium.com>
+
+This program is free software, distributed under the terms of
+the GNU General Public License Version 2.
+'''
+
+import sys
+import os
+import time
+from twisted.application import service, internet
+from twisted.internet import reactor, defer
+from starpy import fastagi
+
+sys.path.append("lib/python")
+from asterisk.asterisk import Asterisk
+
+
+class IAXCallTest:
+ def __init__(self):
+ reactor.callWhenRunning(self.run)
+
+ self.chan1_connected = False
+ self.chan2_connected = False
+ self.f = fastagi.FastAGIFactory(self.fastagi_func)
+ reactor.listenTCP(4573, self.f, 50, '127.0.0.1')
+
+ print "Creating Asterisk instances ..."
+
+ self.asterisk = Asterisk(base=os.path.join(os.getcwd(),
+ "tests/iax-call-basic/tmp/"))
+ self.asterisk.install_config("tests/iax-call-basic/configs/manager.conf")
+ self.asterisk.install_config("tests/iax-call-basic/configs/logger.conf")
+ self.asterisk.install_config("tests/iax-call-basic/configs/extensions.conf")
+ self.asterisk.install_config("tests/iax-call-basic/configs/iax.conf")
+
+ self.asterisk2 = Asterisk(base=os.path.join(os.getcwd(),
+ "tests/iax-call-basic/tmp/"))
+ self.asterisk2.install_config("tests/iax-call-basic/configs2/manager.conf")
+ self.asterisk2.install_config("tests/iax-call-basic/configs2/logger.conf")
+ self.asterisk2.install_config("tests/iax-call-basic/configs2/extensions.conf")
+ self.asterisk2.install_config("tests/iax-call-basic/configs2/iax.conf")
+
+ def fastagi_func(self, agi):
+ sequence = fastagi.InSequence()
+ def get_channel(c):
+ print "Connection received for %s ..." % c
+ if c.split("-")[0] == "IAX2/127.0.0.1:4569":
+ self.chan1_connected = True
+ elif c.split("-")[0] == "IAX2/127.0.0.1:4570":
+ self.chan2_connected = True
+ agi.getVariable("CHANNEL").addCallback(get_channel)
+ sequence.append(agi.execute, "Wait", "5")
+ sequence.append(agi.hangup)
+ sequence.append(agi.finish)
+
+ def start_asterisk(self):
+ print "Starting Asterisk instances ..."
+ self.asterisk.start()
+ self.asterisk2.start()
+
+ def stop_asterisk(self):
+ print "Stopping Asterisk instances ..."
+ self.asterisk.stop()
+ self.asterisk2.stop()
+
+ def run(self):
+ self.start_asterisk()
+
+ cmds = [
+ "core set verbose 10",
+ "iax2 set debug on"
+ ]
+ for c in cmds:
+ self.asterisk.cli_exec(c)
+ self.asterisk2.cli_exec(c)
+
+ self.asterisk.cli_exec(
+ "originate IAX2/guest at 127.0.0.1:4569/1000 extension 1000 at iaxtest")
+
+
+def stop_reactor():
+ print "Stopping Reactor ..."
+ if reactor.running:
+ reactor.stop()
+
+
+def main():
+ test = IAXCallTest()
+ reactor.callLater(20, stop_reactor)
+ reactor.run()
+ test.stop_asterisk()
+ if test.chan1_connected and test.chan2_connected:
+ return 0
+ return 1
+
+
+if __name__ == "__main__":
+ sys.exit(main() or 0)
+
+
+# vim:sw=4:ts=4:expandtab:textwidth=79
Propchange: asterisk/trunk/tests/iax-call-basic/run-test
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/iax-call-basic/run-test
------------------------------------------------------------------------------
svn:executable = *
Propchange: asterisk/trunk/tests/iax-call-basic/run-test
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/iax-call-basic/run-test
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/iax-call-basic/test-config.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/iax-call-basic/test-config.yaml?view=auto&rev=162
==============================================================================
--- asterisk/trunk/tests/iax-call-basic/test-config.yaml (added)
+++ asterisk/trunk/tests/iax-call-basic/test-config.yaml Wed Mar 31 02:23:07 2010
@@ -1,0 +1,11 @@
+testinfo:
+ summary: 'Test a basic IAX2 call'
+ description: |
+ 'This test initiates an IAX2 call between 2 instances of Asterisk.
+ Both ends connect to a FastAGI server implemented in the test script.'
+
+properties:
+ minversion: '1.4'
+ dependencies:
+ - python : 'twisted'
+ - python : 'starpy'
Propchange: asterisk/trunk/tests/iax-call-basic/test-config.yaml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/iax-call-basic/test-config.yaml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/iax-call-basic/test-config.yaml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: asterisk/trunk/tests/tests.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/tests.yaml?view=diff&rev=162&r1=161&r2=162
==============================================================================
--- asterisk/trunk/tests/tests.yaml (original)
+++ asterisk/trunk/tests/tests.yaml Wed Mar 31 02:23:07 2010
@@ -1,5 +1,7 @@
# Enter tests here in the order they should be considered for execution:
tests:
- test: 'example'
+ - test: 'ami-login'
- test: 'blind-transfer-accountcode'
- test: 'rfc2833_dtmf_detect'
+ - test: 'iax-call-basic'
More information about the asterisk-commits
mailing list