--- a/iro/config.py Sat Feb 25 16:22:21 2012 +0100
+++ b/iro/config.py Sun Feb 26 17:48:28 2012 +0100
@@ -41,7 +41,7 @@
"port":Option(partial(vInteger,minv=0),long="Port under that twisted is running",must=True),
"dburl":Option(lambda x,y:x,long="Connection URL to database",must=True),
}
- self.read=False
+ self._init=True
def _read(self, cfg, write=False):
@@ -51,7 +51,7 @@
try:
value = option.validate(c[o],o)
if write:
- self.read = True
+ self.init = False
setattr(self,o,value)
except KeyError:
if option.must:
@@ -75,12 +75,13 @@
def readConfig():
configParser.read(confFiles)
configParser.reload()
- if not main.read:
+ if main._init:
main.load(configParser.items("main"))
else:
- m = Config("main").load(configParser.items("main"))
+ m = Config("main")
+ m.load(configParser.items("main"))
if not main.same(m):
- raise Exception("Main options can't be reloaded, you have to restart.")
+ raise Exception("Main options can't be reloaded, please restart your Application.")
def registerSignal():
'''register readConfig to SIGUSR2'''
--- a/tests/config.py Sat Feb 25 16:22:21 2012 +0100
+++ b/tests/config.py Sun Feb 26 17:48:28 2012 +0100
@@ -6,7 +6,7 @@
from iro import config, error
from iro.offer.provider import Provider, providers
-class TestConfig(unittest.TestCase):
+class TestModuleConfig(unittest.TestCase):
'''test config class'''
def setUp(self):
@@ -19,7 +19,7 @@
@patch('iro.config.main')
@patch('iro.config.configParser')
def testReadConfig(self,pConfig,pMain):
- pMain.read = False
+ 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)
@@ -27,6 +27,22 @@
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):
@@ -85,7 +101,7 @@
@patch('iro.config.ConfigParser.read')
def testMust(self,pRead):
v=Mock()
- config.main.options["test"] = config.Option(v)
+ config.main.options["test"] = config.Option(v,default="jehei")
try:
sample_config = """[main]
dburl = sdfawersdf
@@ -94,6 +110,8 @@
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
@@ -128,3 +146,23 @@
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))