iro/tests/testXMLRPCServer.py
changeset 61 04dfd43dfecc
parent 48 32763e344d3b
child 63 3df3da063cff
equal deleted inserted replaced
60:5ca3aa8d75e1 61:04dfd43dfecc
     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.serv = init_server()
   113         self.serv.start()
    12         self.serv.start()