diff options
Diffstat (limited to 'pjsip-apps/src/test-pjsua/run.py')
-rw-r--r-- | pjsip-apps/src/test-pjsua/run.py | 262 |
1 files changed, 0 insertions, 262 deletions
diff --git a/pjsip-apps/src/test-pjsua/run.py b/pjsip-apps/src/test-pjsua/run.py deleted file mode 100644 index 092e222b..00000000 --- a/pjsip-apps/src/test-pjsua/run.py +++ /dev/null @@ -1,262 +0,0 @@ -# $Id$ -import sys -import imp -import re -import os -import subprocess -import random -import time -import getopt - -import inc_const as const -import inc_cfg as inc - -# Vars -G_EXE = "" # pjsua executable path -G_INUNIX = False # flags that test is running in Unix - - -# Usage string -usage = \ -""" -run.py - Automated test driver - -Usage: - run.py [options] MODULE CONFIG -Options: - --exe, -e pjsua executable path - --null-audio, -n use null audio -Sample: - run.py -n mod_run.py scripts-run/100_simple.py -""" - -# Parse arguments -try: - opts, args = getopt.getopt(sys.argv[1:], "hne:", ["help", "null-audio", "exe="]) -except getopt.GetoptError, err: - print str(err) - print usage - sys.exit(2) -for o, a in opts: - if o in ("-h", "--help"): - print usage - sys.exit() - elif o in ("-n", "--null-audio"): - inc.HAS_SND_DEV = 0 - elif o in ("-e", "--exe"): - G_EXE = a - else: - print "Unknown options" - sys.exit(2) - -if len(args) != 2: - print "Invalid arguments" - print usage - sys.exit(2) - -# Set global ARGS to be used by modules -inc.ARGS = args - -# Get the pjsua executable name -if G_EXE == "": - if sys.platform.find("win32")!=-1: - e = "../../bin/pjsua_vc6d.exe" - if os.access(e, os.F_OK): - st1 = os.stat(e) - else: - st1 = None - if st1 != None: - G_EXE = e - e = "../../bin/pjsua_vc6.exe" - if os.access(e, os.F_OK): - st2 = os.stat(e) - else: - st2 = None - if st2 != None and (st1==None or st2.st_mtime > st1.st_mtime): - G_EXE = e - st1 = st2 - if G_EXE=="": - print "Unable to find valid pjsua. Please build pjsip first" - sys.exit(1) - G_INUNIX = False - else: - f = open("../../../build.mak", "r") - while True: - line = f.readline() - if not line: - break - if line.find("TARGET_NAME")!=-1: - print line - G_EXE="../../bin/pjsua-" + line.split(":= ")[1] - break - if G_EXE=="": - print "Unable to find ../../../build.mak. Please build pjsip first" - sys.exit(1) - G_INUNIX = True - - -G_EXE = G_EXE.rstrip("\n\r \t") - -################################### -# Poor man's 'expect'-like class -class Expect: - proc = None - echo = False - trace_enabled = False - name = "" - inst_param = None - rh = re.compile(const.DESTROYED) - ra = re.compile(const.ASSERT, re.I) - rr = re.compile(const.STDOUT_REFRESH) - t0 = time.time() - def __init__(self, inst_param): - self.inst_param = inst_param - self.name = inst_param.name - self.echo = inst_param.echo_enabled - self.trace_enabled = inst_param.trace_enabled - fullcmd = G_EXE + " " + inst_param.arg + " --stdout-refresh=5 --stdout-refresh-text=" + const.STDOUT_REFRESH - if not inst_param.enable_buffer: - fullcmd = fullcmd + " --stdout-no-buf" - self.trace("Popen " + fullcmd) - self.proc = subprocess.Popen(fullcmd, shell=G_INUNIX, bufsize=0, stdin=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=False) - def send(self, cmd): - self.trace("send " + cmd) - self.proc.stdin.writelines(cmd + "\n") - self.proc.stdin.flush() - def expect(self, pattern, raise_on_error=True, title=""): - self.trace("expect " + pattern) - r = re.compile(pattern, re.I) - refresh_cnt = 0 - while True: - line = self.proc.stdout.readline() - if line == "": - raise inc.TestError(self.name + ": Premature EOF") - # Print the line if echo is ON - if self.echo: - print self.name + ": " + line, - # Trap assertion error - if self.ra.search(line) != None: - if raise_on_error: - raise inc.TestError(self.name + ": " + line) - else: - return None - # Count stdout refresh text. - if self.rr.search(line) != None: - refresh_cnt = refresh_cnt+1 - if refresh_cnt >= 6: - self.trace("Timed-out!") - if raise_on_error: - raise inc.TestError(self.name + " " + title + ": Timeout expecting pattern: \"" + pattern + "\"") - else: - return None # timeout - # Search for expected text - if r.search(line) != None: - return line - - def sync_stdout(self): - self.trace("sync_stdout") - cmd = "echo 1" + str(random.randint(1000,9999)) - self.send(cmd) - self.expect(cmd) - - def wait(self): - self.trace("wait") - self.proc.wait() - def trace(self, s): - if self.trace_enabled: - now = time.time() - fmt = self.name + ": " + "================== " + s + " ==================" + " [at t=%(time)03d]" - print fmt % {'time':int(now - self.t0)} - -######################### -# Error handling -def handle_error(errmsg, t, close_processes = True): - print "====== Caught error: " + errmsg + " ======" - if (close_processes): - time.sleep(1) - for p in t.process: - p.send("q") - p.send("q") - p.expect(const.DESTROYED, False) - p.wait() - print "Test completed with error: " + errmsg - sys.exit(1) - - -######################### -# MAIN - -# Import the test script -script = imp.load_source("script", inc.ARGS[0]) - -# Init random seed -random.seed() - -# Validate -if script.test == None: - print "Error: no test defined" - sys.exit(1) - -if script.test.skip: - print "Test " + script.test.title + " is skipped" - sys.exit(0) - -if len(script.test.inst_params) == 0: - print "Error: test doesn't contain pjsua run descriptions" - sys.exit(1) - -# Instantiate pjsuas -print "====== Running " + script.test.title + " ======" -print "Using " + G_EXE + " as pjsua executable" - -for inst_param in script.test.inst_params: - try: - # Create pjsua's Expect instance from the param - p = Expect(inst_param) - # Wait until registration completes - if inst_param.have_reg: - p.expect(inst_param.uri+".*registration success") - # Synchronize stdout - p.send("") - p.expect(const.PROMPT) - p.send("echo 1") - p.send("echo 1") - p.expect("echo 1") - # add running instance - script.test.process.append(p) - - except inc.TestError, e: - handle_error(e.desc, script.test) - -# Run the test function -if script.test.test_func != None: - try: - script.test.test_func(script.test) - except inc.TestError, e: - handle_error(e.desc, script.test) - -# Shutdown all instances -time.sleep(2) -for p in script.test.process: - # Unregister if we have_reg to make sure that next tests - # won't wail - if p.inst_param.have_reg: - p.send("ru") - p.expect(p.inst_param.uri+".*unregistration success") - p.send("q") - p.send("q") - time.sleep(0.5) - p.expect(const.DESTROYED, False) - p.wait() - -# Run the post test function -if script.test.post_func != None: - try: - script.test.post_func(script.test) - except inc.TestError, e: - handle_error(e.desc, script.test, False) - -# Done -print "Test " + script.test.title + " completed successfully" -sys.exit(0) - |