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