iro/tests/install.py
branchdevel
changeset 231 3929338fd17f
parent 221 c8615310da30
child 241 546316b0b09c
--- /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"