iro/test_helpers/dbtestcase.py
author Sandro Knauß <knauss@netzguerilla.net>
Wed, 21 Mar 2012 17:24:46 +0100
branchdevel
changeset 234 08fcc2b6df99
parent 230 448dd8d36839
child 241 546316b0b09c
permissions -rw-r--r--
refactoring task._run
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
     1
from twisted.trial import unittest
131
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
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
     6
from shutil import rmtree
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
     7
import atexit 
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
     8
from ngdatabase.mysql import Server, createConfig, Database
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
     9
219
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
    10
from iro.model import setEngine, setPool
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
from iro.model.utils import WithSession
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    12
from iro.model.schema import Base
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    13
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    14
from iro.controller.pool import dbPool
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
class DBTestCase(unittest.TestCase):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
    '''a TestCase with DB connection
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
    you have to set self.session manually in setUp'''
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
    def __init__(self,*args,**kwargs):
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    20
        unittest.TestCase.__init__(self,*args,**kwargs)
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    21
        self.engine = md.engine
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    22
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    23
    def setUp(self):
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    24
        md.setUp()
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
    def tearDown(self):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
        self.__cleanDB()
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 session(self,autocommit=True):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
        '''returns a WithSession'''
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
        return WithSession(self.engine,autocommit)
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
    
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
    def __cleanDB(self):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
        '''cleaning database'''
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
        with self.session() as session:
219
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
    36
            for table in reversed(Base.metadata.sorted_tables):
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
    37
                session.execute(table.delete())
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    38
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    39
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    40
class SampleDatabase(Database):
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    41
    def createPassword(self):
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    42
        self.password="test"
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    43
        return self.password
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    44
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    45
class ModuleData(object):
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    46
    def __init__(self):
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    47
        self.create()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    48
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    49
    def close(self):
230
448dd8d36839 moving to iro/test_helpers
Sandro Knauß <knauss@netzguerilla.net>
parents: 219
diff changeset
    50
        if self.valid:
448dd8d36839 moving to iro/test_helpers
Sandro Knauß <knauss@netzguerilla.net>
parents: 219
diff changeset
    51
            self.server.stop()
448dd8d36839 moving to iro/test_helpers
Sandro Knauß <knauss@netzguerilla.net>
parents: 219
diff changeset
    52
            rmtree(self.tdir)
448dd8d36839 moving to iro/test_helpers
Sandro Knauß <knauss@netzguerilla.net>
parents: 219
diff changeset
    53
            self.valid= False
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    54
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    55
    def create(self):
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    56
        self.tdir = mkdtemp(prefix='iro-mysql-')
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    57
        self.server = Server('%s/my.cnf'%self.tdir)
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    58
        self.db = SampleDatabase("test","test",'%s/my.cnf'%self.tdir)
219
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
    59
        self.dburl = 'mysql://test:test@localhost/test?unix_socket=%s/socket'%self.tdir
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
    60
        self.engine = create_engine(self.dburl, 
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    61
                poolclass = pool.SingletonThreadPool,  pool_size=dbPool.maxthreads, )#echo=True)
219
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
    62
        self.valid = False
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    63
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    64
    def setUp(self):
219
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
    65
        if not self.valid:
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    66
            with open('%s/my.cnf'%self.tdir,'w') as cnf:
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    67
                cnf.write(createConfig(self.tdir))
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    68
            self.server.create()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    69
            self.server.start()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    70
            self.db.create()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    71
            Base.metadata.create_all(self.engine)
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    72
            setEngine(self.engine)
141
90c95fdd1e33 first defer test in job management
Sandro Knauß <knauss@netzguerilla.net>
parents: 138
diff changeset
    73
            setPool(dbPool)
219
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
    74
            self.valid = True
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    75
    
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    76
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    77
md=ModuleData()
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    78
atexit.register(md.close)