storageserver: assert that blocks are written in-order, clean up tests a bit

This commit is contained in:
Brian Warner 2007-04-17 20:21:05 -07:00
parent 0ae8f98ac9
commit 008e418523
2 changed files with 11 additions and 8 deletions

View File

@ -30,6 +30,7 @@ class BucketWriter(Referenceable):
self.finalhome = finalhome
self.blocksize = blocksize
self.closed = False
self._next_segnum = 0
fileutil.make_dirs(incominghome)
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
# segments so we can't tell which is which.
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.seek(self.blocksize*segmentnum)
f.write(data)

View File

@ -7,23 +7,23 @@ from allmydata.util import fileutil
class Storage(unittest.TestCase):
def make_workdir(self, name):
tmpdir = os.path.join("test_storage", "Storage", "tmp", 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)
return tmpdir, basedir
return incoming, final
def test_create(self):
tmpdir, basedir = self.make_workdir("test_create")
bw = storageserver.BucketWriter(tmpdir, basedir, 25)
incoming, final = self.make_workdir("test_create")
bw = storageserver.BucketWriter(incoming, final, 25)
bw.remote_put_block(0, "a"*25)
bw.remote_put_block(1, "b"*25)
bw.remote_put_block(2, "c"*7) # last block may be short
bw.remote_close()
def test_readwrite(self):
tmpdir, basedir = self.make_workdir("test_readwrite")
bw = storageserver.BucketWriter(tmpdir, basedir, 25)
incoming, final = self.make_workdir("test_readwrite")
bw = storageserver.BucketWriter(incoming, final, 25)
bw.remote_put_block(0, "a"*25)
bw.remote_put_block(1, "b"*25)
bw.remote_put_block(2, "c"*7) # last block may be short
@ -32,7 +32,7 @@ class Storage(unittest.TestCase):
bw.remote_close()
# 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(1), "b"*25)
self.failUnlessEqual(br.remote_get_block(2), "c"*7)