tests/dbtestcase.py
author Sandro Knauß <knauss@netzguerilla.net>
Wed, 08 Feb 2012 14:19:09 +0100
branchdevel
changeset 136 ca926774e16c
parent 135 f8640c663e3e
child 138 57c4450c8ba6
permissions -rw-r--r--
now using job.id - integer autoincrement

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()