diff -r 448dd8d36839 -r 3929338fd17f iro/tests/install.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/tests/install.py Sun Mar 18 14:06:27 2012 +0100 @@ -0,0 +1,110 @@ +#from mock import patch, Mock +from twisted.trial import unittest +from twisted.python import log +from sqlalchemy import create_engine +import os + +from iro import install +from iro import config +from iro.model.schema import Base + +from ..test_helpers.dbtestcase import md, SampleDatabase + +class DummyObserver(object): + def __init__(self): + self.e=[] + + def start(self): + log.addObserver(self.emit) + + def stop(self): + log.removeObserver(self.emit) + + def emit(self, eventDict): + self.e.append(eventDict) + + +class TestInstallation(unittest.TestCase): + '''test install script''' + + def setUp(self): + md.setUp() + if not hasattr(md,"db2"): + md.db2=SampleDatabase("test2","test2",'%s/my.cnf'%md.tdir) + md.dburl2='mysql://test2:test@localhost/test2?unix_socket=%s/socket'%md.tdir + md.db2.create() + self.log = DummyObserver() + self.log.start() + self.engine = None + + def tearDown(self): + self.log.stop() + if self.engine: + Base.metadata.drop_all(self.engine) + self.engine = None + try: + os.remove("iro.conf") + except OSError as e: + if e.errno != 2: + raise + + + + def testCheckConfig(self): + self.assertEqual(install.checkConfig(),False) + with open("iro.conf",'w') as fp: + fp.write("""[main] +dburl=foo""") + self.assertEqual(install.checkConfig(),False) + self.assertEqual(len(self.log.e),1) + self.assertEqual(self.log.e[0]['message'], ("Error while processing config file: Option 'port' in section 'main' is missing.",)) + with open("iro.conf",'w') as fp: + fp.write("""[main] +dburl=foo +port=123456 +""") + self.assertEqual(install.checkConfig(),True) + + def testCheckDatabase(self): + config.main.dburl=md.dburl2 + self.assertTrue(install.checkDatabaseConnection()) + self.assertFalse(install.checkDatabase()) + self.engine = create_engine(md.dburl2) + Base.metadata.create_all(self.engine) + self.assertTrue(install.checkDatabase()) + + def testCheckDatabaseConnection(self): + config.main.dburl="mysql://t@localhost/test" + self.assertFalse(install.checkDatabaseConnection()) + self.assertEqual(len(self.log.e),1) + self.assertTrue(self.log.e[0]['message'][0].startswith("Error while trying to connect to database\n")) + config.main.dburl="sqlite://" + self.assertTrue(install.checkDatabaseConnection()) + + + def testCreateDatabase(self): + config.main.dburl=md.dburl2 + self.assertTrue(install.checkDatabaseConnection()) + self.assertFalse(install.checkDatabase()) + install.createDatabase() + self.assertTrue(install.checkDatabase()) + + def testCreateSampleConfig(self): + install.createSampleConfig() + with open("iro.conf",'r') as fp: + c = fp.read() + with open(os.path.abspath("../iro.conf.inst"),"r") as fp: + self.assertEqual(c,fp.read()) + + def testNoOverwrite(self): + with open("iro.conf","w") as fp: + fp.write("muhaha") + install.createSampleConfig() + with open("iro.conf",'r') as fp: + self.assertEqual(fp.read(),"muhaha") + self.assertEqual(len(self.log.e),1) + self.assertEqual(self.log.e[0]['message'], ("iro.conf exists and will not be overwritten.",)) + + def testCheck(self): + pass + testCheck.todo = "to implement"