iro/tests/install.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 23 Mar 2012 16:16:56 +0100
branchdevel
changeset 241 546316b0b09c
parent 231 3929338fd17f
child 242 745d829d1e02
permissions -rw-r--r--
moving DummyObserver and DummyPool -> iro.test_helpers.utils DBTestCase now using DummyObserver out of the box

#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, Offer
from iro.model.utils import WithSession
from iro.offer.provider import providers, Provider
from ..test_helpers.dbtestcase import md, SampleDatabase
from ..test_helpers.utils import DummyObserver

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"