From 6ea588287a64a03fa43ba05881db99a4854f6d10 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 25 Apr 2010 05:51:42 +1200 Subject: Add rudimentary blackbox testing script. --- testit | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100755 testit diff --git a/testit b/testit new file mode 100755 index 0000000..83e3a98 --- /dev/null +++ b/testit @@ -0,0 +1,97 @@ +#!/usr/bin/python +# +# Black-box test dupfiles. +# Copyright 2010 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +import os +import shutil +import subprocess +import tempfile + + +class TestCase(object): + + def __init__(self): + self.tempdir = tempfile.mkdtemp() + self.identical = [] + + def setUp(self): + pass + + def tearDown(self): + pass + + def cleanup(self): + shutil.rmtree(self.tempdir) + + def create(self, name, content): + file(os.path.join(self.tempdir, name), 'w').write(content) + + def test(self): + p = subprocess.Popen(['./dupfiles', self.tempdir], + stdout=subprocess.PIPE) + stdout, stderr = p.communicate() + if p.returncode: + raise Exception('dupfiles error: %d\n' % p.returncode) + + identical = self.identical[:] + for line in stdout.splitlines(): + if not line: + continue + line = line.strip() + if line.startswith(self.tempdir + '/'): + line = line[len(self.tempdir + '/'):] + if line in identical: + identical.remove(line) + else: + raise Exception('dupfiles found extra dup: %s' % line) + if identical: + raise Exception('dupfiles failed to find:\n%s' % + '\n'.join(identical)) + + +class DifferentFiles(TestCase): + + def setUp(self): + self.create('foo', 'foo') + self.create('bar', 'bar') + + +class TwoIdenticalFiles(TestCase): + + def setUp(self): + self.create('foo', 'foo') + self.create('bar', 'foo') + self.identical = ['foo', 'bar'] + + +def main(): + klasses = [ + DifferentFiles, + TwoIdenticalFiles, + ] + for klass in klasses: + test = klass() + test.setUp() + test.test() + test.tearDown() + test.cleanup() + print "Test PASS: %s" % (klass.__name__) + + +if __name__ == '__main__': + main() -- cgit v1.2.1