From 3e578a363db4b1b5840c06a9ac2ac54a68fb6657 Mon Sep 17 00:00:00 2001 From: LRN Date: Sun, 22 Jul 2012 13:47:14 +0000 Subject: Use Python batteries in fs_rec test --- contrib/Makefile.am | 2 ++ contrib/pydiffer.py.in | 39 +++++++++++++++++++++++++++++++++++++++ src/fs/test_gnunet_fs_rec.py.in | 12 +++++++++--- 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 contrib/pydiffer.py.in diff --git a/contrib/Makefile.am b/contrib/Makefile.am index aaab287a8..6a6c1e7ab 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -14,6 +14,7 @@ endif noinst_SCRIPTS = \ terminate.py \ + pydiffer.py \ gnunet_pyexpect.py \ gnunet_janitor.py @@ -32,6 +33,7 @@ EXTRA_DIST = \ terminate.py.in \ gnunet_pyexpect.py.in \ gnunet_janitor.py.in \ + pydiffer.py.in \ gnunet-gns-import.sh do_subst = $(SED) -e 's,[@]PYTHON[@],$(PYTHON),g' diff --git a/contrib/pydiffer.py.in b/contrib/pydiffer.py.in new file mode 100644 index 000000000..23d546b25 --- /dev/null +++ b/contrib/pydiffer.py.in @@ -0,0 +1,39 @@ +#!@PYTHON@ +import os +import sys +import difflib +import filecmp + +def getdiff (old, new): + diff = [] + with open (old) as a: + with open (new) as b: + for l in difflib.unified_diff (a.read ().splitlines (), b.read ().splitlines ()): + diff.append (l) + return diff + +def dc_getdiff (dc, old, new): + diff = [] + for f in dc.left_only: + diff.append ("Only in {}: {}".format (old, f)) + for f in dc.right_only: + diff.append ("Only in {}: {}".format (new, f)) + for f in dc.diff_files: + r = getdiff (os.path.join (old, f), os.path.join (new, f)) + diff.extend (r) + for dn, dc in dc.subdirs.items (): + r = dc_getdiff (dc, os.path.join (old, dn), os.path.join (new, dn)) + diff.extend (r) + return diff + +def dcdiff (old, new): + dc = filecmp.dircmp (old, new) + diff = dc_getdiff (dc, old, new) + return diff + +def main (): + for l in dcdiff (sys.argv[1], sys.argv[2]): + print (l) + +if __name__ == '__main__': + main () diff --git a/src/fs/test_gnunet_fs_rec.py.in b/src/fs/test_gnunet_fs_rec.py.in index e86bb0ab2..09e55c144 100755 --- a/src/fs/test_gnunet_fs_rec.py.in +++ b/src/fs/test_gnunet_fs_rec.py.in @@ -23,6 +23,9 @@ import os import subprocess import re import shutil +import tarfile +import filecmp +import pydiffer srcdir = "../.." gnunet_pyexpect_dir = os.path.join (srcdir, "contrib") @@ -30,6 +33,7 @@ if gnunet_pyexpect_dir not in sys.path: sys.path.append (gnunet_pyexpect_dir) from gnunet_pyexpect import pexpect +from pydiffer import dcdiff if os.name == 'posix': download = 'gnunet-download' @@ -55,7 +59,8 @@ arm = subprocess.Popen ([gnunetarm, '-sq', '-c', 'test_gnunet_fs_rec_data.conf'] arm.communicate () # pray that `tar' is in PATH -os.system ('tar xfz test_gnunet_fs_rec_data.tgz') +tar = tarfile.open ('test_gnunet_fs_rec_data.tgz') +tar.extractall () # first, basic publish-search-download run try: pub = pexpect () @@ -93,8 +98,9 @@ try: os.remove ("rdir/b.gnd") os.remove ("rdir/a.gnd") - if 0 != os.system ("diff -r dir rdir"): - raise Exception ("Unexpected difference between source directory and downloaded result") + diff = dcdiff ('dir', 'rdir') + if len (diff) != 0: + raise Exception ("Unexpected difference between source directory and downloaded result:\n{}".format (diff)) finally: -- cgit v1.2.3