File: test_wap.py

package info (click to toggle)
python-messaging 0.5.11%2Bdebian-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 964 kB
  • ctags: 392
  • sloc: python: 3,303; makefile: 145
file content (140 lines) | stat: -rw-r--r-- 7,297 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# -*- coding: utf-8 -*-
from array import array
import unittest

from messaging.sms import SmsDeliver
from messaging.sms.wap import (is_a_wap_push_notification as is_push,
                               is_mms_notification,
                               extract_push_notification)


def list_to_str(l):
    a = array("B", l)
    return a.tostring()


class TestSmsWapPush(unittest.TestCase):

    data = [1, 6, 34, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111,
        110, 47, 118, 110, 100, 46, 119, 97, 112, 46, 109, 109, 115, 45,
        109, 101, 115, 115, 97, 103, 101, 0, 175, 132, 140, 130, 152, 78,
        79, 75, 53, 67, 105, 75, 99, 111, 84, 77, 89, 83, 71, 52, 77, 66,
        83, 119, 65, 65, 115, 75, 118, 49, 52, 70, 85, 72, 65, 65, 65, 65,
        65, 65, 65, 65, 0, 141, 144, 137, 25, 128, 43, 52, 52, 55, 55, 56,
        53, 51, 52, 50, 55, 52, 57, 47, 84, 89, 80, 69, 61, 80, 76, 77, 78,
        0, 138, 128, 142, 2, 116, 0, 136, 5, 129, 3, 1, 25, 64, 131, 104,
        116, 116, 112, 58, 47, 47, 112, 114, 111, 109, 109, 115, 47, 115,
        101, 114, 118, 108, 101, 116, 115, 47, 78, 79, 75, 53, 67, 105, 75,
        99, 111, 84, 77, 89, 83, 71, 52, 77, 66, 83, 119, 65, 65, 115, 75,
        118, 49, 52, 70, 85, 72, 65, 65, 65, 65, 65, 65, 65, 65, 0]

    def test_is_a_wap_push_notification(self):
        self.assertTrue(is_push(list_to_str(self.data)))
        self.assertTrue(is_push(list_to_str([1, 6, 57, 92, 45])))
        self.assertFalse(is_push(list_to_str([4, 5, 57, 92, 45])))
        self.assertRaises(TypeError, is_push, 1)

    def test_decoding_m_notification_ind(self):
        pdus = [
            "0791447758100650400E80885810000000810004016082415464408C0C08049F8E020105040B8423F00106226170706C69636174696F6E2F766E642E7761702E6D6D732D6D65737361676500AF848C82984E4F4B3543694B636F544D595347344D4253774141734B7631344655484141414141414141008D908919802B3434373738353334323734392F545950453D504C4D4E008A808E0274008805810301194083687474703A2F",
            "0791447758100650440E8088581000000081000401608241547440440C08049F8E020205040B8423F02F70726F6D6D732F736572766C6574732F4E4F4B3543694B636F544D595347344D4253774141734B763134465548414141414141414100",
        ]
        number = '3838383530313030303030303138'.decode('hex')
        csca = "+447785016005"
        data = ""

        sms = SmsDeliver(pdus[0])
        self.assertEqual(sms.udh.concat.ref, 40846)
        self.assertEqual(sms.udh.concat.cnt, 2)
        self.assertEqual(sms.udh.concat.seq, 1)
        self.assertEqual(sms.number, number)
        self.assertEqual(sms.csca, csca)
        data += sms.text

        sms = SmsDeliver(pdus[1])
        self.assertEqual(sms.udh.concat.ref, 40846)
        self.assertEqual(sms.udh.concat.cnt, 2)
        self.assertEqual(sms.udh.concat.seq, 2)
        self.assertEqual(sms.number, number)
        data += sms.text

        mms = extract_push_notification(data)
        self.assertEqual(is_mms_notification(mms), True)

        self.assertEqual(mms.headers['Message-Type'], 'm-notification-ind')
        self.assertEqual(mms.headers['Transaction-Id'],
                'NOK5CiKcoTMYSG4MBSwAAsKv14FUHAAAAAAAA')
        self.assertEqual(mms.headers['MMS-Version'], '1.0')
        self.assertEqual(mms.headers['From'],
                '2b3434373738353334323734392f545950453d504c4d4e'.decode('hex'))
        self.assertEqual(mms.headers['Message-Class'], 'Personal')
        self.assertEqual(mms.headers['Message-Size'], 29696)
        self.assertEqual(mms.headers['Expiry'], 72000)
        self.assertEqual(mms.headers['Content-Location'],
                'http://promms/servlets/NOK5CiKcoTMYSG4MBSwAAsKv14FUHAAAAAAAA')

        pdus = [
            "0791447758100650400E80885810000000800004017002314303408C0C0804DFD3020105040B8423F00106226170706C69636174696F6E2F766E642E7761702E6D6D732D6D65737361676500AF848C82984E4F4B3541315A6446544D595347344F3356514141734A763934476F4E4141414141414141008D908919802B3434373731373237353034392F545950453D504C4D4E008A808E0274008805810303F47F83687474703A2F",
            "0791447758100650440E8088581000000080000401700231431340440C0804DFD3020205040B8423F02F70726F6D6D732F736572766C6574732F4E4F4B3541315A6446544D595347344F3356514141734A763934476F4E414141414141414100",
        ]

        number = "88850100000008"
        data = ""

        sms = SmsDeliver(pdus[0])
        self.assertEqual(sms.udh.concat.ref, 57299)
        self.assertEqual(sms.udh.concat.cnt, 2)
        self.assertEqual(sms.udh.concat.seq, 1)
        self.assertEqual(sms.number, number)
        data += sms.text

        sms = SmsDeliver(pdus[1])
        self.assertEqual(sms.udh.concat.ref, 57299)
        self.assertEqual(sms.udh.concat.cnt, 2)
        self.assertEqual(sms.udh.concat.seq, 2)
        self.assertEqual(sms.number, number)
        data += sms.text

        mms = extract_push_notification(data)
        self.assertEqual(is_mms_notification(mms), True)

        self.assertEqual(mms.headers['Message-Type'], 'm-notification-ind')
        self.assertEqual(mms.headers['Transaction-Id'],
                'NOK5A1ZdFTMYSG4O3VQAAsJv94GoNAAAAAAAA')
        self.assertEqual(mms.headers['MMS-Version'], '1.0')
        self.assertEqual(mms.headers['From'],
                '2b3434373731373237353034392f545950453d504c4d4e'.decode('hex'))
        self.assertEqual(mms.headers['Message-Class'], 'Personal')
        self.assertEqual(mms.headers['Message-Size'], 29696)
        self.assertEqual(mms.headers['Expiry'], 259199)
        self.assertEqual(mms.headers['Content-Location'],
                'http://promms/servlets/NOK5A1ZdFTMYSG4O3VQAAsJv94GoNAAAAAAAA')

    def test_decoding_generic_wap_push(self):
        pdus = [
            "0791947122725014440C8500947122921105F5112042519582408C0B05040B8423F0000396020101060B03AE81EAC3958D01A2B48403056A0A20566F6461666F6E650045C60C037761702E6D65696E63616C6C79612E64652F000801035A756D206B6F7374656E6C6F73656E20506F7274616C20224D65696E0083000322202D2065696E66616368206175662064656E20666F6C67656E64656E204C696E6B206B6C69636B656E",
            "0791947122725014440C8500947122921105F5112042519592403C0B05040B8423F00003960202206F6465722064696520536569746520646972656B7420617566727566656E2E2049687200830003205465616D000101",
        ]
        number = '303034393137323232393131'.decode('hex')
        csca = "+491722270541"
        data = ""

        sms = SmsDeliver(pdus[0])
        self.assertEqual(sms.udh.concat.ref, 150)
        self.assertEqual(sms.udh.concat.cnt, 2)
        self.assertEqual(sms.udh.concat.seq, 1)
        self.assertEqual(sms.number, number)
        self.assertEqual(sms.csca, csca)
        data += sms.text

        sms = SmsDeliver(pdus[1])
        self.assertEqual(sms.udh.concat.ref, 150)
        self.assertEqual(sms.udh.concat.cnt, 2)
        self.assertEqual(sms.udh.concat.seq, 2)
        self.assertEqual(sms.number, number)
        data += sms.text

        self.assertEqual(data, '\x01\x06\x0b\x03\xae\x81\xea\xc3\x95\x8d\x01\xa2\xb4\x84\x03\x05j\n Vodafone\x00E\xc6\x0c\x03wap.meincallya.de/\x00\x08\x01\x03Zum kostenlosen Portal "Mein\x00\x83\x00\x03" - einfach auf den folgenden Link klicken oder die Seite direkt aufrufen. Ihr\x00\x83\x00\x03 Team\x00\x01\x01')

        push = extract_push_notification(data)
        self.assertEqual(is_mms_notification(push), False)