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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
import unittest
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
     3
from sqlalchemy import create_engine, pool
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
     4
from tempfile import mkdtemp
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
     5
import shutil
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
     6
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
     7
from ngdatabase.mysql import Server, createConfig, Database
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
     8
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
from iro.model import schema
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
from iro.model.utils import WithSession
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    11
from iro.model.schema import Base
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    12
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    13
from iro.controller.pool import dbPool
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
class DBTestCase(unittest.TestCase):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
    '''a TestCase with DB connection
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
    you have to set self.session manually in setUp'''
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
    def __init__(self,*args,**kwargs):
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    19
        self.engine = md.engine
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
        unittest.TestCase.__init__(self,*args,**kwargs)
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
    def tearDown(self):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
        self.__cleanDB()
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
    
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
    def session(self,autocommit=True):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
        '''returns a WithSession'''
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
        return WithSession(self.engine,autocommit)
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
    
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
    def __cleanDB(self):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
        '''cleaning database'''
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
        with self.session() as session:
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
            for table in schema.__tables__:
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
                session.query(getattr(schema,table)).delete()
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    34
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    35
class SampleDatabase(Database):
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    36
    def createPassword(self):
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    37
        self.password="test"
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    38
        return self.password
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    39
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    40
class ModuleData:
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    41
    def __init__(self):
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    42
        self.tdir = mkdtemp(prefix='iro-mysql-')
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    43
        self.server = Server('%s/my.cnf'%self.tdir)
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    44
        self.db = SampleDatabase("test","test",'%s/my.cnf'%self.tdir)
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    45
        self.engine = create_engine('mysql://test:test@localhost/test?unix_socket=%s/socket'%self.tdir,
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    46
                poolclass = pool.SingletonThreadPool,  pool_size=dbPool.maxthreads, )#echo=True)
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    47
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    48
    def setUp(self):
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    49
        with open('%s/my.cnf'%self.tdir,'w') as cnf:
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    50
            cnf.write(createConfig(self.tdir))
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    51
        self.server.create()
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    52
        self.server.start()
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    53
        self.db.create()
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    54
        Base.metadata.create_all(self.engine)
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    55
    
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    56
    def tearDown(self):
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    57
        self.server.stop()
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    58
        shutil.rmtree(self.tdir)
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    59
 
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    60
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    61
md=ModuleData()
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    62
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    63
def setUpModule():
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    64
    md.setUp()
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    65
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    66
def tearDownModule():
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    67
    md.tearDown()
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    68