tests/dbtestcase.py
branchdevel
changeset 138 57c4450c8ba6
parent 135 f8640c663e3e
child 141 90c95fdd1e33
--- a/tests/dbtestcase.py	Wed Feb 08 14:19:46 2012 +0100
+++ b/tests/dbtestcase.py	Thu Feb 09 17:34:47 2012 +0100
@@ -1,9 +1,10 @@
-import unittest
+from twisted.trial import unittest
 
 from sqlalchemy import create_engine, pool
 from tempfile import mkdtemp
-import shutil
 
+from shutil import rmtree
+import atexit 
 from ngdatabase.mysql import Server, createConfig, Database
 
 from iro.model import schema, setEngine
@@ -16,8 +17,11 @@
     '''a TestCase with DB connection
     you have to set self.session manually in setUp'''
     def __init__(self,*args,**kwargs):
+        unittest.TestCase.__init__(self,*args,**kwargs)
         self.engine = md.engine
-        unittest.TestCase.__init__(self,*args,**kwargs)
+
+    def setUp(self):
+        md.setUp()
 
     def tearDown(self):
         self.__cleanDB()
@@ -32,38 +36,40 @@
             for table in schema.__tables__:
                 session.query(getattr(schema,table)).delete()
 
+
 class SampleDatabase(Database):
     def createPassword(self):
         self.password="test"
         return self.password
 
-class ModuleData:
+class ModuleData(object):
     def __init__(self):
+        self.create()
+
+    def close(self):
+        self.server.stop()
+        rmtree(self.tdir)
+        self.valid= False
+
+    def create(self):
         self.tdir = mkdtemp(prefix='iro-mysql-')
         self.server = Server('%s/my.cnf'%self.tdir)
         self.db = SampleDatabase("test","test",'%s/my.cnf'%self.tdir)
         self.engine = create_engine('mysql://test:test@localhost/test?unix_socket=%s/socket'%self.tdir, 
                 poolclass = pool.SingletonThreadPool,  pool_size=dbPool.maxthreads, )#echo=True)
+        self.vaild = False
 
     def setUp(self):
-        with open('%s/my.cnf'%self.tdir,'w') as cnf:
-            cnf.write(createConfig(self.tdir))
-        self.server.create()
-        self.server.start()
-        self.db.create()
-        Base.metadata.create_all(self.engine)
-        setEngine(self.engine)
+        if not self.vaild:
+            with open('%s/my.cnf'%self.tdir,'w') as cnf:
+                cnf.write(createConfig(self.tdir))
+            self.server.create()
+            self.server.start()
+            self.db.create()
+            Base.metadata.create_all(self.engine)
+            setEngine(self.engine)
+            self.vaild = True
     
-    def tearDown(self):
-        self.server.stop()
-        shutil.rmtree(self.tdir)
- 
 
 md=ModuleData()
-
-def setUpModule():
-    md.setUp()
-
-def tearDownModule():
-    md.tearDown()
-
+atexit.register(md.close)