]> arthur.barton.de Git - bup.git/blobdiff - lib/bup/t/tbloom.py
Use Python 3 compatible "except ... as e" syntax
[bup.git] / lib / bup / t / tbloom.py
index de89e6641e0f0d9aac8debd2ad18cad356d122d5..25ef66105335d6e9b1578f2a5ae631a7d440154b 100644 (file)
@@ -1,10 +1,15 @@
-import tempfile
+import errno, platform, tempfile
 from bup import bloom
 from bup.helpers import *
 from wvtest import *
 
+bup_tmp = os.path.realpath('../../../t/tmp')
+mkdirp(bup_tmp)
+
 @wvtest
 def test_bloom():
+    initial_failures = wvfailure_count()
+    tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tbloom-')
     hashes = [os.urandom(20) for i in range(100)]
     class Idx:
         pass
@@ -12,11 +17,11 @@ def test_bloom():
     ix.name='dummy.idx'
     ix.shatable = ''.join(hashes)
     for k in (4, 5):
-        b = bloom.create('pybuptest.bloom', expected=100, k=k)
+        b = bloom.create(tmpdir + '/pybuptest.bloom', expected=100, k=k)
         b.add_idx(ix)
         WVPASSLT(b.pfalse_positive(), .1)
         b.close()
-        b = bloom.ShaBloom('pybuptest.bloom')
+        b = bloom.ShaBloom(tmpdir + '/pybuptest.bloom')
         all_present = True
         for h in hashes:
             all_present &= b.exists(h)
@@ -26,12 +31,29 @@ def test_bloom():
             if b.exists(h):
                 false_positives += 1
         WVPASSLT(false_positives, 5)
-        os.unlink('pybuptest.bloom')
+        os.unlink(tmpdir + '/pybuptest.bloom')
 
     tf = tempfile.TemporaryFile()
     b = bloom.create('bup.bloom', f=tf, expected=100)
     WVPASSEQ(b.rwfile, tf)
     WVPASSEQ(b.k, 5)
+
+    # Test large (~1GiB) filter.  This may fail on s390 (31-bit
+    # architecture), and anywhere else where the address space is
+    # sufficiently limited.
     tf = tempfile.TemporaryFile()
-    b = bloom.create('bup.bloom', f=tf, expected=2**28, delaywrite=False)
-    WVPASSEQ(b.k, 4)
+    skip_test = False
+    try:
+        b = bloom.create('bup.bloom', f=tf, expected=2**28, delaywrite=False)
+    except EnvironmentError as ex:
+        (ptr_width, linkage) = platform.architecture()
+        if ptr_width == '32bit' and ex.errno == errno.ENOMEM:
+            WVMSG('skipping large bloom filter test (mmap probably failed) '
+                  + str(ex))
+            skip_test = True
+        else:
+            raise
+    if not skip_test:
+        WVPASSEQ(b.k, 4)
+    if wvfailure_count() == initial_failures:
+        subprocess.call(['rm', '-rf', tmpdir])