start documenting with reST syntax.
#from mock import patch, Mock
from twisted.trial import unittest
from sqlalchemy import create_engine
from sets import Set
import io
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 testGetAllRoutesNone(self):
config.main.dburl=md.dburl2
install.createDatabase()
self.assertEqual(install.getAllRoutes([]),{"orphand":Set(),"added":Set()})
def testGetAllRoutesOrphand(self):
config.main.dburl=md.dburl2
install.createDatabase()
self.engine = create_engine(md.dburl2)
with WithSession(self.engine,True) as session:
session.add(Offer(provider="p",route="r",typ="t",name="test"))
session.add(Offer(provider="p",route="r2",typ="t",name="test2"))
self.assertEqual(install.getAllRoutes([]),{"orphand":Set(["test","test2"]),"added":Set()})
def testGetAllRoutesAdded(self):
config.main.dburl=md.dburl2
install.createDatabase()
self.engine = create_engine(md.dburl2)
class TestProvider(Provider):
def __init__(self, name):
Provider.__init__(self, name, {"r":["1","2","3"]})
providers["test"]=TestProvider
sample_config = """[p]
typ= test
test= foo
"""
config.configParser.readfp(io.BytesIO(sample_config))
self.assertEqual(install.getAllRoutes(["p"]),{"orphand":Set(),"added":Set(["p_r_1","p_r_2","p_r_3"])})
#test writing
self.assertEqual(install.getAllRoutes(["p"],True),{"orphand":Set(),"added":Set(["p_r_1","p_r_2","p_r_3"])})
with WithSession(self.engine,True) as session:
o = Set([i[0] for i in session.query(Offer.name).all()])
self.assertEqual(o,Set(["p_r_1","p_r_2","p_r_3"]))
#nothing to do anymore
self.assertEqual(install.getAllRoutes(["p"]),{"orphand":Set(),"added":Set()})
def testGetAllRoutesOaA(self):
config.main.dburl=md.dburl2
install.createDatabase()
self.engine = create_engine(md.dburl2)
class TestProvider(Provider):
def __init__(self, name):
Provider.__init__(self, name, {"r":["1","2","3"]})
providers["test"]=TestProvider
sample_config = """[p]
typ= test
test= foo
"""
config.configParser.readfp(io.BytesIO(sample_config))
with WithSession(self.engine,True) as session:
session.add(Offer(provider="q",route="r",typ="t",name="test"))
session.add(Offer(provider="q",route="r2",typ="t",name="test2"))
session.add(Offer(provider="p",route="1",typ="r",name="foo"))
self.assertEqual(install.getAllRoutes(["p"]),{"orphand":Set(["test","test2"]),"added":Set(["p_r_2","p_r_3"])})
#test writing
self.assertEqual(install.getAllRoutes(["p"],True),{"orphand":Set(["test","test2"]),"added":Set(["p_r_2","p_r_3"])})
with WithSession(self.engine,True) as session:
o = Set([i[0] for i in session.query(Offer.name).all()])
self.assertEqual(o,Set(["test","test2","foo","p_r_2","p_r_3"]))
self.assertEqual(install.getAllRoutes(["p"]),{"orphand":Set(["test","test2"]),"added":Set()})