aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLRN <lrn1986@gmail.com>2012-07-22 13:47:14 +0000
committerLRN <lrn1986@gmail.com>2012-07-22 13:47:14 +0000
commit3e578a363db4b1b5840c06a9ac2ac54a68fb6657 (patch)
tree8ec86a2a71759f4cf0de97043aa5343cc68c3fc9
parenta669108f0f2d602bfea9c7a8132fb761388493ad (diff)
downloadgnunet-3e578a363db4b1b5840c06a9ac2ac54a68fb6657.tar.gz
gnunet-3e578a363db4b1b5840c06a9ac2ac54a68fb6657.zip
Use Python batteries in fs_rec test
-rw-r--r--contrib/Makefile.am2
-rw-r--r--contrib/pydiffer.py.in39
-rwxr-xr-xsrc/fs/test_gnunet_fs_rec.py.in12
3 files changed, 50 insertions, 3 deletions
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
14 14
15noinst_SCRIPTS = \ 15noinst_SCRIPTS = \
16 terminate.py \ 16 terminate.py \
17 pydiffer.py \
17 gnunet_pyexpect.py \ 18 gnunet_pyexpect.py \
18 gnunet_janitor.py 19 gnunet_janitor.py
19 20
@@ -32,6 +33,7 @@ EXTRA_DIST = \
32 terminate.py.in \ 33 terminate.py.in \
33 gnunet_pyexpect.py.in \ 34 gnunet_pyexpect.py.in \
34 gnunet_janitor.py.in \ 35 gnunet_janitor.py.in \
36 pydiffer.py.in \
35 gnunet-gns-import.sh 37 gnunet-gns-import.sh
36 38
37do_subst = $(SED) -e 's,[@]PYTHON[@],$(PYTHON),g' 39do_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 @@
1#!@PYTHON@
2import os
3import sys
4import difflib
5import filecmp
6
7def getdiff (old, new):
8 diff = []
9 with open (old) as a:
10 with open (new) as b:
11 for l in difflib.unified_diff (a.read ().splitlines (), b.read ().splitlines ()):
12 diff.append (l)
13 return diff
14
15def dc_getdiff (dc, old, new):
16 diff = []
17 for f in dc.left_only:
18 diff.append ("Only in {}: {}".format (old, f))
19 for f in dc.right_only:
20 diff.append ("Only in {}: {}".format (new, f))
21 for f in dc.diff_files:
22 r = getdiff (os.path.join (old, f), os.path.join (new, f))
23 diff.extend (r)
24 for dn, dc in dc.subdirs.items ():
25 r = dc_getdiff (dc, os.path.join (old, dn), os.path.join (new, dn))
26 diff.extend (r)
27 return diff
28
29def dcdiff (old, new):
30 dc = filecmp.dircmp (old, new)
31 diff = dc_getdiff (dc, old, new)
32 return diff
33
34def main ():
35 for l in dcdiff (sys.argv[1], sys.argv[2]):
36 print (l)
37
38if __name__ == '__main__':
39 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
23import subprocess 23import subprocess
24import re 24import re
25import shutil 25import shutil
26import tarfile
27import filecmp
28import pydiffer
26 29
27srcdir = "../.." 30srcdir = "../.."
28gnunet_pyexpect_dir = os.path.join (srcdir, "contrib") 31gnunet_pyexpect_dir = os.path.join (srcdir, "contrib")
@@ -30,6 +33,7 @@ if gnunet_pyexpect_dir not in sys.path:
30 sys.path.append (gnunet_pyexpect_dir) 33 sys.path.append (gnunet_pyexpect_dir)
31 34
32from gnunet_pyexpect import pexpect 35from gnunet_pyexpect import pexpect
36from pydiffer import dcdiff
33 37
34if os.name == 'posix': 38if os.name == 'posix':
35 download = 'gnunet-download' 39 download = 'gnunet-download'
@@ -55,7 +59,8 @@ arm = subprocess.Popen ([gnunetarm, '-sq', '-c', 'test_gnunet_fs_rec_data.conf']
55arm.communicate () 59arm.communicate ()
56 60
57# pray that `tar' is in PATH 61# pray that `tar' is in PATH
58os.system ('tar xfz test_gnunet_fs_rec_data.tgz') 62tar = tarfile.open ('test_gnunet_fs_rec_data.tgz')
63tar.extractall ()
59# first, basic publish-search-download run 64# first, basic publish-search-download run
60try: 65try:
61 pub = pexpect () 66 pub = pexpect ()
@@ -93,8 +98,9 @@ try:
93 98
94 os.remove ("rdir/b.gnd") 99 os.remove ("rdir/b.gnd")
95 os.remove ("rdir/a.gnd") 100 os.remove ("rdir/a.gnd")
96 if 0 != os.system ("diff -r dir rdir"): 101 diff = dcdiff ('dir', 'rdir')
97 raise Exception ("Unexpected difference between source directory and downloaded result") 102 if len (diff) != 0:
103 raise Exception ("Unexpected difference between source directory and downloaded result:\n{}".format (diff))
98 104
99 105
100finally: 106finally: