diff -r b218238e76b9 -r 97826c8248f9 iro/tests/sipgate.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/tests/sipgate.py Tue Apr 24 23:59:00 2012 +0200 @@ -0,0 +1,85 @@ +# -*- 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)