summaryrefslogtreecommitdiff
path: root/rdiff-backup/testing/metadatatest.py
diff options
context:
space:
mode:
Diffstat (limited to 'rdiff-backup/testing/metadatatest.py')
-rw-r--r--rdiff-backup/testing/metadatatest.py88
1 files changed, 83 insertions, 5 deletions
diff --git a/rdiff-backup/testing/metadatatest.py b/rdiff-backup/testing/metadatatest.py
index bad6d27..7211c67 100644
--- a/rdiff-backup/testing/metadatatest.py
+++ b/rdiff-backup/testing/metadatatest.py
@@ -1,8 +1,16 @@
-import unittest, os
+import unittest, os, cStringIO, time
from rdiff_backup.metadata import *
-from rdiff_backup import rpath, Globals
+from rdiff_backup import rpath, Globals, selection, destructive_stepping
+
+tempdir = rpath.RPath(Globals.local_connection, "testfiles/output")
class MetadataTest(unittest.TestCase):
+ def make_temp(self):
+ """Make temp directory testfiles/output"""
+ global tempdir
+ tempdir.delete()
+ tempdir.mkdir()
+
def testQuote(self):
"""Test quoting and unquoting"""
filenames = ["foo", ".", "hello\nthere", "\\", "\\\\\\",
@@ -13,19 +21,89 @@ class MetadataTest(unittest.TestCase):
result = unquote_path(quoted)
assert result == filename, (quoted, result, filename)
- def testRORP2Record(self):
- """Test turning RORPs into records and back again"""
+ def get_rpaths(self):
+ """Return list of rorps"""
vft = rpath.RPath(Globals.local_connection,
"testfiles/various_file_types")
rpaths = map(lambda x: vft.append(x), vft.listdir())
extra_rpaths = map(lambda x: rpath.RPath(Globals.local_connection, x),
['/bin/ls', '/dev/ttyS0', '/dev/hda', 'aoeuaou'])
+ return [vft] + rpaths + extra_rpaths
- for rp in [vft] + rpaths + extra_rpaths:
+ def testRORP2Record(self):
+ """Test turning RORPs into records and back again"""
+ for rp in self.get_rpaths():
record = RORP2Record(rp)
#print record
new_rorp = Record2RORP(record)
assert new_rorp == rp, (new_rorp, rp, record)
+ def testIterator(self):
+ """Test writing RORPs to file and iterating them back"""
+ l = self.get_rpaths()
+ fp = cStringIO.StringIO()
+ write_rorp_iter_to_file(iter(l), fp)
+ fp.seek(0)
+ cstring = fp.read()
+ fp.seek(0)
+ outlist = list(rorp_extractor(fp).iterate())
+ assert len(l) == len(outlist), (len(l), len(outlist))
+ for i in range(len(l)):
+ if not l[i].equal_verbose(outlist[i]):
+ #print cstring
+ assert 0, (i, str(l[i]), str(outlist[i]))
+ fp.close()
+
+ def write_metadata_to_temp(self):
+ """If necessary, write metadata of bigdir to file metadata.gz"""
+ global tempdir
+ temprp = tempdir.append("metadata.gz")
+ if temprp.lstat(): return temprp
+
+ self.make_temp()
+ root = rpath.RPath(Globals.local_connection, "testfiles/bigdir")
+ dsrp_root = destructive_stepping.DSRPath(1, root)
+ rpath_iter = selection.Select(dsrp_root).set_iter()
+
+ start_time = time.time()
+ OpenMetadata(temprp)
+ for rp in rpath_iter: WriteMetadata(rp)
+ CloseMetadata()
+ print "Writing metadata took %s seconds" % (time.time() - start_time)
+ return temprp
+
+ def testSpeed(self):
+ """Test testIterator on 10000 files"""
+ temprp = self.write_metadata_to_temp()
+
+ start_time = time.time(); i = 0
+ for rorp in GetMetadata(temprp): i += 1
+ print "Reading %s metadata entries took %s seconds." % \
+ (i, time.time() - start_time)
+
+ start_time = time.time()
+ blocksize = 32 * 1024
+ tempfp = temprp.open("rb", compress = 1)
+ while 1:
+ buf = tempfp.read(blocksize)
+ if not buf: break
+ assert not tempfp.close()
+ print "Simply decompressing metadata file took %s seconds" % \
+ (time.time() - start_time)
+
+ def testIterate_restricted(self):
+ """Test getting rorps restricted to certain index
+
+ In this case, get assume subdir (subdir3, subdir10) has 50
+ files in it.
+
+ """
+ temprp = self.write_metadata_to_temp()
+ start_time = time.time(); i = 0
+ for rorp in GetMetadata(temprp, ("subdir3", "subdir10")): i += 1
+ print "Reading %s metadata entries took %s seconds." % \
+ (i, time.time() - start_time)
+ assert i == 51
+
if __name__ == "__main__": unittest.main()