tests/xmlrpc.py
branchdevel
changeset 117 351a02310dd8
parent 114 1ed072cc6793
child 119 3462c2c90f95
equal deleted inserted replaced
116:48c70425bf6c 117:351a02310dd8
     4 
     4 
     5 
     5 
     6 from tempfile import mkdtemp
     6 from tempfile import mkdtemp
     7 import shutil
     7 import shutil
     8 
     8 
     9 from iro.model.utils import WithSession, POOL_SIZE as DB_POOL_SIZE
     9 from iro.model.utils import WithSession
       
    10 from iro.model import POOL_SIZE as DB_POOL_SIZE
    10 
    11 
    11 from iro.model.schema import User, Base
    12 from iro.model.schema import User, Base, Offer, Userright
       
    13 import iro.model.schema as schema
    12 
    14 
    13 from ngdatabase.mysql import Server, createConfig, Database
    15 from ngdatabase.mysql import Server, createConfig, Database
    14 
    16 
    15 from iro.main import runReactor
    17 from iro.main import runReactor
    16 
    18 
    44 
    46 
    45     def tearDown(self):
    47     def tearDown(self):
    46         self.__debug().stop()
    48         self.__debug().stop()
    47         time.sleep(.2)
    49         time.sleep(.2)
    48         self.s.join()
    50         self.s.join()
       
    51         self.__cleanDB()
       
    52 
       
    53     def __cleanDB(self):
       
    54         with WithSession(md.engine, autocommit=True) as session:
       
    55             for table in schema.__tables__:
       
    56                 session.query(getattr(schema,table)).delete()
    49 
    57 
    50     def __debug(self):
    58     def __debug(self):
    51         return xServer('http://localhost:7080/debug')
    59         return xServer('http://localhost:7080/debug')
    52 
    60 
    53     def __rpc2(self):
    61     def __rpc2(self):
    62         '''list of all offical Methods, that can be executed'''
    70         '''list of all offical Methods, that can be executed'''
    63         ret=self.__rpc2().listMethods()
    71         ret=self.__rpc2().listMethods()
    64         self.failUnlessEqual(ret, ['listMethods', 'status', 'stop', 'sms', 'fax', 'mail', 'routes', 'defaultRoute', 'statistic'])
    72         self.failUnlessEqual(ret, ['listMethods', 'status', 'stop', 'sms', 'fax', 'mail', 'routes', 'defaultRoute', 'statistic'])
    65 
    73 
    66     def testStatus(self):
    74     def testStatus(self):
       
    75         ''' test the status function'''
       
    76         with WithSession(md.engine, autocommit=True) as session:
       
    77             session.add(User(name='test',apikey='abcdef123456789'))
    67         ret = self.__rpc2().status('abcdef123456789')
    78         ret = self.__rpc2().status('abcdef123456789')
    68         self.failUnlessEqual(ret, "<User('test','abcdef123456789')>")
    79         self.failUnlessEqual(ret, "<User('test','abcdef123456789')>")
    69         self.failUnlessEqual(self.__rpc2().status('abcdef123456789','abcde'), ["<User('test','abcdef123456789')>",'abcde',False])
    80         self.failUnlessEqual(self.__rpc2().status('abcdef123456789','abcde'), ["<User('test','abcdef123456789')>",'abcde',False])
    70         self.failUnlessEqual(self.__rpc2().status('abcdef123456789','abcde', True), ["<User('test','abcdef123456789')>",'abcde', True])
    81         self.failUnlessEqual(self.__rpc2().status('abcdef123456789','abcde', True), ["<User('test','abcdef123456789')>",'abcde', True])
    71         self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 'true'), ["<User('test','abcdef123456789')>", '', True])
    82         self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 'true'), ["<User('test','abcdef123456789')>", '', True])
    72         self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 'false'), "<User('test','abcdef123456789')>")
    83         self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 'false'), "<User('test','abcdef123456789')>")
    73         self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 0), "<User('test','abcdef123456789')>")
    84         self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 0), "<User('test','abcdef123456789')>")
    74         self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 1), ["<User('test','abcdef123456789')>", '', True])
    85         self.failUnlessEqual(self.__rpc2().status('abcdef123456789', '', 1), ["<User('test','abcdef123456789')>", '', True])
    75 
    86 
    76 
       
    77     def testNoSuchUser(self):
    87     def testNoSuchUser(self):
    78         '''a unknown user should raise a UserNotNound Exception
    88         '''a unknown user should raise a UserNotNound Exception
    79         bewcause xmlrpc only has a Fault exception this Exception has to be deliverd through a xmlrpclib.Fault Exception'''
    89         bewcause xmlrpc only has a Fault exception this Exception has to be deliverd through a xmlrpclib.Fault Exception'''
    80         with self.assertRaises(Fault) as fault:
    90         with self.assertRaises(Fault) as fault:
    81             self.__rpc2().status('abcdef123456788')
    91             self.__rpc2().status('abcdef123456789')
    82         exc = fault.exception
    92         exc = fault.exception
    83         unf=IroError.UserNotFound()
    93         unf=IroError.UserNotFound()
    84         self.failUnlessEqual(exc.faultCode, unf.code)
    94         self.failUnlessEqual(exc.faultCode, unf.code)
    85         self.failUnlessEqual(exc.faultString, unf.msg)
    95         self.failUnlessEqual(exc.faultString, unf.msg)
    86 
    96 
    97         with self.assertRaises(Fault) as fault:
   107         with self.assertRaises(Fault) as fault:
    98             self.__rpc2().status('xxx')
   108             self.__rpc2().status('xxx')
    99         exc = fault.exception
   109         exc = fault.exception
   100         self.failUnlessEqual(exc.faultCode, 700)
   110         self.failUnlessEqual(exc.faultCode, 700)
   101         self.failUnlessEqual(exc.faultString, "Validation of 'apikey' failed.")
   111         self.failUnlessEqual(exc.faultString, "Validation of 'apikey' failed.")
       
   112 
       
   113     def testRoutes(self):
       
   114         '''test the route function'''
       
   115         with WithSession(md.engine, autocommit=True) as session:
       
   116             u=User(name='test',apikey='abcdef123456789')
       
   117             o=Offer(name="sipgate_basic", provider="sipgate", route="basic", typ="sms")
       
   118             u.rights.append(Userright(o)) 
       
   119             session.add(u)
       
   120         self.failUnlessEqual(self.__rpc2().routes('abcdef123456789','sms'),['sipgate_basic'])
       
   121 
       
   122         with self.assertRaises(Fault) as fault:
       
   123             self.__rpc2().routes('abcdef123456789','fax')
       
   124         exc = fault.exception
       
   125         self.failUnlessEqual(exc.faultCode, 700)
       
   126         self.failUnlessEqual(exc.faultString, "Typ is not valid.")
       
   127         
       
   128         with WithSession(md.engine, autocommit=True) as session:
       
   129             o=Offer(name="sipgate_plus", provider="sipgate", route="plus", typ="sms")
       
   130             u = session.query(User).filter_by(name="test").first()
       
   131             u.rights.append(Userright(o)) 
       
   132             session.commit()
       
   133         self.failUnlessEqual(self.__rpc2().routes('abcdef123456789','sms'),['sipgate_basic','sipgate_plus'])
   102 
   134 
   103 def startReactor(engine):
   135 def startReactor(engine):
   104     """starts the Rector with a special debug Clild, so that the reactor can be stopped remotly. """
   136     """starts the Rector with a special debug Clild, so that the reactor can be stopped remotly. """
   105     from twisted.internet import reactor
   137     from twisted.internet import reactor
   106     from twisted.web import xmlrpc, resource
   138     from twisted.web import xmlrpc, resource
   134             cnf.write(createConfig(self.tdir))
   166             cnf.write(createConfig(self.tdir))
   135         self.server.create()
   167         self.server.create()
   136         self.server.start()
   168         self.server.start()
   137         self.db.create()
   169         self.db.create()
   138         Base.metadata.create_all(self.engine)
   170         Base.metadata.create_all(self.engine)
   139         with WithSession(self.engine, autocommit=True) as session:
       
   140             session.add(User(name='test',apikey='abcdef123456789'))
       
   141     
   171     
   142     def tearDown(self):
   172     def tearDown(self):
   143         self.server.stop()
   173         self.server.stop()
   144         shutil.rmtree(self.tdir)
   174         shutil.rmtree(self.tdir)
   145  
   175