Use Python batteries in fs_rec test
authorLRN <lrn1986@gmail.com>
Sun, 22 Jul 2012 13:47:14 +0000 (13:47 +0000)
committerLRN <lrn1986@gmail.com>
Sun, 22 Jul 2012 13:47:14 +0000 (13:47 +0000)
contrib/Makefile.am
contrib/pydiffer.py.in [new file with mode: 0644]
src/fs/test_gnunet_fs_rec.py.in

index aaab287a8456152104d8a680c935f0ec5f9df275..6a6c1e7abc550327ef98ff18ecf7cbca38628fb4 100644 (file)
@@ -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 (file)
index 0000000..23d546b
--- /dev/null
@@ -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 ()
index e86bb0ab2b3922c2be6d8a9a59e79f433ab2d1d1..09e55c144e63f94e748917cc77a5235e969500fb 100755 (executable)
@@ -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: