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)]) |