import unittest
from sqlalchemy import create_engine, pool
from tempfile import mkdtemp
import shutil
from ngdatabase.mysql import Server, createConfig, Database
from iro.model import schema, setEngine
from iro.model.utils import WithSession
from iro.model.schema import Base
from iro.controller.pool import dbPool
class DBTestCase(unittest.TestCase):
'''a TestCase with DB connection
you have to set self.session manually in setUp'''
def __init__(self,*args,**kwargs):
self.engine = md.engine
unittest.TestCase.__init__(self,*args,**kwargs)
def tearDown(self):
self.__cleanDB()
def session(self,autocommit=True):
'''returns a WithSession'''
return WithSession(self.engine,autocommit)
def __cleanDB(self):
'''cleaning database'''
with self.session() as session:
for table in schema.__tables__:
session.query(getattr(schema,table)).delete()
class SampleDatabase(Database):
def createPassword(self):
self.password="test"
return self.password
class ModuleData:
def __init__(self):
self.tdir = mkdtemp(prefix='iro-mysql-')
self.server = Server('%s/my.cnf'%self.tdir)
self.db = SampleDatabase("test","test",'%s/my.cnf'%self.tdir)
self.engine = create_engine('mysql://test:test@localhost/test?unix_socket=%s/socket'%self.tdir,
poolclass = pool.SingletonThreadPool, pool_size=dbPool.maxthreads, )#echo=True)
def setUp(self):
with open('%s/my.cnf'%self.tdir,'w') as cnf:
cnf.write(createConfig(self.tdir))
self.server.create()
self.server.start()
self.db.create()
Base.metadata.create_all(self.engine)
setEngine(self.engine)
def tearDown(self):
self.server.stop()
shutil.rmtree(self.tdir)
md=ModuleData()
def setUpModule():
md.setUp()
def tearDownModule():
md.tearDown()