# -*- coding: utf-8 -*-
from twisted.trial import unittest
from twisted.web import xmlrpc, server
from twisted.internet import reactor
from decimal import Decimal
from iro.error import NoRoute, NoTyp, NeededOption, RejectRecipient
from iro.telnumber import Telnumber
from iro.model.message import SMS, Fax
from iro.offer.sipgate import Sipgate
class XMLRPCServer(xmlrpc.XMLRPC):
def lookupProcedure(self, procedurePath):
return self.l[procedurePath]
class TestSipgateProvider(unittest.TestCase):
def setUp(self):
self.server = XMLRPCServer()
self.p = reactor.listenTCP(0, server.Site(self.server),
interface="127.0.0.1")
self.port = self.p.getHost().port
def tearDown(self):
self.server = None
return self.p.stopListening()
def getProvider(self, c=None):
_c={"username":"XXXXXXXX",
"password":"PPPPPPPP",
"typ": "sipgate"
}
if c:
_c.update(c)
ret = Sipgate("test")
ret.url="http://%%s:%%s@127.0.0.1:%d/" % self.port
ret.load(_c.items())
return ret
def testSendSMS(self):
p=self.getProvider()
content = u"Hello World - äüöß'\""
@xmlrpc.withRequest
def f(request, args):
self.assertEqual(request.getUser(),"XXXXXXXX")
self.assertEqual(request.getPassword(),"PPPPPPPP")
self.assertEqual(args,{'Content': u'Hello World - äüöß\'"',
'TOS': 'text',
'RemoteUri': 'sip:491701234567@sipgate.net'})
return {"SessionID":"", "StatusCode":200, "StatusString":"Method success"}
self.server.l = {"samurai.SessionInitiate": f}
def s(r):
self.assertEqual(r.provider, p)
self.assertEqual(r.route, None)
self.assertEqual(r.costs, Decimal('0.079'))
self.assertEqual(r.exID, '')
self.assertEqual(r.count, 1)
d = p.send("sms", Telnumber("01701234567"), SMS(content,None))
d.addCallback(s)
return d
def testNeededOption(self):
s= self.getProvider()
self.assertEqual(s.username, "XXXXXXXX")
self.assertEqual(s.password, "PPPPPPPP")
self.assertEqual(s.price_sms, '0.079')
self.assertEqual(s.price_fax, '0.03')
self.assertRaises(NeededOption, s.load,[])
def testSendFunc(self):
s = self.getProvider()
p = s.getSendFunc("sms",None)
self.assertEqual(p.func, s.send)
self.assertEqual(p.args, ("sms",))
self.assertRaises(NoRoute,s.getSendFunc,"sms","foo")
self.assertRaises(NoTyp,s.getSendFunc,"mail2",None)