--- a/.hgignore Wed Feb 08 14:19:46 2012 +0100
+++ b/.hgignore Thu Feb 09 17:34:47 2012 +0100
@@ -14,3 +14,4 @@
iro.egg-info/*
dist/*
build/*
+_trial_temp/*
--- a/setup.py Wed Feb 08 14:19:46 2012 +0100
+++ b/setup.py Thu Feb 09 17:34:47 2012 +0100
@@ -6,9 +6,9 @@
setup(name='iro',
version=__version__,
packages=['iro','iro.controller','iro.view','iro.model'],
- setup_requires = ['nose>=0.11',"ngmodules>=0.2"],
+ setup_requires = ["ngmodules>=0.2"],
install_requires=['twisted>=11.1.0',"ConfigParser","sqlalchemy","MySQL-python","SOAPpy",'decorator'],
- test_suite="nose.collector",
+ #test_suite="nose.collector", #ToDo switch to trial
description='Non Blocking Interface for sending a bunsh of SMSes, FAXes and Mails',
author='Sandro Knauß',
author_email='knauss@netzguerilla.net',
--- a/tests/db.py Wed Feb 08 14:19:46 2012 +0100
+++ b/tests/db.py Thu Feb 09 17:34:47 2012 +0100
@@ -5,7 +5,7 @@
from iro.model.schema import User, Offer, Userright, Job, Message
from decimal import Decimal
-from .dbtestcase import DBTestCase, setUpModule, tearDownModule
+from .dbtestcase import DBTestCase
class DBTests(DBTestCase):
"""tests for the db model"""
--- 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)
--- a/tests/xmlrpc.py Wed Feb 08 14:19:46 2012 +0100
+++ b/tests/xmlrpc.py Thu Feb 09 17:34:47 2012 +0100
@@ -13,20 +13,13 @@
import iro.error as IroError
-from .dbtestcase import DBTestCase, setUpModule, tearDownModule
-
-
-#activates all logging we can get.
+from .dbtestcase import DBTestCase
-from twisted.python import log
-import logging
-logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)s(%(processName)s)-%(levelname)s: %(message)s')
-observer = log.PythonLoggingObserver()
-observer.start()
class XMLRPCTest(DBTestCase):
"""tests for the xmlrpc interface"""
def setUp(self):
+ DBTestCase.setUp(self)
self.s = Process(target=startReactor, args=(self.engine,))
self.s.start()
#the new process needs time to get stated, so this process has to sleep
@@ -75,9 +68,7 @@
self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 0), status)
#JobNotFound
- with self.assertRaises(Fault) as fault:
- self.__rpc2().status('abcdef123456789',jid+1)
- exc = fault.exception
+ exc = self.assertRaises(Fault, self.__rpc2().status, 'abcdef123456789',jid+1)
unf = IroError.JobNotFound()
self.failUnlessEqual(exc.faultCode, unf.code)
self.failUnlessEqual(exc.faultString, unf.msg)
@@ -89,26 +80,20 @@
def testNoSuchUser(self):
'''a unknown user should raise a UserNotNound Exception
bewcause xmlrpc only has a Fault exception this Exception has to be deliverd through a xmlrpclib.Fault Exception'''
- with self.assertRaises(Fault) as fault:
- self.__rpc2().status('abcdef123456789')
- exc = fault.exception
+ exc = self.assertRaises(Fault, self.__rpc2().status, 'abcdef123456789')
unf=IroError.UserNotFound()
self.failUnlessEqual(exc.faultCode, unf.code)
self.failUnlessEqual(exc.faultString, unf.msg)
def testNoSuchMethod(self):
'''a unknown mothod should raise a Exception '''
- with self.assertRaises(Fault) as fault:
- self.__rpc2().nosuchmethod()
- exc = fault.exception
+ exc = self.assertRaises(Fault, self.__rpc2().nosuchmethod)
self.failUnlessEqual(exc.faultCode, 8001)
self.failUnlessEqual(exc.faultString, "procedure nosuchmethod not found")
def testValidationFault(self):
'''a validate Exception should be translated to a xmlrpclib.Fault.'''
- with self.assertRaises(Fault) as fault:
- self.__rpc2().status('xxx')
- exc = fault.exception
+ exc = self.assertRaises(Fault, self.__rpc2().status,'xxx')
self.failUnlessEqual(exc.faultCode, 700)
self.failUnlessEqual(exc.faultString, "Validation of 'apikey' failed.")
@@ -121,9 +106,7 @@
session.add(u)
self.failUnlessEqual(self.__rpc2().routes('abcdef123456789','sms'),['sipgate_basic'])
- with self.assertRaises(Fault) as fault:
- self.__rpc2().routes('abcdef123456789','fax')
- exc = fault.exception
+ exc = self.assertRaises(Fault, self.__rpc2().routes,'abcdef123456789','fax')
self.failUnlessEqual(exc.faultCode, 700)
self.failUnlessEqual(exc.faultString, "Typ is not valid.")
@@ -161,9 +144,7 @@
invalid=['xa','+1','1-23',';:+0','0123']
- with self.assertRaises(Fault) as fault:
- self.__rpc2().telnumber(['01234']+invalid)
- exc = fault.exception
+ exc = self.assertRaises(Fault, self.__rpc2().telnumber,['01234']+invalid)
self.failUnlessEqual(exc.faultCode, 701)
self.failUnlessEqual(exc.faultString, "No valid telnumber: '%s'" % invalid[0])
@@ -176,9 +157,7 @@
def testInvaildEmail(self):
'''test invaild email adresses (got from wikipedia)'''
invalid=["Abc.example.com",]
- with self.assertRaises(Fault) as fault:
- self.__rpc2().email(invalid)
- exc = fault.exception
+ exc= self.assertRaises(Fault, self.__rpc2().email, invalid)
self.failUnlessEqual(exc.faultCode, 702)
self.failUnlessEqual(exc.faultString, "No valid email: '%s'" % invalid[0])