]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
added storage test
authorRob Kinninmont <robk@allmydata.com>
Fri, 1 Dec 2006 05:38:42 +0000 (22:38 -0700)
committerRob Kinninmont <robk@allmydata.com>
Fri, 1 Dec 2006 05:38:42 +0000 (22:38 -0700)
allmydata/test/test_storage.py [new file with mode: 0644]

diff --git a/allmydata/test/test_storage.py b/allmydata/test/test_storage.py
new file mode 100644 (file)
index 0000000..33b19c2
--- /dev/null
@@ -0,0 +1,102 @@
+
+import os
+import random
+
+from twisted.trial import unittest
+from twisted.application import service
+from twisted.internet import defer
+from twisted.python import log
+from foolscap import Tub
+
+from allmydata import client
+
+class StorageTest(unittest.TestCase):
+
+    def setUp(self):
+        self.svc = service.MultiService()
+        self.node = client.Client('')
+        self.node.setServiceParent(self.svc)
+        self.tub = Tub()
+        self.tub.setServiceParent(self.svc)
+        return self.svc.startService()
+
+    def test_create_bucket(self):
+        vid = os.urandom(20)
+        bnum = random.randint(0,100)
+        data = os.urandom(random.randint(1024, 16384))
+
+        rssd = self.tub.getReference(self.node.my_pburl)
+        def get_storageserver(node):
+            return node.callRemote('get_service', name='storageserver')
+        rssd.addCallback(get_storageserver)
+
+        def create_bucket(storageserver):
+            return storageserver.callRemote('allocate_bucket',
+                                            verifierid=vid,
+                                            bucket_num=bnum,
+                                            size=len(data),
+                                            leaser=self.node.nodeid,
+                                            )
+        rssd.addCallback(create_bucket)
+
+        def write_to_bucket(bucket):
+            def write_some(junk, bucket, bytes):
+                return bucket.callRemote('write', data=bytes)
+            def finalise(junk, bucket):
+                return bucket.callRemote('finalise')
+            off1 = len(data) / 2
+            off2 = 3 * len(data) / 4
+            d = defer.succeed(None)
+            d.addCallback(write_some, bucket, data[:off1])
+            d.addCallback(write_some, bucket, data[off1:off2])
+            d.addCallback(write_some, bucket, data[off2:])
+            d.addCallback(finalise, bucket)
+            return d
+        rssd.addCallback(write_to_bucket)
+
+        return rssd
+
+    def test_overwrite(self):
+        vid = os.urandom(20)
+        bnum = random.randint(0,100)
+        data = os.urandom(random.randint(1024, 16384))
+
+        rssd = self.tub.getReference(self.node.my_pburl)
+        def get_storageserver(node):
+            return node.callRemote('get_service', name='storageserver')
+        rssd.addCallback(get_storageserver)
+
+        def create_bucket(storageserver):
+            return storageserver.callRemote('allocate_bucket',
+                                            verifierid=vid,
+                                            bucket_num=bnum,
+                                            size=len(data),
+                                            leaser=self.node.nodeid,
+                                            )
+        rssd.addCallback(create_bucket)
+
+        def write_to_bucket(bucket):
+            def write_some(junk, bucket, bytes):
+                return bucket.callRemote('write', data=bytes)
+            def finalise(junk, bucket):
+                return bucket.callRemote('finalise')
+            off1 = len(data) / 2
+            off2 = 3 * len(data) / 4
+            d = defer.succeed(None)
+            d.addCallback(write_some, bucket, data[:off1])
+            d.addCallback(write_some, bucket, data[off1:off2])
+            d.addCallback(write_some, bucket, data[off2:])
+            # and then overwrite
+            d.addCallback(write_some, bucket, data[off1:off2])
+            d.addCallback(finalise, bucket)
+            return d
+        rssd.addCallback(write_to_bucket)
+
+        def should_fail(f):
+            f.trap(AssertionError)
+
+        rssd.addCallbacks(self.fail, should_fail)
+        return rssd
+
+    def tearDown(self):
+        return self.svc.stopService()