2 from __future__ import absolute_import, print_function
3 import errno, platform, tempfile
8 from bup.helpers import mkdirp
9 from buptest import no_lingering_errors, test_tempdir
14 with no_lingering_errors():
15 with test_tempdir(b'bup-tbloom-') as tmpdir:
16 hashes = [os.urandom(20) for i in range(100)]
20 ix.name = b'dummy.idx'
21 ix.shatable = b''.join(hashes)
23 b = bloom.create(tmpdir + b'/pybuptest.bloom', expected=100, k=k)
25 WVPASSLT(b.pfalse_positive(), .1)
27 b = bloom.ShaBloom(tmpdir + b'/pybuptest.bloom')
30 all_present &= (b.exists(h) or False)
33 for h in [os.urandom(20) for i in range(1000)]:
36 WVPASSLT(false_positives, 5)
37 os.unlink(tmpdir + b'/pybuptest.bloom')
39 tf = tempfile.TemporaryFile(dir=tmpdir)
40 b = bloom.create(b'bup.bloom', f=tf, expected=100)
41 WVPASSEQ(b.rwfile, tf)
44 # Test large (~1GiB) filter. This may fail on s390 (31-bit
45 # architecture), and anywhere else where the address space is
46 # sufficiently limited.
47 tf = tempfile.TemporaryFile(dir=tmpdir)
50 b = bloom.create(b'bup.bloom', f=tf, expected=2**28,
52 except EnvironmentError as ex:
53 (ptr_width, linkage) = platform.architecture()
54 if ptr_width == '32bit' and ex.errno == errno.ENOMEM:
55 WVMSG('skipping large bloom filter test (mmap probably failed) '