summaryrefslogtreecommitdiff
path: root/testit
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2010-04-25 05:51:42 +1200
committerLars Wirzenius <liw@liw.fi>2010-04-25 05:51:42 +1200
commit6ea588287a64a03fa43ba05881db99a4854f6d10 (patch)
treebfbe7be22c7f66f14ba1f4648c471af2420686b8 /testit
parent65fefaa7d09e6c71772c8c7aee827063f72ae523 (diff)
downloaddupfiles-6ea588287a64a03fa43ba05881db99a4854f6d10.tar.gz
Add rudimentary blackbox testing script.
Diffstat (limited to 'testit')
-rwxr-xr-xtestit97
1 files changed, 97 insertions, 0 deletions
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 <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()