iro/test.py
author Sandro Knauß <knauss@netzguerilla.net>
Sun, 07 Feb 2010 06:13:37 +0100
changeset 30 5253631a8dd3
parent 7 07dd2663ac90
child 38 254c00f3cbe0
permissions -rw-r--r--
sms via sipgate working

# -*- coding: utf-8 -*-

import unittest, ConfigParser
import iro
from job import SMSJob, FAXJob, MailJob
from joblist import Joblist
from providerlist import Providerlist
import threading, xmlrpclib
from multiprocessing import Queue
from multiprocessing.managers import BaseManager

class StoppableXMLRPCServer(iro.SecureUserDBXMLRPCServer, threading.Thread):
    running=True
    def __init__(self, *args, **kwargs):
        iro.SecureUserDBXMLRPCServer.__init__(self, *args, **kwargs)
        threading.Thread.__init__(self)
   
   
    def run(self):
        # *serve_forever* muss in einem eigenen Thread laufen, damit man es
        # unterbrechen kann!
        while (self.running):
            self.handle_request()
   
   
    def stop(self):
        self.running=False
        self.server_close()


def init_server():
    userlist=[{"name":"test","password":"test",  "class":iro.User},
              {"name":"test2","password":"test2", "class": iro.User},
              {"name":"admin","password":"admin", "class": iro.Admin}]


    
    class MyManager(BaseManager):
        pass
    
    MyManager.register('SMSJob', SMSJob) 
    MyManager.register('FAXob', FAXJob) 
    MyManager.register('MailJob',MailJob) 
    MyManager.register('Providerlist',Providerlist) 
    manager = MyManager()
    manager.start()
    
    
    #anbieter erzeugen und konfigurieren
    import anbieter
    sip=anbieter.sipgate()
    sip.read_basic_config("iro.conf")
    
    localhost=iro.MySMTP()
    localhost.read_basic_config("iro.conf")

    smstrade=iro.MySmstrade()
    smstrade.read_basic_config("iro.conf")

    #Benutzerdatenbank erstellen
    queue = Queue()
    provider=Providerlist()
    provider.add("sipgate", sip, ["sms", "fax", ])
    provider.add("smstrade", smstrade, ["sms", ])
    provider.add("geonet", None, ["sms", "fax", ])
    provider.add("fax.de", None, ["sms", "fax", ])
    provider.add("localhost", localhost, ["mail", ])
    provider.setDefault("sms","smstrade")
    provider.setDefault("fax","sipgate")
    provider.setDefault("mail","localhost")
    jobqueue=Joblist(manager,  queue, provider)
    userdb=iro.MyUserDB(userlist,jobqueue)


    #Server starten
    cp = ConfigParser.ConfigParser()
    cp.read(["iro.conf"])
    cert=cp.get('server', 'cert')
    key=cp.get('server', 'key')
    serv = StoppableXMLRPCServer(addr=("localhost", 8000), 
                                      userdb=userdb,
                                      certificate=cert,privatekey=key)
    serv.relam="xmlrpc"
    return serv
 
    
class TestServer(unittest.TestCase):
    
    def setUp(self):
      self.serv = init_server()
      self.serv.start()

    def tearDown(self):
      self.serv.stop()
      xmlrpclib.Server("https://test:test@localhost:8000").status()			#letzte nachricht abrufen, damit richt geschlossen wird

    def testLogin(self):
        self.assertEqual(xmlrpclib.Server("https://test:test@localhost:8000").status(), {})
        self.assertEqual(xmlrpclib.Server("https://test2:test2@localhost:8000").status(), {})
        self.assertRaises(xmlrpclib.ProtocolError, xmlrpclib.Server("https://test2:test@localhost:8000").status)
        self.assertRaises(xmlrpclib.ProtocolError,xmlrpclib.Server ("https://test:test2@localhost:8000").status)
    
    def testsendSMS(self):
        servstr="https://test:test@localhost:8000"
        client=xmlrpclib.Server(servstr)
        id=client.startSMS("test",["01234", ] )
        self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name':  'test'}} )
        
    def testTwoUser(self):
        u1="https://test:test@localhost:8000"
        u2="https://test2:test2@localhost:8000"
        admin="https://admin:admin@localhost:8000"
        client1=xmlrpclib.Server(u1)
        client2=xmlrpclib.Server(u2)
        admin=xmlrpclib.Server(admin)
        id1=client1.startSMS("test",["01234"] )
        self.assertEqual(client2.status(),{} ) 
        self.assertEqual(admin.status(id1),{id1: {'status': ['init',{}], 'name':  'test'}} )
        id2=client2.startSMS("test2",["01234"] )
        self.assertNotEqual(id1, id2)
        self.assertEqual(client1.status(),{id1: {'status': ['init',{}], 'name':  'test'}})
        self.assertEqual(client2.status(),{id2: {'status': ['init',{}], 'name':  'test2'}})
        self.assertEqual(admin.status(),{id1: {'status': ['init',{}], 'name':   'test'},
                        id2: {'status': ['init',{}], 'name':   'test2'}} )
        
        self.assertEqual(client2.status(id1), {})
        self.assertEqual(client1.status(id2), {})
        
    def testGetProvider(self):
        servstr="https://test:test@localhost:8000"
        client=xmlrpclib.Server(servstr)       
        self.assertEqual(client.getProvider("sms"), ["fax.de","geonet", "sipgate", "smstrade"])
        self.assertEqual(client.getProvider("fax"), ["fax.de","geonet", "sipgate"])
        self.assertEqual(client.getProvider("mail"), ["localhost"])
        
        self.assertRaises(xmlrpclib.Fault,client.getProvider, "temp")
    
    def testGetDefault(self):
        servstr="https://test:test@localhost:8000"
        client=xmlrpclib.Server(servstr)       
        self.assertEqual(client.getDefaultProvider("sms"), "smstrade")
        self.assertEqual(client.getDefaultProvider("fax"),"sipgate")
        self.assertEqual(client.getDefaultProvider("mail"), "localhost")       
        
        self.assertRaises(xmlrpclib.Fault,client.getDefaultProvider, "temp")        

    
if __name__ == "__main__":
    unittest.main()