mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-23 23:02:25 +00:00
fuse/runtests: added 'random scatter' write test
this writes the test file in a randomised order, with randomly sized writes. also for each 'slice' of the file written, a randomly chosen overlapping write is also made to the file. this ensures that the file will be written in its entirety in a thoroughly random order, with many overlapping writes.
This commit is contained in:
parent
0c25628ded
commit
2bcae75012
@ -492,6 +492,46 @@ class SystemTest (object):
|
|||||||
self._check_write(testcap, name, body)
|
self._check_write(testcap, name, body)
|
||||||
|
|
||||||
|
|
||||||
|
def test_write_random_scatter(self, testcap, testdir):
|
||||||
|
sz = 2**20
|
||||||
|
name = 'random_scatter'
|
||||||
|
body = os.urandom(sz)
|
||||||
|
|
||||||
|
def rsize(sz=sz):
|
||||||
|
return min(int(random.paretovariate(.25)), sz/12)
|
||||||
|
|
||||||
|
# first chop up whole file into random sized chunks
|
||||||
|
slices = []
|
||||||
|
posn = 0
|
||||||
|
while posn < sz:
|
||||||
|
size = rsize()
|
||||||
|
slices.append( (posn, body[posn:posn+size]) )
|
||||||
|
posn += size
|
||||||
|
random.shuffle(slices) # and randomise their order
|
||||||
|
|
||||||
|
try:
|
||||||
|
path = os.path.join(testdir, name)
|
||||||
|
f = file(path, 'w')
|
||||||
|
except Exception, err:
|
||||||
|
tmpl = 'Could not open file for write at %r: %r'
|
||||||
|
raise TestFailure(tmpl, path, err)
|
||||||
|
try:
|
||||||
|
# write all slices: we hence know entire file is ultimately written
|
||||||
|
# write random excerpts: this provides for mixed and varied overlaps
|
||||||
|
for posn,slice in slices:
|
||||||
|
f.seek(posn)
|
||||||
|
f.write(slice)
|
||||||
|
rposn = random.randint(0,sz)
|
||||||
|
f.seek(rposn)
|
||||||
|
f.write(body[rposn:rposn+rsize()])
|
||||||
|
f.close()
|
||||||
|
except Exception, err:
|
||||||
|
tmpl = 'Could not write to file %r: %r'
|
||||||
|
raise TestFailure(tmpl, path, err)
|
||||||
|
|
||||||
|
self._check_write(testcap, name, body)
|
||||||
|
|
||||||
|
|
||||||
# Utilities:
|
# Utilities:
|
||||||
def run_tahoe(self, *args):
|
def run_tahoe(self, *args):
|
||||||
realargs = ('tahoe',) + args
|
realargs = ('tahoe',) + args
|
||||||
|
Loading…
Reference in New Issue
Block a user