iro/tests/sipgate.py
branchdevel
changeset 272 97826c8248f9
child 294 0e75bd39767d
equal deleted inserted replaced
271:b218238e76b9 272:97826c8248f9
       
     1 # -*- coding: utf-8 -*-
       
     2 from twisted.trial import unittest
       
     3 from twisted.web import xmlrpc, server
       
     4 from twisted.internet import reactor
       
     5 from decimal import Decimal
       
     6 
       
     7 from iro.error import NoRoute, NoTyp, NeededOption, RejectRecipient
       
     8 from iro.telnumber import Telnumber
       
     9 from iro.model.message import SMS, Fax
       
    10 from iro.offer.sipgate import Sipgate
       
    11 
       
    12 
       
    13 class XMLRPCServer(xmlrpc.XMLRPC):
       
    14     def lookupProcedure(self, procedurePath):
       
    15         return self.l[procedurePath]
       
    16 
       
    17 class TestSipgateProvider(unittest.TestCase):
       
    18 
       
    19     def setUp(self):
       
    20         self.server = XMLRPCServer()
       
    21         self.p = reactor.listenTCP(0, server.Site(self.server),
       
    22                                    interface="127.0.0.1")
       
    23         self.port = self.p.getHost().port
       
    24 
       
    25     def tearDown(self):
       
    26         self.server = None
       
    27         return self.p.stopListening()
       
    28 
       
    29     def getProvider(self, c=None):
       
    30         _c={"username":"XXXXXXXX",
       
    31             "password":"PPPPPPPP",
       
    32             "typ": "sipgate"
       
    33             }
       
    34 
       
    35         if c:
       
    36             _c.update(c)
       
    37 
       
    38         ret = Sipgate("test")
       
    39         ret.url="http://%%s:%%s@127.0.0.1:%d/" % self.port
       
    40         ret.load(_c.items())
       
    41         return ret
       
    42 
       
    43     def testSendSMS(self):
       
    44         p=self.getProvider()
       
    45         content = u"Hello World - äüöß'\""
       
    46        
       
    47         @xmlrpc.withRequest
       
    48         def f(request, args):
       
    49             self.assertEqual(request.getUser(),"XXXXXXXX")
       
    50             self.assertEqual(request.getPassword(),"PPPPPPPP")
       
    51             self.assertEqual(args,{'Content': u'Hello World - äüöß\'"',
       
    52                 'TOS': 'text',
       
    53                 'RemoteUri': 'sip:491701234567@sipgate.net'})
       
    54             return {"SessionID":"", "StatusCode":200, "StatusString":"Method success"}
       
    55 
       
    56         self.server.l = {"samurai.SessionInitiate": f}
       
    57 
       
    58         def s(r):
       
    59             self.assertEqual(r.provider, p)
       
    60             self.assertEqual(r.route, None)
       
    61             self.assertEqual(r.costs, Decimal('0.079'))
       
    62             self.assertEqual(r.exID, '')
       
    63             self.assertEqual(r.count, 1)
       
    64 
       
    65         d = p.send("sms", Telnumber("01701234567"), SMS(content,None))
       
    66         d.addCallback(s)
       
    67         return d
       
    68 
       
    69 
       
    70     def testNeededOption(self):
       
    71         s= self.getProvider()
       
    72         self.assertEqual(s.username, "XXXXXXXX")
       
    73         self.assertEqual(s.password, "PPPPPPPP")
       
    74         self.assertEqual(s.price_sms, '0.079')
       
    75         self.assertEqual(s.price_fax, '0.03')
       
    76 
       
    77         self.assertRaises(NeededOption, s.load,[])
       
    78 
       
    79     def testSendFunc(self):
       
    80         s = self.getProvider()
       
    81         p = s.getSendFunc("sms",None)
       
    82         self.assertEqual(p.func, s.send)
       
    83         self.assertEqual(p.args, ("sms",))
       
    84         self.assertRaises(NoRoute,s.getSendFunc,"sms","foo")
       
    85         self.assertRaises(NoTyp,s.getSendFunc,"mail2",None)