~ctheune/gocept.zeoraid/trunk

« back to all changes in this revision

Viewing changes to src/gocept/zeoraid/tests/test_basics.py

  • Committer: ctheune
  • Date: 2010-10-06 15:02:53 UTC
  • Revision ID: svn-v4:62d5b8a3-27da-0310-9561-8e5933582275:gocept.zeoraid/trunk:117306
Add new option 'fail-mode' to indicate whether the RAID should be closed or
turned read-only.

Fixed shared blob support by re-implementing the noop support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
from ZODB.tests import Synchronization, ConflictResolution, HistoryStorage
22
22
from ZODB.tests import TransactionalUndoStorage, PackableStorage
23
23
from gocept.zeoraid.tests.loggingstorage import LoggingStorage
 
24
import ZConfig
24
25
import ZEO.runzeo
25
26
import ZODB.MappingStorage
26
27
import ZODB.config
39
40
import unittest
40
41
import zc.lockfile
41
42
import zope.interface.verify
42
 
 
 
43
import StringIO
43
44
 
44
45
# import logging
45
46
# logging.getLogger().setLevel(0)
1680
1681
 
1681
1682
    def setUp(self):
1682
1683
        self.raid = gocept.zeoraid.storage.RAIDStorage(
1683
 
            'test', [Opener('%s' % s) for s in range(5)])
 
1684
            'test', [Opener('%s' % s) for s in range(5)], fail_mode='close')
1684
1685
        self.raid._apply_storage = mock.Mock(return_value=(True, None))
1685
1686
 
1686
1687
 
1700
1701
        self.raid._degrade_storage('1', 'test')
1701
1702
        self.assertRaises(ZEO.Exceptions.ClientStorageError,
1702
1703
                          lambda: self.raid._degrade_storage('2', 'test'))
 
1704
        self.assertTrue(self.raid.closed)
 
1705
 
 
1706
    def test_degrade_turns_readonly(self):
 
1707
        self.raid.fail_mode = 'read-only'
 
1708
        self.raid._degrade_storage('0', 'test')
 
1709
        self.raid._degrade_storage('1', 'test')
 
1710
        self.assertRaises(ZODB.POSException.ReadOnlyError,
 
1711
                          lambda: self.raid._degrade_storage('2', 'test'))
 
1712
        self.assert_(self.raid.isReadOnly())
 
1713
        self.assertFalse(self.raid.closed)
1703
1714
 
1704
1715
class ClusterModeSingleTests(ClusterModeTests):
1705
1716
 
1800
1811
        else:
1801
1812
            self.fail('No exception raised')
1802
1813
 
 
1814
 
 
1815
class ConfigTests(unittest.TestCase):
 
1816
 
 
1817
    @mock.patch('gocept.zeoraid.storage.RAIDStorage')
 
1818
    def test_raid_storage_schema(self, raid_class):
 
1819
        config, handle = ZConfig.loadConfigFile(
 
1820
            ZODB.config.getStorageSchema(),
 
1821
            StringIO.StringIO('''\
 
1822
%import gocept.zeoraid
 
1823
<raidstorage 1>
 
1824
    cluster-mode single
 
1825
    fail-mode read-only
 
1826
    <mappingstorage 1>
 
1827
    </mappingstorage>
 
1828
</raidstorage>
 
1829
'''))
 
1830
        self.assertEqual('single', config.storage.config.cluster_mode)
 
1831
        self.assertEqual('read-only', config.storage.config.fail_mode)
 
1832
 
 
1833
        raid = config.storage.open()
 
1834
        args, kwargs= raid_class.call_args
 
1835
        self.assertEqual('1', args[0])
 
1836
        self.assertEqual('read-only', kwargs['fail_mode'])
 
1837
        self.assertEqual('single', kwargs['cluster_mode'])
 
1838
 
 
1839
 
1803
1840
def test_suite():
1804
1841
    suite = unittest.TestSuite()
1805
1842
    suite.addTest(unittest.makeSuite(ZEOReplicationStorageTests, "check"))
1813
1850
    suite.addTest(unittest.makeSuite(ClusterModeCoopTests))
1814
1851
    suite.addTest(unittest.makeSuite(AllStorageConsistencyCheck))
1815
1852
    suite.addTest(unittest.makeSuite(OperationExceptionResultTests))
 
1853
    suite.addTest(unittest.makeSuite(ConfigTests))
1816
1854
    return suite