[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