iro/tests/config.py
branchdevel
changeset 231 3929338fd17f
parent 220 602720314930
child 239 4cf5e664c847
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/tests/config.py	Sun Mar 18 14:06:27 2012 +0100
@@ -0,0 +1,187 @@
+from mock import patch, Mock
+from twisted.trial import unittest
+import signal
+import io
+import ConfigParser
+from  iro import config, error 
+from iro.offer.provider import Provider, providers
+
+class TestModuleConfig(unittest.TestCase):
+    '''test config class'''
+    
+    def setUp(self):
+        self._reloadList=config.configParser.reloadList
+        config.configParser.reloadList=[]
+
+    def tearDown(self):
+        config.configParser.reloadList = self._reloadList
+
+    @patch('iro.config.main')
+    @patch('iro.config.configParser')
+    def testReadConfig(self,pConfig,pMain):
+        pMain._init = True
+        config.readConfig()
+        self.assertEqual([i[0] for i in pConfig.method_calls],["read","reload_","items"])
+        pConfig.read.assert_called_once_with(config.confFiles)
+        pConfig.items.assert_called_once_with("main")
+        pConfig.reload_.assert_called_once_with()
+        self.assertEqual(pMain.load.called,1)
+
+    @patch('iro.config.main')
+    @patch('iro.config.configParser')
+    def testReadConfigInit(self,pConfig,pMain):
+        pConfig.items.return_value = [('dburl',''),("port",1000)]
+        pMain._init = False
+        config.readConfig()
+        self.assertEqual([i[0] for i in pConfig.method_calls],["read","reload_","items"])
+        self.assertEqual([i[0] for i in pMain.method_calls],["same"])
+        sa = pMain.same.call_args_list[0][0][0]
+        self.assertEqual(sa.port,1000)
+        self.assertEqual(sa.dburl,'')
+        pMain.same.return_value = False
+        self.assertRaises(Exception,config.readConfig,)
+
+
+
+    @patch('signal.signal')
+    @patch('iro.config.readConfig')
+    def testRegisterSignal(self, pReadConfig, pSignal):
+        config.registerSignal()
+        self.assertEqual(pSignal.call_args[0][0],signal.SIGUSR2)
+        self.assertEqual(pReadConfig.called,0)
+        pSignal.call_args[0][1](None, None)
+        pReadConfig.assert_called_once_with()
+
+    def testRegisterReload(self):
+        def x():
+            pass
+        config.configParser.registerReload(x)
+        self.assertEqual(config.configParser.reloadList,[x])
+
+    def testReload(self):
+        x = Mock()
+        config.configParser.reloadList = [x] 
+        config.configParser.reload_()
+        x.assert_called_once_with()
+
+
+class TestRead(unittest.TestCase):
+
+    def tearDown(self):
+        for s in config.configParser.sections():
+            config.configParser.remove_section(s)
+
+    @patch('iro.config.ConfigParser.read')
+    def testMain(self,pRead):
+        sample_config = """[main]
+port = 8000
+dburl = sdfdsafgsfdg
+"""
+        config.configParser.readfp(io.BytesIO(sample_config))
+        config.configParser.read([])
+        pRead.assert_called_once_with(config.configParser,[])
+
+    @patch('iro.config.ConfigParser.read')
+    def testMainBadPort(self,pRead):
+        sample_config = """[main]
+port = -8000
+dburl = sadfaserasg
+"""
+        config.configParser.readfp(io.BytesIO(sample_config))
+        self.assertRaises(error.ValidateException, config.configParser.read, [])
+
+    @patch('iro.config.ConfigParser.read')
+    def testMainNoMust(self,pRead):
+        sample_config = """[main]
+port = 8000
+"""
+        config.configParser.readfp(io.BytesIO(sample_config))
+        self.assertRaises(config.NeededOption, config.configParser.read, [])
+
+    @patch('iro.config.ConfigParser.read')
+    def testMust(self,pRead):
+        v=Mock()
+        config.main.options["test"] = config.Option(v,default="jehei")
+        try:
+            sample_config = """[main]
+dburl = sdfawersdf
+port = 8000
+"""
+            config.configParser.readfp(io.BytesIO(sample_config))
+            config.configParser.read([])
+            self.assertEqual(v.called,0)
+            config.main.load(config.configParser.items("main"))
+            self.assertEqual(config.main.test,'jehei')
+            sample_config = """[main]
+dburl = adfgsdftsfg
+port = 8000
+test = foohu
+    """
+            config.configParser.readfp(io.BytesIO(sample_config))
+            config.configParser.read([])
+            v.assert_called_once_with("foohu","test")
+        finally:
+            del(config.main.options["test"])
+
+    @patch('iro.config.ConfigParser.read')
+    def testProviders(self, pRead):
+        v=Mock()
+        class TestProvider(Provider):
+            def __init__(self,name):
+                Provider.__init__(self,name)
+                self.options.update({"test":config.Option(v)})
+        providers["test"]=TestProvider
+        try:
+            sample_config = """[p]
+"""
+            config.configParser.readfp(io.BytesIO(sample_config))
+            self.assertRaises(ConfigParser.NoOptionError, config.configParser.read, [])  
+            self.assertEqual(v.called,0)
+            sample_config = """[p]
+typ= test
+test= foo
+"""
+            config.configParser.readfp(io.BytesIO(sample_config))
+            config.configParser.read([])
+            v.assert_called_once_with("foo","test")
+        finally:
+            del(providers["test"])
+
+
+class TestConfig(unittest.TestCase):
+    def testSame(self):
+        c1 = config.Config("1")
+        c1.port = 1
+        c1.dburl = "dburl1"
+        c2 = config.Config("2")
+        c2.port = 1
+        c2.dburl = "dburl1"
+        self.assertTrue(c1.same(c2))
+        self.assertTrue(c1.same(c1))
+        self.assertTrue(c2.same(c1))
+        c2.port = 2
+        self.assertFalse(c2.same(c1))
+        self.assertFalse(c1.same(c2))
+        c2.port = 1
+        c2.dburl = "dburl2"
+        self.assertFalse(c2.same(c1))
+        self.assertFalse(c1.same(c2))
+
+    def testSampleConf(self):
+        c1 = config.Config("1")
+        self.assertEqual(c1.sampleConf(),["[1]",
+            "# Connection URL to database",
+            "dburl = ","",
+            "# Port under that twisted is running",
+            "port = ",""])
+
+    def testsampleConfDefault(self):
+        c1 = config.Config("1")
+        c1.options["port"].default = 12345
+        c1.options["port"].must = False
+        c1.options["dburl"].default = True
+        self.assertEqual(c1.sampleConf(),["[1]",
+            "# Connection URL to database",
+            "dburl = True","",
+            "# Port under that twisted is running",
+            "# port = 12345",""])