--- /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"