iro/test_helpers/dbtestcase.py
author Sandro Knauß <bugs@sandroknauss.de>
Tue, 15 Apr 2025 01:22:19 +0200
changeset 316 63c681b8e92c
parent 295 dc3cc61c7f6f
permissions -rw-r--r--
fix link to about.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
294
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
     1
# Copyright (c) 2012 netzguerilla.net <iro@netzguerilla.net>
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
     2
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
     3
# This file is part of Iro.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
     4
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
     5
# Permission is hereby granted, free of charge, to any person obtaining a copy of
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
     6
# this software and associated documentation files (the "Software"), to deal in
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
     7
# the Software without restriction, including without limitation the rights to use,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
     8
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
     9
# #Software, and to permit persons to whom the Software is furnished to do so,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    10
# subject to the following conditions:
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    11
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    12
# The above copyright notice and this permission notice shall be included in
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    13
# all copies or substantial portions of the Software.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    14
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    15
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    16
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    17
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    18
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    19
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    20
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 241
diff changeset
    21
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    22
from twisted.trial import unittest
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    24
from sqlalchemy import create_engine, pool
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    25
from tempfile import mkdtemp
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    26
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    27
from shutil import rmtree
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    28
import atexit 
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    29
from ngdatabase.mysql import Server, createConfig, Database
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    30
219
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
    31
from iro.model import setEngine, setPool
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
from iro.model.utils import WithSession
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    33
from iro.model.schema import Base
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
from iro.controller.pool import dbPool
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
241
546316b0b09c moving DummyObserver and DummyPool -> iro.test_helpers.utils
Sandro Knauß <knauss@netzguerilla.net>
parents: 230
diff changeset
    37
from .utils import DummyObserver
546316b0b09c moving DummyObserver and DummyPool -> iro.test_helpers.utils
Sandro Knauß <knauss@netzguerilla.net>
parents: 230
diff changeset
    38
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
class DBTestCase(unittest.TestCase):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
    '''a TestCase with DB connection
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
    you have to set self.session manually in setUp'''
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
    def __init__(self,*args,**kwargs):
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    43
        unittest.TestCase.__init__(self,*args,**kwargs)
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    44
        self.engine = md.engine
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    45
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    46
    def setUp(self):
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    47
        md.setUp()
241
546316b0b09c moving DummyObserver and DummyPool -> iro.test_helpers.utils
Sandro Knauß <knauss@netzguerilla.net>
parents: 230
diff changeset
    48
        self.log = DummyObserver()
546316b0b09c moving DummyObserver and DummyPool -> iro.test_helpers.utils
Sandro Knauß <knauss@netzguerilla.net>
parents: 230
diff changeset
    49
        self.log.start()
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
    def tearDown(self):
241
546316b0b09c moving DummyObserver and DummyPool -> iro.test_helpers.utils
Sandro Knauß <knauss@netzguerilla.net>
parents: 230
diff changeset
    52
        self.log.stop()
131
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
        self.__cleanDB()
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54
    
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
    def session(self,autocommit=True):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    56
        '''returns a WithSession'''
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    57
        return WithSession(self.engine,autocommit)
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    58
    
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    59
    def __cleanDB(self):
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    60
        '''cleaning database'''
c51c3e8c3ec0 schema tests without xmlrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    61
        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
    62
            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
    63
                session.execute(table.delete())
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    64
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    65
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    66
class SampleDatabase(Database):
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    67
    def createPassword(self):
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    68
        self.password="test"
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    69
        return self.password
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    70
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    71
class ModuleData(object):
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    72
    def __init__(self):
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    73
        self.create()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    74
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    75
    def close(self):
230
448dd8d36839 moving to iro/test_helpers
Sandro Knauß <knauss@netzguerilla.net>
parents: 219
diff changeset
    76
        if self.valid:
448dd8d36839 moving to iro/test_helpers
Sandro Knauß <knauss@netzguerilla.net>
parents: 219
diff changeset
    77
            self.server.stop()
448dd8d36839 moving to iro/test_helpers
Sandro Knauß <knauss@netzguerilla.net>
parents: 219
diff changeset
    78
            rmtree(self.tdir)
448dd8d36839 moving to iro/test_helpers
Sandro Knauß <knauss@netzguerilla.net>
parents: 219
diff changeset
    79
            self.valid= False
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    80
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    81
    def create(self):
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    82
        self.tdir = mkdtemp(prefix='iro-mysql-')
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    83
        self.server = Server('%s/my.cnf'%self.tdir)
295
dc3cc61c7f6f small fixes and use iro as dbname for testing.
Sandro Knauß <knauss@netzguerilla.net>
parents: 294
diff changeset
    84
        self.db = SampleDatabase("iro","test",'%s/my.cnf'%self.tdir)
dc3cc61c7f6f small fixes and use iro as dbname for testing.
Sandro Knauß <knauss@netzguerilla.net>
parents: 294
diff changeset
    85
        self.dburl = 'mysql://test:test@localhost/iro?unix_socket=%s/socket'%self.tdir
219
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
    86
        self.engine = create_engine(self.dburl, 
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    87
                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
    88
        self.valid = False
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    89
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
    90
    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
    91
        if not self.valid:
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    92
            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
    93
                cnf.write(createConfig(self.tdir))
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    94
            self.server.create()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    95
            self.server.start()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    96
            self.db.create()
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    97
            Base.metadata.create_all(self.engine)
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    98
            setEngine(self.engine)
141
90c95fdd1e33 first defer test in job management
Sandro Knauß <knauss@netzguerilla.net>
parents: 138
diff changeset
    99
            setPool(dbPool)
219
4e9d79c35088 iro.model.schema.__tables__ is available under Base.metadata.sorted_tables
Sandro Knauß <knauss@netzguerilla.net>
parents: 141
diff changeset
   100
            self.valid = True
134
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
   101
    
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
   102
fae3fdfece65 db setUp/tearDown into dbtestcase
Sandro Knauß <knauss@netzguerilla.net>
parents: 131
diff changeset
   103
md=ModuleData()
138
57c4450c8ba6 switching from nose to trial testing
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
   104
atexit.register(md.close)