Coverage for test/d7a/d7anp/test_addressee.py: 98%
93 statements
« prev ^ index » next coverage.py v7.5.0, created at 2024-05-24 08:03 +0200
« prev ^ index » next coverage.py v7.5.0, created at 2024-05-24 08:03 +0200
1#
2# Copyright (c) 2015-2021 University of Antwerp, Aloxy NV.
3#
4# This file is part of pyd7a.
5# See https://github.com/Sub-IoT/pyd7a for further info.
6#
7# Licensed under the Apache License, Version 2.0 (the "License");
8# you may not use this file except in compliance with the License.
9# You may obtain a copy of the License at
10#
11# http://www.apache.org/licenses/LICENSE-2.0
12#
13# Unless required by applicable law or agreed to in writing, software
14# distributed under the License is distributed on an "AS IS" BASIS,
15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16# See the License for the specific language governing permissions and
17# limitations under the License.
18#
20# author: Christophe VG <contact@christophe.vg>
21# unit tests for the D7 ATP Addressee
23import unittest
25from d7a.d7anp.addressee import Addressee, IdType, NlsMethod
26from d7a.types.ct import CT
29class TestAddressee(unittest.TestCase):
30 def test_default_constructor(self):
31 Addressee()
33 def test_construction(self):
34 Addressee(id_type=IdType.VID, id=0xFFFF)
35 Addressee(id_type=IdType.UID, id=0xFFFFFFFFFFFFFF)
37 def test_id_length_of_nbid(self):
38 addr = Addressee(id_type=IdType.NBID, id=CT(1))
39 self.assertEqual(addr.id_length, 1)
41 def test_id_length_of_noid(self):
42 addr = Addressee(id_type=IdType.NOID, id=None)
43 self.assertEqual(addr.id_length, 0)
45 def test_id_length_of_virtual_id(self):
46 addr = Addressee(id_type=IdType.VID, id=0x0)
47 self.assertEqual(addr.id_length, 2)
49 def test_id_length_of_universal_id(self):
50 addr = Addressee(id_type=IdType.UID, id=0x0)
51 self.assertEqual(addr.id_length, 8)
53 def test_id_type_property(self):
54 addr = Addressee()
55 self.assertEqual(addr.id_type, IdType.NOID)
57 def test_access_class_property(self):
58 addr = Addressee(access_class=0xF)
59 self.assertEqual(addr.access_class, 0xF)
61 def test_id_property(self):
62 addr = Addressee(id_type=IdType.VID, id=0x1234)
63 self.assertEqual(addr.id, 0x1234)
65 # negative tests
67 def test_addressee_id_is_positive_value(self):
68 def bad(): addr = Addressee(id_type=IdType.UID, id=-1)
69 self.assertRaises(ValueError, bad)
70 def bad(): addr = Addressee(id_type=IdType.VID, id=-1)
71 self.assertRaises(ValueError, bad)
73 def test_noid_id_consists_of_0_bytes(self):
74 def bad(): addr = Addressee(id_type=IdType.NOID, id=0)
75 self.assertRaises(ValueError, bad)
77 def test_nbid_id_should_be_ct(self):
78 def bad(): addr = Addressee(id_type=IdType.NOID, id=0)
79 self.assertRaises(ValueError, bad)
81 def bad(): addr = Addressee(id_type=IdType.NOID, id=CT(0))
82 self.assertRaises(ValueError, bad)
84 def test_nbid_id_consists_of_1_bytes(self):
85 def bad(): addr = Addressee(id_type=IdType.NOID, id=0xFFFF)
87 self.assertRaises(ValueError, bad)
89 def test_virtual_addressee_id_consists_of_max_2_bytes(self):
90 def bad(): addr = Addressee(id_type=IdType.VID,id=0x1FFFF)
91 self.assertRaises(ValueError, bad)
93 def test_universal_addressee_id_consists_of_max_8_bytes(self):
94 def bad(): addr = Addressee(id_type=IdType.UID, id=0x1FFFFFFFFFFFFFFFF)
95 self.assertRaises(ValueError, bad)
97 def test_access_class_consists_of_max_8_bits(self):
98 def bad(): addr = Addressee(access_class=0xFFFF)
99 self.assertRaises(ValueError, bad)
101 def test_invalid_id_type(self):
102 def bad(): addr = Addressee(id_type=0)
103 self.assertRaises(ValueError, bad)
105 # byte generation
107 def test_byte_generation(self):
108 tests = [
109 (Addressee(), '00010000'), # NOID
110 (Addressee(id_type=IdType.NBID, id=CT(0)), '00000000'),
111 (Addressee(id_type=IdType.VID, id=0), '00110000'),
112 (Addressee(id_type=IdType.UID, id=0), '00100000'),
113 (Addressee(id_type=IdType.NBID, id=CT(0), nls_method=NlsMethod.AES_CTR), '00000001')
114 ]
115 for test in tests:
116 addressee_ctrl = bytearray(test[0])[0]
117 self.assertEqual(addressee_ctrl, int(test[1], 2))
119 bs = bytearray(Addressee(id_type=IdType.VID, id=0x1234, access_class=5))
120 self.assertEqual(len(bs), 4)
121 self.assertEqual(bs[0], int('00110000', 2))
122 self.assertEqual(bs[1], 5)
123 self.assertEqual(bs[2], int('00010010', 2))
124 self.assertEqual(bs[3], int('00110100', 2))
126 bs = bytearray(Addressee(id_type=IdType.UID, id=0x1234567890123456, access_class=5))
127 self.assertEqual(len(bs), 10)
128 self.assertEqual(bs[0], int('00100000', 2))
129 self.assertEqual(bs[1], 5)
130 self.assertEqual(bs[2], int('00010010', 2))
131 self.assertEqual(bs[3], int('00110100', 2))
132 self.assertEqual(bs[4], int('01010110', 2))
133 self.assertEqual(bs[5], int('01111000', 2))
134 self.assertEqual(bs[6], int('10010000', 2))
135 self.assertEqual(bs[7], int('00010010', 2))
136 self.assertEqual(bs[8], int('00110100', 2))
137 self.assertEqual(bs[9], int('01010110', 2))
139 bs = bytearray(Addressee(id_type=IdType.NOID, access_class=5, nls_method=NlsMethod.AES_CBC_MAC_128))
140 self.assertEqual(len(bs), 2)
141 self.assertEqual(bs[0], int('00010010', 2))
142 self.assertEqual(bs[1], 5)
144 bs = bytearray(Addressee(id_type=IdType.NBID, id=CT.compress(100)))
145 self.assertEqual(len(bs), 3)
146 self.assertEqual(bs[0], int('00000000', 2))
147 self.assertEqual(bs[1], 0)
148 self.assertEqual(bs[2], 0x39)
150if __name__ == '__main__':
151 suite = unittest.TestLoader().loadTestsFromTestCase(TestAddressee)
152 unittest.TextTestRunner(verbosity=2).run(suite)