diff options
author | Lars Wirzenius <liw@liw.fi> | 2010-04-25 05:51:42 +1200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2010-04-25 05:51:42 +1200 |
commit | 6ea588287a64a03fa43ba05881db99a4854f6d10 (patch) | |
tree | bfbe7be22c7f66f14ba1f4648c471af2420686b8 | |
parent | 65fefaa7d09e6c71772c8c7aee827063f72ae523 (diff) | |
download | dupfiles-6ea588287a64a03fa43ba05881db99a4854f6d10.tar.gz |
Add rudimentary blackbox testing script.
-rwxr-xr-x | testit | 97 |
1 files changed, 97 insertions, 0 deletions
@@ -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 <http://www.gnu.org/licenses/>. + + +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() |