iro/tests/sipgate.py
author Sandro Knauß <knauss@netzguerilla.net>
Tue, 24 Apr 2012 23:59:00 +0200
branchdevel
changeset 272 97826c8248f9
child 294 0e75bd39767d
permissions -rw-r--r--
adding sipgate backend

# -*- 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)