mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-06-22 00:41:53 +00:00
storageserver: assert that blocks are written in-order, clean up tests a bit
This commit is contained in:
@ -30,6 +30,7 @@ class BucketWriter(Referenceable):
|
|||||||
self.finalhome = finalhome
|
self.finalhome = finalhome
|
||||||
self.blocksize = blocksize
|
self.blocksize = blocksize
|
||||||
self.closed = False
|
self.closed = False
|
||||||
|
self._next_segnum = 0
|
||||||
fileutil.make_dirs(incominghome)
|
fileutil.make_dirs(incominghome)
|
||||||
self._write_file('blocksize', str(blocksize))
|
self._write_file('blocksize', str(blocksize))
|
||||||
|
|
||||||
@ -42,6 +43,8 @@ class BucketWriter(Referenceable):
|
|||||||
# last one may be short, and we don't know the total number of
|
# last one may be short, and we don't know the total number of
|
||||||
# segments so we can't tell which is which.
|
# segments so we can't tell which is which.
|
||||||
assert len(data) <= self.blocksize
|
assert len(data) <= self.blocksize
|
||||||
|
assert segmentnum == self._next_segnum # must write in sequence
|
||||||
|
self._next_segnum = segmentnum + 1
|
||||||
f = fileutil.open_or_create(os.path.join(self.incominghome, 'data'))
|
f = fileutil.open_or_create(os.path.join(self.incominghome, 'data'))
|
||||||
f.seek(self.blocksize*segmentnum)
|
f.seek(self.blocksize*segmentnum)
|
||||||
f.write(data)
|
f.write(data)
|
||||||
|
@ -7,23 +7,23 @@ from allmydata.util import fileutil
|
|||||||
|
|
||||||
class Storage(unittest.TestCase):
|
class Storage(unittest.TestCase):
|
||||||
def make_workdir(self, name):
|
def make_workdir(self, name):
|
||||||
tmpdir = os.path.join("test_storage", "Storage", "tmp", name)
|
|
||||||
basedir = os.path.join("test_storage", "Storage", name)
|
basedir = os.path.join("test_storage", "Storage", name)
|
||||||
fileutil.make_dirs(tmpdir)
|
incoming = os.path.join(basedir, "tmp", "bucket")
|
||||||
|
final = os.path.join(basedir, "bucket")
|
||||||
fileutil.make_dirs(basedir)
|
fileutil.make_dirs(basedir)
|
||||||
return tmpdir, basedir
|
return incoming, final
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
tmpdir, basedir = self.make_workdir("test_create")
|
incoming, final = self.make_workdir("test_create")
|
||||||
bw = storageserver.BucketWriter(tmpdir, basedir, 25)
|
bw = storageserver.BucketWriter(incoming, final, 25)
|
||||||
bw.remote_put_block(0, "a"*25)
|
bw.remote_put_block(0, "a"*25)
|
||||||
bw.remote_put_block(1, "b"*25)
|
bw.remote_put_block(1, "b"*25)
|
||||||
bw.remote_put_block(2, "c"*7) # last block may be short
|
bw.remote_put_block(2, "c"*7) # last block may be short
|
||||||
bw.remote_close()
|
bw.remote_close()
|
||||||
|
|
||||||
def test_readwrite(self):
|
def test_readwrite(self):
|
||||||
tmpdir, basedir = self.make_workdir("test_readwrite")
|
incoming, final = self.make_workdir("test_readwrite")
|
||||||
bw = storageserver.BucketWriter(tmpdir, basedir, 25)
|
bw = storageserver.BucketWriter(incoming, final, 25)
|
||||||
bw.remote_put_block(0, "a"*25)
|
bw.remote_put_block(0, "a"*25)
|
||||||
bw.remote_put_block(1, "b"*25)
|
bw.remote_put_block(1, "b"*25)
|
||||||
bw.remote_put_block(2, "c"*7) # last block may be short
|
bw.remote_put_block(2, "c"*7) # last block may be short
|
||||||
@ -32,7 +32,7 @@ class Storage(unittest.TestCase):
|
|||||||
bw.remote_close()
|
bw.remote_close()
|
||||||
|
|
||||||
# now read from it
|
# now read from it
|
||||||
br = storageserver.BucketReader(basedir)
|
br = storageserver.BucketReader(final)
|
||||||
self.failUnlessEqual(br.remote_get_block(0), "a"*25)
|
self.failUnlessEqual(br.remote_get_block(0), "a"*25)
|
||||||
self.failUnlessEqual(br.remote_get_block(1), "b"*25)
|
self.failUnlessEqual(br.remote_get_block(1), "b"*25)
|
||||||
self.failUnlessEqual(br.remote_get_block(2), "c"*7)
|
self.failUnlessEqual(br.remote_get_block(2), "c"*7)
|
||||||
|
Reference in New Issue
Block a user