tests/dbtestcase.py
author Sandro Knauß <knauss@netzguerilla.net>
Mon, 13 Feb 2012 17:11:44 +0100
branchdevel
changeset 145 b58ce5bb96cc
parent 141 90c95fdd1e33
child 219 4e9d79c35088
permissions -rw-r--r--
now offers are empty from start
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
141
90c95fdd1e33 first defer test in job management
Sandro Knauß <knauss@netzguerilla.net>
parents: 138
diff changeset
    10
from iro.model import schema, 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:
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
            for table in schema.__tables__:
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
                session.query(getattr(schema,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):
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    50
        self.server.stop()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    51
        rmtree(self.tdir)
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    52
        self.valid= False
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    53
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    54
    def create(self):
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    55
        self.tdir = mkdtemp(prefix='iro-mysql-')
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    56
        self.server = Server('%s/my.cnf'%self.tdir)
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    57
        self.db = SampleDatabase("test","test",'%s/my.cnf'%self.tdir)
135
f8640c663e3e model.job created
Sandro Knauß <knauss@netzguerilla.net>
parents: 134
diff changeset
    58
        self.engine = create_engine('mysql://test:test@localhost/test?unix_socket=%s/socket'%self.tdir, 
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    59
                poolclass = pool.SingletonThreadPool,  pool_size=dbPool.maxthreads, )#echo=True)
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    60
        self.vaild = False
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    61
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    62
    def setUp(self):
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    63
        if not self.vaild:
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    64
            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
    65
                cnf.write(createConfig(self.tdir))
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    66
            self.server.create()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    67
            self.server.start()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    68
            self.db.create()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    69
            Base.metadata.create_all(self.engine)
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    70
            setEngine(self.engine)
141
90c95fdd1e33 first defer test in job management
Sandro Knauß <knauss@netzguerilla.net>
parents: 138
diff changeset
    71
            setPool(dbPool)
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    72
            self.vaild = True
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    73
    
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    74
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    75
md=ModuleData()
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    76
atexit.register(md.close)