[Checkins] SVN: gocept.zeoraid/trunk/src/gocept/zeoraid/ added tests for loadBlob

Thomas Lotze tl at gocept.com
Tue Jan 29 07:25:44 EST 2008


Log message for revision 83291:
  added tests for loadBlob

Changed:
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/tests/failingstorage.py
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py

-=-
Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py	2008-01-29 12:03:33 UTC (rev 83290)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py	2008-01-29 12:25:44 UTC (rev 83291)
@@ -351,7 +351,6 @@
 
     # IBlobStorage
 
-    # XXX degradation tests
     @storeBlob_38_compatible
     @ensure_writable
     def storeBlob(self, oid, oldserial, data, blob, transaction):
@@ -381,7 +380,6 @@
         finally:
             self._write_lock.release()
 
-    # XXX degradation tests
     def loadBlob(self, oid, serial):
         """Return the filename of the Blob data for this OID and serial."""
         return self._apply_single_storage('loadBlob', (oid, serial))

Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/tests/failingstorage.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/tests/failingstorage.py	2008-01-29 12:03:33 UTC (rev 83290)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/tests/failingstorage.py	2008-01-29 12:25:44 UTC (rev 83291)
@@ -60,8 +60,8 @@
 
     # Create a set of stub methods that have to be made to fail but are set as
     # non-data descriptors on the proxy object.
-    __stub_methods__ = ['history', 'loadSerial', 'close', 'getSize',
-                        'pack', 'tpc_abort', 'tpc_finish', 'storeBlob']
+    __stub_methods__ = ['history', 'loadSerial', 'close', 'getSize', 'pack',
+                        'tpc_abort', 'tpc_finish', 'storeBlob', 'loadBlob']
     for name in __stub_methods__:
         method = zope.proxy.non_overridable(failing_method(name))
         locals()[name] = method

Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py	2008-01-29 12:03:33 UTC (rev 83290)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py	2008-01-29 12:25:44 UTC (rev 83291)
@@ -745,7 +745,58 @@
                           self._storage.storeBlob,
                           oid, ZODB.utils.z64, 'foo', blob_file_name, '', t)
 
+    def test_loadBlob_degrading1(self):
+        oid = self._storage.new_oid()
+        handle, blob_file_name = tempfile.mkstemp()
+        open(blob_file_name, 'w').write('I am a happy blob.')
+        t = transaction.Transaction()
+        self._storage.tpc_begin(t)
+        self._storage.storeBlob(
+          oid, ZODB.utils.z64, 'foo', blob_file_name, '', t)
+        self._storage.tpc_vote(t)
+        self._storage.tpc_finish(t)
 
+        last_transaction = self._storage.lastTransaction()
+        self._disable_storage(0)
+        stored_file_name = self._storage.loadBlob(oid, last_transaction)
+        self.assertEquals('I am a happy blob.',
+                          open(stored_file_name, 'r').read())
+
+        self._disable_storage(0)
+        self.assertRaises(gocept.zeoraid.interfaces.RAIDError,
+                          self._storage.loadBlob, oid, last_transaction)
+
+    def test_loadBlob_degrading2(self):
+        oid = self._storage.new_oid()
+        handle, blob_file_name = tempfile.mkstemp()
+        open(blob_file_name, 'w').write('I am a happy blob.')
+        t = transaction.Transaction()
+        self._storage.tpc_begin(t)
+        self._storage.storeBlob(
+          oid, ZODB.utils.z64, 'foo', blob_file_name, '', t)
+        self._storage.tpc_vote(t)
+        self._storage.tpc_finish(t)
+        last_transaction = self._storage.lastTransaction()
+
+        # Clear cache.
+        stored_file_name = self._storage.loadBlob(oid, last_transaction)
+        os.unlink(stored_file_name)
+
+        self._backend(0).fail('loadBlob')
+        stored_file_name = self._storage.loadBlob(oid, last_transaction)
+        self.assertEquals('I am a happy blob.',
+                          open(stored_file_name, 'r').read())
+        self.assertEquals('degraded', self._storage.raid_status())
+
+        # Clear cache.
+        os.unlink(stored_file_name)
+
+        self._backend(0).fail('loadBlob')
+        self.assertRaises(gocept.zeoraid.interfaces.RAIDError,
+                          self._storage.loadBlob, oid, last_transaction)
+        self.assertEquals('failed', self._storage.raid_status())
+
+
 class ZEOReplicationStorageTests(ZEOStorageBackendTests,
                                  ReplicationStorageTests,
                                  ThreadTests.ThreadTests):



More information about the Checkins mailing list