tests/compare.py

branch
trunk
changeset 10
f0acfe12a0e2
parent 8
97388f5ff770
child 14
6f9e1bb59719
equal deleted inserted replaced
9:920417b8acc9 10:f0acfe12a0e2
26 TESTSCRIPT_NAME = 'testscript.sh' 26 TESTSCRIPT_NAME = 'testscript.sh'
27 SCRIPT_PROLOGUE = """#!/bin/sh 27 SCRIPT_PROLOGUE = """#!/bin/sh
28 set -e 28 set -e
29 """ 29 """
30 30
31 tests = {'test-1.23.tar': ([], ['tar -xf test-1.23.tar'], []), 31 tests = {'test-1.23.tar': ([], ['tar -xf $1'], []),
32 'test-1.23.tar.gz': ([], ['tar -xzf test-1.23.tar.gz'], []), 32 'test-1.23.tar.gz': ([], ['tar -xzf $1'], []),
33 'test-1.23.tar.bz2': ([], ['mkdir test-1.23', 33 'test-1.23.tar.bz2': ([], ['mkdir test-1.23',
34 'cd test-1.23', 34 'cd test-1.23',
35 'tar -jxf ../test-1.23.tar.bz2'], []), 35 'tar -jxf ../$1'], []),
36 'test-1.23.zip': ([], ['mkdir test-1.23', 36 'test-1.23.zip': ([], ['mkdir test-1.23',
37 'cd test-1.23', 37 'cd test-1.23',
38 'unzip -q ../test-1.23.zip'], []), 38 'unzip -q ../$1'], []),
39 'test-1.23.cpio': ([], ['cpio -i --make-directories \ 39 'test-1.23.cpio': ([], ['cpio -i --make-directories \
40 <test-1.23.cpio 2>/dev/null'], []), 40 <$1 2>/dev/null'], []),
41 'test-1.23_all.deb': ([], ['TD=$PWD', 41 'test-1.23_all.deb': ([], ['TD=$PWD',
42 'mkdir test-1.23', 42 'mkdir test-1.23',
43 'cd /tmp', 43 'cd /tmp',
44 'ar x $TD/test-1.23_all.deb data.tar.gz', 44 'ar x $TD/$1 data.tar.gz',
45 'cd $TD/test-1.23', 45 'cd $TD/test-1.23',
46 'tar -zxf /tmp/data.tar.gz', 46 'tar -zxf /tmp/data.tar.gz',
47 'rm /tmp/data.tar.gz'], []), 47 'rm /tmp/data.tar.gz'], []),
48 'test-recursive-badperms.tar.bz2': ( 48 'test-recursive-badperms.tar.bz2': (
49 ['-r'], 49 ['-r'],
50 ['mkdir test-recursive-badperms', 50 ['mkdir test-recursive-badperms',
51 'cd test-recursive-badperms', 51 'cd test-recursive-badperms',
52 'tar -jxf ../test-recursive-badperms.tar.bz2', 52 'tar -jxf ../$1',
53 'mkdir test-badperms', 53 'mkdir test-badperms',
54 'cd test-badperms', 54 'cd test-badperms',
55 'tar -xf ../test-badperms.tar', 55 'tar -xf ../test-badperms.tar',
56 'chmod 755 testdir'], 56 'chmod 755 testdir'],
57 ['if [ "x`cat test-recursive-badperms/test-badperms/testdir/testfile`" = \ 57 ['if [ "x`cat test-recursive-badperms/test-badperms/testdir/testfile`" = \
70 class ExtractorTestError(Exception): 70 class ExtractorTestError(Exception):
71 pass 71 pass
72 72
73 73
74 class ExtractorTest(object): 74 class ExtractorTest(object):
75 def __init__(self, archive_filename, info): 75 def __init__(self, directory, archive_filename, info):
76 self.archive_filename = archive_filename 76 self.directory = directory
77 self.archive_filename = os.path.join(directory, archive_filename)
77 self.arguments, self.shell_commands, self.shell_test = info 78 self.arguments, self.shell_commands, self.shell_test = info
78 79
79 def get_results(self, commands): 80 def get_results(self, commands):
80 status = subprocess.call(commands) 81 status = subprocess.call(commands)
81 if status != 0: 82 if status != 0:
92 script.close() 93 script.close()
93 subprocess.call(['chmod', 'u+w', TESTSCRIPT_NAME]) 94 subprocess.call(['chmod', 'u+w', TESTSCRIPT_NAME])
94 95
95 def get_shell_results(self): 96 def get_shell_results(self):
96 self.write_script(self.shell_commands) 97 self.write_script(self.shell_commands)
97 return self.get_results(['sh', TESTSCRIPT_NAME]) 98 return self.get_results(['sh', TESTSCRIPT_NAME, self.archive_filename])
98 99
99 def get_extractor_results(self): 100 def get_extractor_results(self):
100 return self.get_results(['../scripts/x'] + self.arguments + 101 script = os.path.join(self.directory, '../scripts/x')
102 return self.get_results([script] + self.arguments +
101 [self.archive_filename]) 103 [self.archive_filename])
102 104
103 def get_posttest_result(self): 105 def get_posttest_result(self):
104 if not self.shell_test: 106 if not self.shell_test:
105 return 0 107 return 0
141 else: 143 else:
142 print "Passed:", self.archive_filename 144 print "Passed:", self.archive_filename
143 return True 145 return True
144 146
145 147
146 successes = 0 148 def run_tests(directory, testnames):
147 failures = 0 149 successes = 0
150 failures = 0
151 for testname in testnames:
152 test = ExtractorTest(directory, testname, tests[testname])
153 if test.run():
154 successes += 1
155 else:
156 failures += 1
157 return successes, failures
158
159 results = []
148 testnames = tests.keys() 160 testnames = tests.keys()
149 testnames.sort() 161 testnames.sort()
150 for testname in testnames: 162 results.append(run_tests('.', testnames))
151 test = ExtractorTest(testname, tests[testname]) 163 os.mkdir('inside-dir')
152 if test.run(): 164 os.chdir('inside-dir')
153 successes += 1 165 results.append(run_tests('..', testnames))
154 else: 166 os.chdir('..')
155 failures += 1 167 subprocess.call(['rm', '-rf', 'inside-dir'])
156 print "Totals: %s successes, %s failures" % (successes, failures) 168 print "Totals: %s successes, %s failures" % \
157 169 tuple([sum(total) for total in zip(*results)])

mercurial