[Zope-Checkins] CVS: StandaloneZODB/ZODB/tests - Corruption.py:1.1 testFileStorage.py:1.9
   
    Jeremy Hylton
     
    jeremy@zope.com
       
    Wed, 12 Sep 2001 17:36:37 -0400
    
    
  
Update of /cvs-repository/StandaloneZODB/ZODB/tests
In directory cvs.zope.org:/tmp/cvs-serv31934
Modified Files:
	testFileStorage.py 
Added Files:
	Corruption.py 
Log Message:
Add two tests for corrupted .index file
=== Added File StandaloneZODB/ZODB/tests/Corruption.py ===
"""Do some minimal tests of data corruption"""
import os
import random
import stat
import tempfile
import unittest
import ZODB, ZODB.FileStorage
from StorageTestBase import StorageTestBase
class FileStorageCorruptTests(StorageTestBase):
    __super_setUp = StorageTestBase.setUp
    __super_tearDown = StorageTestBase.tearDown
    def setUp(self):
        self.path = tempfile.mktemp()
        self._storage = ZODB.FileStorage.FileStorage(self.path, create=1)
        self.__super_setUp()
    def tearDown(self):
        self.__super_tearDown()
        for ext in '', '.old', '.tmp', '.lock', '.index':
            path = self.path + ext
            if os.path.exists(path):
                os.remove(path)
    def _do_stores(self):
        oids = []
        for i in range(5):
            oid = self._storage.new_oid()
            revid = self._dostore(oid)
            oids.append((oid, revid))
        return oids
    def _check_stores(self, oids):
        for oid, revid in oids:
            data, s_revid = self._storage.load(oid, '')
            self.assertEqual(s_revid, revid)
    def checkTruncatedIndex(self):
        oids = self._do_stores()
        self._close()
        
        # truncation the index file
        path = self.path + '.index'
        self.assert_(os.path.exists(path))
        f = open(path, 'r+')
        f.seek(0, 2)
        size = f.tell()
        f.seek(size / 2)
        f.truncate()
        f.close()
        self._storage = ZODB.FileStorage.FileStorage(self.path)
        self._check_stores(oids)
    def checkCorruptedIndex(self):
        oids = self._do_stores()
        self._close()
        
        # truncation the index file
        path = self.path + '.index'
        self.assert_(os.path.exists(path))
        size = os.stat(path)[stat.ST_SIZE]
        f = open(path, 'r+')
        while f.tell() < size:
            f.seek(random.randrange(1, size / 10), 1)
            f.write('\000')
        f.close()
        self._storage = ZODB.FileStorage.FileStorage(self.path)
        self._check_stores(oids)
=== StandaloneZODB/ZODB/tests/testFileStorage.py 1.8 => 1.9 ===
 import HistoryStorage
 import IteratorStorage
+import Corruption
 
 class FileStorageTests(
     StorageTestBase.StorageTestBase,
@@ -37,7 +38,11 @@
                 os.remove(path)
 
 def test_suite():
-    return unittest.makeSuite(FileStorageTests, 'check')
+    suite = unittest.makeSuite(FileStorageTests, 'check')
+    suite2 = unittest.makeSuite(Corruption.FileStorageCorruptTests, 'check')
+    suite.addTest(suite2)
+##    suite._tests.extend(suite2._tests)
+    return suite
 
 def main():
     alltests=test_suite()