iro/tests/testXMLRPCServer.py
changeset 69 67ecea2d9b67
parent 63 3df3da063cff
equal deleted inserted replaced
68:85fc1e5dea79 69:67ecea2d9b67
     1 # -*- coding: utf-8 -*-
     1 # -*- coding: utf-8 -*-
     2 
     2 
     3 import unittest, ConfigParser
     3 import unittest
     4 
     4 
     5 import threading, xmlrpclib
     5 import xmlrpclib
     6 from multiprocessing import Queue
     6 from stopableServer import init_server
     7 from multiprocessing.managers import BaseManager
       
     8 
     7 
     9 from iro import xmlrpc,anbieter
       
    10 from iro.iro import MySMTP,MySmstrade,MyUserDB
       
    11 from iro.job import SMSJob, FAXJob, MailJob
       
    12 from iro.joblist import Joblist
       
    13 from iro.providerlist import Providerlist
       
    14 from iro.user import User, Admin
       
    15 
       
    16 
       
    17 class StoppableXMLRPCServer(xmlrpc.SecureUserDBXMLRPCServer, threading.Thread):
       
    18     running=False
       
    19     def __init__(self, *args, **kwargs):
       
    20         xmlrpc.SecureUserDBXMLRPCServer.__init__(self, *args, **kwargs)
       
    21         threading.Thread.__init__(self)
       
    22         self.timeout=.5
       
    23    
       
    24     def start(self):
       
    25         self.running=True
       
    26         threading.Thread.start(self)
       
    27  
       
    28    
       
    29     def run(self):
       
    30         # *serve_forever* muss in einem eigenen Thread laufen, damit man es
       
    31         # unterbrochen werden kann!
       
    32         while (self.running):
       
    33             self.handle_request()
       
    34    
       
    35     def stop(self):
       
    36         if (self.running):
       
    37             self.running=False
       
    38             self.server_close()
       
    39             self.join()
       
    40 
       
    41     def __del__(self):
       
    42         self.stop()
       
    43  
       
    44     def __enter__(self):
       
    45         self.start()
       
    46         return self
       
    47 
       
    48     def __exit__(self,type,value,traceback):
       
    49         self.stop()
       
    50 
       
    51 
       
    52 
       
    53 def init_server():
       
    54     userlist=[{"name":"test","password":"test",  "class":User},
       
    55               {"name":"test2","password":"test2", "class": User},
       
    56               {"name":"admin","password":"admin", "class": Admin}]
       
    57 
       
    58 
       
    59     
       
    60     class MyManager(BaseManager):
       
    61         pass
       
    62     
       
    63     MyManager.register('SMSJob', SMSJob) 
       
    64     MyManager.register('FAXob', FAXJob) 
       
    65     MyManager.register('MailJob',MailJob) 
       
    66     MyManager.register('Providerlist',Providerlist) 
       
    67     manager = MyManager()
       
    68     manager.start()
       
    69     
       
    70     
       
    71     #anbieter erzeugen und konfigurieren
       
    72     sip=anbieter.sipgate()
       
    73     sip.read_basic_config("iro.conf")
       
    74     
       
    75     localhost=MySMTP()
       
    76     localhost.read_basic_config("iro.conf")
       
    77 
       
    78     smstrade=MySmstrade()
       
    79     smstrade.read_basic_config("iro.conf")
       
    80 
       
    81     #Benutzerdatenbank erstellen
       
    82     queue = Queue()
       
    83     provider=Providerlist()
       
    84     provider.add("sipgate", sip, ["sms", "fax", ])
       
    85     provider.add("smstrade", smstrade, ["sms", ])
       
    86     provider.add("geonet", None, ["sms", "fax", ])
       
    87     provider.add("fax.de", None, ["sms", "fax", ])
       
    88     provider.add("localhost", localhost, ["mail", ])
       
    89     provider.setDefault("sms","smstrade")
       
    90     provider.setDefault("fax","sipgate")
       
    91     provider.setDefault("mail","localhost")
       
    92     jobqueue=Joblist(manager,  queue, provider)
       
    93     userdb=MyUserDB(userlist,jobqueue)
       
    94 
       
    95 
       
    96     #Server starten
       
    97     cp = ConfigParser.ConfigParser()
       
    98     cp.read(["iro.conf"])
       
    99     cert=cp.get('server', 'cert')
       
   100     key=cp.get('server', 'key')
       
   101     serv = StoppableXMLRPCServer(addr=("localhost", 8000), 
       
   102                                       userdb=userdb,
       
   103                                       certificate=cert,privatekey=key,
       
   104                                       logRequests=False)
       
   105     serv.relam="xmlrpc"
       
   106     return serv
       
   107  
       
   108     
       
   109 class TestServer(unittest.TestCase):
     8 class TestServer(unittest.TestCase):
   110     
     9     
   111     def setUp(self):
    10     def setUp(self):
   112         self.serv = init_server()
    11         self.i = init_server()
       
    12         self.serv=self.i.serv
       
    13         
   113         self.serv.start()
    14         self.serv.start()
   114 
    15 
   115     def tearDown(self):
    16     def tearDown(self):
   116         self.serv.stop()
    17         self.serv.stop()
   117 
    18