from twisted.trial import unittest import os.path from allmydata import storageserver 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) fileutil.make_dirs(basedir) return tmpdir, basedir def test_create(self): tmpdir, basedir = self.make_workdir("test_create") bw = storageserver.BucketWriter(tmpdir, basedir, 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) 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_put_block_hashes(["1"*32, "2"*32, "3"*32, "4"*32]) bw.remote_put_share_hashes([(5, "5"*32), (6, "6"*32)]) bw.remote_close() # now read from it br = storageserver.BucketReader(basedir) 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) self.failUnlessEqual(br.remote_get_block_hashes(), ["1"*32, "2"*32, "3"*32, "4"*32]) self.failUnlessEqual(br.remote_get_share_hashes(), [(5, "5"*32), (6, "6"*32)])