import py, sha, md5, random from stringfs import StringFS, MD5KeyStringFS from test_blockfs import udir class TestStringFS: dbfilename = 'stringfs' from blockfs import BlockFS def setup_method(self, meth): self.path = udir.join(self.dbfilename) self.path.write(self.BlockFS.get_init_string()) self.stringfs = StringFS(self.BlockFS(str(self.path))) def test_empty(self): for i in range(1000): key = sha.new(str(i)).digest() py.test.raises(KeyError, "self.stringfs[key]") def test_files(self): fdb = self.stringfs expected = {} for i in range(100): data = ''.join([str(random.random()) for i in range(random.randrange(0, 900))]) key = fdb.store(data) expected[key] = data for key, expectedvalue in expected.items(): value = fdb[key] assert value == expectedvalue def test_large_files(self): fdb = self.stringfs expected = {} for i in range(100): data = ''.join([str(random.random()) for i in range(random.randrange(0, 100000))]) key = fdb.store(data) expected[key] = data for key, expectedvalue in expected.items(): value = fdb[key] assert value == expectedvalue class TestMD5StringFS(TestStringFS): from blockfs import MD5BlockFS as BlockFS class TestMD5KeyStringFS(TestStringFS): def setup_method(self, meth): self.path = udir.join(self.dbfilename) self.path.write(MD5KeyStringFS.BlockFS.get_init_string()) self.stringfs = MD5KeyStringFS(str(self.path)) def test_md5(self): for i in [0, 1, 10, 100, 1000]: data = ''.join([str(random.random()) for j in range(i)]) key = self.stringfs.store(data) assert key == md5.md5(data).digest() assert self.stringfs[key] == data