blob: 9c78075d42c9a29e4fa5d341db9a7737fefb8902 [file] [log] [blame]
Benny Prijonocc1ada52008-06-15 19:43:43 +00001# $Id$
Benny Prijono8c331df2008-06-13 15:32:08 +00002import os
3import sys
Benny Prijono9bc3c182008-06-26 22:17:33 +00004import time
Nanang Izzuddina680bd62008-06-27 21:12:12 +00005import re
6import shutil
7
Benny Prijonof9ebaf62010-03-27 02:35:06 +00008PYTHON = os.path.basename(sys.executable)
Benny Prijono8c331df2008-06-13 15:32:08 +00009
Benny Prijonof9bd1f22008-06-16 13:04:44 +000010# Usage:
11# runall.py [test-to-resume]
12
13
Benny Prijono8c331df2008-06-13 15:32:08 +000014# Initialize test list
15tests = []
16
17# Excluded tests (because they fail?)
18excluded_tests = [ "svn",
19 "pyc",
Nanang Izzuddinb40e2872008-06-25 15:05:21 +000020 "scripts-call/150_srtp_2_1", # SRTP optional 'cannot' call SRTP mandatory
Benny Prijono9bc3c182008-06-26 22:17:33 +000021 "scripts-call/301_ice_public_a.py", # Unreliable, proxy returns 408 sometimes
Benny Prijono62a969c2008-06-26 13:29:29 +000022 "scripts-call/301_ice_public_b.py", # Doesn't work because OpenSER modifies SDP
Benny Prijonoe4ddeec2008-06-27 08:51:55 +000023 "scripts-pres/200_publish.py", # Ok from cmdline, error from runall.py
Nanang Izzuddinb40e2872008-06-25 15:05:21 +000024 "scripts-media-playrec/100_resample_lf_8_11.py", # related to clock-rate 11 kHz problem
25 "scripts-media-playrec/100_resample_lf_8_22.py", # related to clock-rate 22 kHz problem
26 "scripts-media-playrec/100_resample_lf_11" # related to clock-rate 11 kHz problem
Benny Prijono7d578a72008-06-20 00:25:55 +000027 ]
Benny Prijono8c331df2008-06-13 15:32:08 +000028
Benny Prijonocc1ada52008-06-15 19:43:43 +000029# Add basic tests
Benny Prijono8c331df2008-06-13 15:32:08 +000030for f in os.listdir("scripts-run"):
31 tests.append("mod_run.py scripts-run/" + f)
32
Benny Prijonocc1ada52008-06-15 19:43:43 +000033# Add basic call tests
Benny Prijono8c331df2008-06-13 15:32:08 +000034for f in os.listdir("scripts-call"):
35 tests.append("mod_call.py scripts-call/" + f)
36
Benny Prijonocc1ada52008-06-15 19:43:43 +000037# Add presence tests
38for f in os.listdir("scripts-pres"):
39 tests.append("mod_pres.py scripts-pres/" + f)
40
Benny Prijono7d578a72008-06-20 00:25:55 +000041# Add mod_sendto tests
42for f in os.listdir("scripts-sendto"):
43 tests.append("mod_sendto.py scripts-sendto/" + f)
44
Nanang Izzuddinb40e2872008-06-25 15:05:21 +000045# Add mod_media_playrec tests
46for f in os.listdir("scripts-media-playrec"):
47 tests.append("mod_media_playrec.py scripts-media-playrec/" + f)
48
49# Add mod_pesq tests
50for f in os.listdir("scripts-pesq"):
51 tests.append("mod_pesq.py scripts-pesq/" + f)
52
Benny Prijonoc7bdb082008-07-07 20:15:25 +000053# Add recvfrom tests
54for f in os.listdir("scripts-recvfrom"):
55 tests.append("mod_recvfrom.py scripts-recvfrom/" + f)
56
Benny Prijono8c331df2008-06-13 15:32:08 +000057# Filter-out excluded tests
58for pat in excluded_tests:
59 tests = [t for t in tests if t.find(pat)==-1]
60
Benny Prijono43b6ece2008-12-29 14:52:29 +000061
Benny Prijonof9bd1f22008-06-16 13:04:44 +000062resume_script=""
Benny Prijonof44f79b2010-03-23 14:03:30 +000063shell_cmd=""
64
65# Parse arguments
66sys.argv.pop(0)
67while len(sys.argv):
68 if sys.argv[0]=='/h' or sys.argv[0]=='-h' or sys.argv[0]=='--help' or sys.argv[0]=='/help':
69 sys.argv.pop(0)
70 print "Usage:"
71 print " runall.py [OPTIONS] [run.py-OPTIONS]"
72 print "OPTIONS:"
73 print " --list"
74 print " List the tests"
75 print " --list-xml"
76 print " List the tests as XML format suitable for ccdash"
77 print " --resume,-r RESUME"
78 print " RESUME is string/substring to specify where to resume tests."
79 print " If this argument is omited, tests will start from the beginning."
80 print " --shell,-s SHELL"
81 print " Run the tests with the specified SHELL cmd. This can also be"
82 print " used to run the test with ccdash. Example:"
83 print " --shell '/bin/sh -c'"
84 print " run.py-OPTIONS are applicable here"
85 sys.exit(0)
86 elif sys.argv[0] == '-r' or sys.argv[0] == '--resume':
87 if len(sys.argv) > 1:
88 resume_script=sys.argv[1]
89 sys.argv.pop(0)
90 sys.argv.pop(1)
91 else:
92 sys.argv.pop(0)
93 sys.stderr.write("Error: argument value required")
94 sys.exit(1)
95 elif sys.argv[0] == '--list':
96 sys.argv.pop(0)
97 for t in tests:
98 print t
99 sys.exit(0)
100 elif sys.argv[0] == '--list-xml':
101 sys.argv.pop(0)
102 for t in tests:
103 (mod,param) = t.split(None,2)
104 tname = mod[4:mod.find(".py")] + "_" + \
105 param[param.find("/")+1:param.find(".py")]
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000106 c = ""
107 if len(sys.argv):
108 c = " ".join(sys.argv) + " "
109 tcmd = PYTHON + ' run.py ' + c + t
Benny Prijonof44f79b2010-03-23 14:03:30 +0000110 print '\t\t<Test name="%s" cmd="%s" wdir="tests/pjsua" />' % (tname, tcmd)
111 sys.exit(0)
112 elif sys.argv[0] == '-s' or sys.argv[0] == '--shell':
113 if len(sys.argv) > 1:
114 shell_cmd = sys.argv[1]
115 sys.argv.pop(0)
116 sys.argv.pop(1)
117 else:
118 sys.argv.pop(0)
119 sys.stderr.write("Error: argument value required")
120 sys.exit(1)
Benny Prijonof9bd1f22008-06-16 13:04:44 +0000121
122
Nanang Izzuddina680bd62008-06-27 21:12:12 +0000123# Generate arguments for run.py
Benny Prijonof44f79b2010-03-23 14:03:30 +0000124argv_st = " ".join(sys.argv)
Nanang Izzuddina680bd62008-06-27 21:12:12 +0000125
126# Init vars
Nanang Izzuddin65417bd2008-06-27 22:15:41 +0000127fails_cnt = 0
128tests_cnt = 0
Nanang Izzuddina680bd62008-06-27 21:12:12 +0000129
Nanang Izzuddin65417bd2008-06-27 22:15:41 +0000130# Re-create "logs" directory
131try:
132 shutil.rmtree("logs")
133except:
134 print "Warning: failed in removing directory 'logs'"
135
Nanang Izzuddina680bd62008-06-27 21:12:12 +0000136try:
137 os.mkdir("logs")
138except:
Nanang Izzuddin65417bd2008-06-27 22:15:41 +0000139 print "Warning: failed in creating directory 'logs'"
Nanang Izzuddina680bd62008-06-27 21:12:12 +0000140
Benny Prijono8c331df2008-06-13 15:32:08 +0000141# Now run the tests
Benny Prijonof44f79b2010-03-23 14:03:30 +0000142total_cnt = len(tests)
Benny Prijono8c331df2008-06-13 15:32:08 +0000143for t in tests:
Benny Prijonof9bd1f22008-06-16 13:04:44 +0000144 if resume_script!="" and t.find(resume_script)==-1:
145 print "Skipping " + t +".."
Benny Prijonof44f79b2010-03-23 14:03:30 +0000146 total_cnt = total_cnt - 1
Benny Prijonof9bd1f22008-06-16 13:04:44 +0000147 continue
148 resume_script=""
Nanang Izzuddina680bd62008-06-27 21:12:12 +0000149 cmdline = "python run.py " + argv_st + t
Benny Prijonof44f79b2010-03-23 14:03:30 +0000150 if shell_cmd:
151 cmdline = "%s '%s'" % (shell_cmd, cmdline)
Benny Prijono9bc3c182008-06-26 22:17:33 +0000152 t0 = time.time()
Benny Prijonof44f79b2010-03-23 14:03:30 +0000153 msg = "Running %d/%d: %s..." % (tests_cnt+1, total_cnt, cmdline)
154 sys.stdout.write(msg)
155 sys.stdout.flush()
Benny Prijono8c331df2008-06-13 15:32:08 +0000156 ret = os.system(cmdline + " > output.log")
Benny Prijono9bc3c182008-06-26 22:17:33 +0000157 t1 = time.time()
Benny Prijono8c331df2008-06-13 15:32:08 +0000158 if ret != 0:
Benny Prijono9bc3c182008-06-26 22:17:33 +0000159 dur = int(t1 - t0)
160 print " failed!! [" + str(dur) + "s]"
Nanang Izzuddina680bd62008-06-27 21:12:12 +0000161 logname = re.search(".*\s+(.*)", t).group(1)
162 logname = re.sub("[\\\/]", "_", logname)
Nanang Izzuddin65417bd2008-06-27 22:15:41 +0000163 logname = re.sub("\.py$", ".log", logname)
Nanang Izzuddina680bd62008-06-27 21:12:12 +0000164 logname = "logs/" + logname
165 shutil.move("output.log", logname)
166 print "Please see '" + logname + "' for the test log."
Nanang Izzuddin65417bd2008-06-27 22:15:41 +0000167 fails_cnt += 1
Benny Prijono9bc3c182008-06-26 22:17:33 +0000168 else:
169 dur = int(t1 - t0)
170 print " ok [" + str(dur) + "s]"
Nanang Izzuddin65417bd2008-06-27 22:15:41 +0000171 tests_cnt += 1
Benny Prijono8c331df2008-06-13 15:32:08 +0000172
Nanang Izzuddin038effe2008-06-28 00:00:10 +0000173if fails_cnt == 0:
Nanang Izzuddin65417bd2008-06-27 22:15:41 +0000174 print "All " + str(tests_cnt) + " tests completed successfully"
Nanang Izzuddina680bd62008-06-27 21:12:12 +0000175else:
Nanang Izzuddin65417bd2008-06-27 22:15:41 +0000176 print str(tests_cnt) + " tests completed, " + str(fails_cnt) + " test(s) failed"
Nanang Izzuddina680bd62008-06-27 21:12:12 +0000177