tests/dbtestcase.py
author Sandro Knauß <knauss@netzguerilla.net>
Mon, 13 Feb 2012 17:13:48 +0100
branchdevel
changeset 146 8cae6cfc1de4
parent 141 90c95fdd1e33
child 219 4e9d79c35088
permissions -rw-r--r--
adding ConfigTest and OfferTest

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)