tests/dbtestcase.py
branchdevel
changeset 134 fae3fdfece65
parent 131 c51c3e8c3ec0
child 135 f8640c663e3e
equal deleted inserted replaced
133:214fddcf7133 134:fae3fdfece65
     1 import unittest
     1 import unittest
       
     2 
       
     3 from sqlalchemy import create_engine, pool
       
     4 from tempfile import mkdtemp
       
     5 import shutil
       
     6 
       
     7 from ngdatabase.mysql import Server, createConfig, Database
     2 
     8 
     3 from iro.model import schema
     9 from iro.model import schema
     4 from iro.model.utils import WithSession
    10 from iro.model.utils import WithSession
       
    11 from iro.model.schema import Base
       
    12 
       
    13 from iro.controller.pool import dbPool
     5 
    14 
     6 class DBTestCase(unittest.TestCase):
    15 class DBTestCase(unittest.TestCase):
     7     '''a TestCase with DB connection
    16     '''a TestCase with DB connection
     8     you have to set self.session manually in setUp'''
    17     you have to set self.session manually in setUp'''
     9     def __init__(self,*args,**kwargs):
    18     def __init__(self,*args,**kwargs):
    10         self.engine=None
    19         self.engine = md.engine
    11         unittest.TestCase.__init__(self,*args,**kwargs)
    20         unittest.TestCase.__init__(self,*args,**kwargs)
    12 
    21 
    13     def tearDown(self):
    22     def tearDown(self):
    14         self.__cleanDB()
    23         self.__cleanDB()
    15     
    24     
    20     def __cleanDB(self):
    29     def __cleanDB(self):
    21         '''cleaning database'''
    30         '''cleaning database'''
    22         with self.session() as session:
    31         with self.session() as session:
    23             for table in schema.__tables__:
    32             for table in schema.__tables__:
    24                 session.query(getattr(schema,table)).delete()
    33                 session.query(getattr(schema,table)).delete()
       
    34 
       
    35 class SampleDatabase(Database):
       
    36     def createPassword(self):
       
    37         self.password="test"
       
    38         return self.password
       
    39 
       
    40 class ModuleData:
       
    41     def __init__(self):
       
    42         self.tdir = mkdtemp(prefix='iro-mysql-')
       
    43         self.server = Server('%s/my.cnf'%self.tdir)
       
    44         self.db = SampleDatabase("test","test",'%s/my.cnf'%self.tdir)
       
    45         self.engine = create_engine('mysql://test:test@localhost/test?unix_socket=%s/socket'%self.tdir,
       
    46                 poolclass = pool.SingletonThreadPool,  pool_size=dbPool.maxthreads, )#echo=True)
       
    47 
       
    48     def setUp(self):
       
    49         with open('%s/my.cnf'%self.tdir,'w') as cnf:
       
    50             cnf.write(createConfig(self.tdir))
       
    51         self.server.create()
       
    52         self.server.start()
       
    53         self.db.create()
       
    54         Base.metadata.create_all(self.engine)
       
    55     
       
    56     def tearDown(self):
       
    57         self.server.stop()
       
    58         shutil.rmtree(self.tdir)
       
    59  
       
    60 
       
    61 md=ModuleData()
       
    62 
       
    63 def setUpModule():
       
    64     md.setUp()
       
    65 
       
    66 def tearDownModule():
       
    67     md.tearDown()
       
    68