tests/dbtestcase.py
author Sandro Knauß <knauss@netzguerilla.net>
Mon, 06 Feb 2012 14:39:33 +0100
branchdevel
changeset 134 fae3fdfece65
parent 131 c51c3e8c3ec0
child 135 f8640c663e3e
permissions -rw-r--r--
db setUp/tearDown into dbtestcase

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
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)
    
    def tearDown(self):
        self.server.stop()
        shutil.rmtree(self.tdir)
 

md=ModuleData()

def setUpModule():
    md.setUp()

def tearDownModule():
    md.tearDown()