from twisted.trial import unittest
from sqlalchemy import create_engine, pool
from tempfile import mkdtemp
from shutil import rmtree
import atexit
from ngdatabase.mysql import Server, createConfig, Database
from iro.model import schema, setEngine, setPool
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):
unittest.TestCase.__init__(self,*args,**kwargs)
self.engine = md.engine
def setUp(self):
md.setUp()
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(object):
def __init__(self):
self.create()
def close(self):
self.server.stop()
rmtree(self.tdir)
self.valid= False
def create(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)
self.vaild = False
def setUp(self):
if not self.vaild:
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)
setPool(dbPool)
self.vaild = True
md=ModuleData()
atexit.register(md.close)