diff -r 448dd8d36839 -r 3929338fd17f iro/tests/config.py --- /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",""])