iro/tests/sipgate.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 24 Aug 2012 01:05:06 +0200
branchdevel
changeset 294 0e75bd39767d
parent 272 97826c8248f9
permissions -rw-r--r--
adding LICENSE to all files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
294
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
     1
# Copyright (c) 2012 netzguerilla.net <iro@netzguerilla.net>
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
     2
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
     3
# This file is part of Iro.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
     4
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
     5
# Permission is hereby granted, free of charge, to any person obtaining a copy of
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
     6
# this software and associated documentation files (the "Software"), to deal in
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
     7
# the Software without restriction, including without limitation the rights to use,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
     8
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
     9
# #Software, and to permit persons to whom the Software is furnished to do so,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    10
# subject to the following conditions:
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    11
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    12
# The above copyright notice and this permission notice shall be included in
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    13
# all copies or substantial portions of the Software.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    14
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    15
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    16
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    17
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    18
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    19
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    20
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 272
diff changeset
    21
272
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
# -*- coding: utf-8 -*-
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
from twisted.trial import unittest
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
from twisted.web import xmlrpc, server
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
from twisted.internet import reactor
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
from decimal import Decimal
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
from iro.error import NoRoute, NoTyp, NeededOption, RejectRecipient
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
from iro.telnumber import Telnumber
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
from iro.model.message import SMS, Fax
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
from iro.offer.sipgate import Sipgate
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
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
class XMLRPCServer(xmlrpc.XMLRPC):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
    def lookupProcedure(self, procedurePath):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
        return self.l[procedurePath]
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
class TestSipgateProvider(unittest.TestCase):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
    def setUp(self):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
        self.server = XMLRPCServer()
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
        self.p = reactor.listenTCP(0, server.Site(self.server),
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
                                   interface="127.0.0.1")
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
        self.port = self.p.getHost().port
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
    def tearDown(self):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    47
        self.server = None
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
        return self.p.stopListening()
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
    def getProvider(self, c=None):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
        _c={"username":"XXXXXXXX",
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
            "password":"PPPPPPPP",
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
            "typ": "sipgate"
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54
            }
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
        if c:
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    57
            _c.update(c)
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    58
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    59
        ret = Sipgate("test")
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    60
        ret.url="http://%%s:%%s@127.0.0.1:%d/" % self.port
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    61
        ret.load(_c.items())
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    62
        return ret
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    63
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    64
    def testSendSMS(self):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    65
        p=self.getProvider()
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    66
        content = u"Hello World - äüöß'\""
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    67
       
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    68
        @xmlrpc.withRequest
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    69
        def f(request, args):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    70
            self.assertEqual(request.getUser(),"XXXXXXXX")
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    71
            self.assertEqual(request.getPassword(),"PPPPPPPP")
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    72
            self.assertEqual(args,{'Content': u'Hello World - äüöß\'"',
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    73
                'TOS': 'text',
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    74
                'RemoteUri': 'sip:491701234567@sipgate.net'})
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    75
            return {"SessionID":"", "StatusCode":200, "StatusString":"Method success"}
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.server.l = {"samurai.SessionInitiate": f}
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 s(r):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    80
            self.assertEqual(r.provider, p)
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    81
            self.assertEqual(r.route, None)
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    82
            self.assertEqual(r.costs, Decimal('0.079'))
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    83
            self.assertEqual(r.exID, '')
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    84
            self.assertEqual(r.count, 1)
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    85
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    86
        d = p.send("sms", Telnumber("01701234567"), SMS(content,None))
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    87
        d.addCallback(s)
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    88
        return d
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    89
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    90
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    91
    def testNeededOption(self):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    92
        s= self.getProvider()
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    93
        self.assertEqual(s.username, "XXXXXXXX")
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    94
        self.assertEqual(s.password, "PPPPPPPP")
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    95
        self.assertEqual(s.price_sms, '0.079')
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    96
        self.assertEqual(s.price_fax, '0.03')
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    97
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    98
        self.assertRaises(NeededOption, s.load,[])
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    99
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   100
    def testSendFunc(self):
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   101
        s = self.getProvider()
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   102
        p = s.getSendFunc("sms",None)
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   103
        self.assertEqual(p.func, s.send)
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   104
        self.assertEqual(p.args, ("sms",))
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   105
        self.assertRaises(NoRoute,s.getSendFunc,"sms","foo")
97826c8248f9 adding sipgate backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   106
        self.assertRaises(NoTyp,s.getSendFunc,"mail2",None)