xref: /aosp_15_r20/external/openthread/tests/scripts/thread-cert/test_mle.py (revision cfb92d1480a9e65faed56933e9c12405f45898b4)
1*cfb92d14SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*cfb92d14SAndroid Build Coastguard Worker#
3*cfb92d14SAndroid Build Coastguard Worker#  Copyright (c) 2016, The OpenThread Authors.
4*cfb92d14SAndroid Build Coastguard Worker#  All rights reserved.
5*cfb92d14SAndroid Build Coastguard Worker#
6*cfb92d14SAndroid Build Coastguard Worker#  Redistribution and use in source and binary forms, with or without
7*cfb92d14SAndroid Build Coastguard Worker#  modification, are permitted provided that the following conditions are met:
8*cfb92d14SAndroid Build Coastguard Worker#  1. Redistributions of source code must retain the above copyright
9*cfb92d14SAndroid Build Coastguard Worker#     notice, this list of conditions and the following disclaimer.
10*cfb92d14SAndroid Build Coastguard Worker#  2. Redistributions in binary form must reproduce the above copyright
11*cfb92d14SAndroid Build Coastguard Worker#     notice, this list of conditions and the following disclaimer in the
12*cfb92d14SAndroid Build Coastguard Worker#     documentation and/or other materials provided with the distribution.
13*cfb92d14SAndroid Build Coastguard Worker#  3. Neither the name of the copyright holder nor the
14*cfb92d14SAndroid Build Coastguard Worker#     names of its contributors may be used to endorse or promote products
15*cfb92d14SAndroid Build Coastguard Worker#     derived from this software without specific prior written permission.
16*cfb92d14SAndroid Build Coastguard Worker#
17*cfb92d14SAndroid Build Coastguard Worker#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18*cfb92d14SAndroid Build Coastguard Worker#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*cfb92d14SAndroid Build Coastguard Worker#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*cfb92d14SAndroid Build Coastguard Worker#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21*cfb92d14SAndroid Build Coastguard Worker#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22*cfb92d14SAndroid Build Coastguard Worker#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23*cfb92d14SAndroid Build Coastguard Worker#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*cfb92d14SAndroid Build Coastguard Worker#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25*cfb92d14SAndroid Build Coastguard Worker#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26*cfb92d14SAndroid Build Coastguard Worker#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27*cfb92d14SAndroid Build Coastguard Worker#  POSSIBILITY OF SUCH DAMAGE.
28*cfb92d14SAndroid Build Coastguard Worker#
29*cfb92d14SAndroid Build Coastguard Worker
30*cfb92d14SAndroid Build Coastguard Workerimport io
31*cfb92d14SAndroid Build Coastguard Workerimport random
32*cfb92d14SAndroid Build Coastguard Workerimport struct
33*cfb92d14SAndroid Build Coastguard Workerimport unittest
34*cfb92d14SAndroid Build Coastguard Worker
35*cfb92d14SAndroid Build Coastguard Workerimport common
36*cfb92d14SAndroid Build Coastguard Workerimport config
37*cfb92d14SAndroid Build Coastguard Workerimport mle
38*cfb92d14SAndroid Build Coastguard Workerimport network_data
39*cfb92d14SAndroid Build Coastguard Worker
40*cfb92d14SAndroid Build Coastguard Worker
41*cfb92d14SAndroid Build Coastguard Workerdef any_address():
42*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(16)
43*cfb92d14SAndroid Build Coastguard Worker
44*cfb92d14SAndroid Build Coastguard Worker
45*cfb92d14SAndroid Build Coastguard Workerdef any_receiver():
46*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(1)
47*cfb92d14SAndroid Build Coastguard Worker
48*cfb92d14SAndroid Build Coastguard Worker
49*cfb92d14SAndroid Build Coastguard Workerdef any_secure():
50*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(1)
51*cfb92d14SAndroid Build Coastguard Worker
52*cfb92d14SAndroid Build Coastguard Worker
53*cfb92d14SAndroid Build Coastguard Workerdef any_device_type():
54*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(1)
55*cfb92d14SAndroid Build Coastguard Worker
56*cfb92d14SAndroid Build Coastguard Worker
57*cfb92d14SAndroid Build Coastguard Workerdef any_network_data():
58*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(1)
59*cfb92d14SAndroid Build Coastguard Worker
60*cfb92d14SAndroid Build Coastguard Worker
61*cfb92d14SAndroid Build Coastguard Workermode_map = {
62*cfb92d14SAndroid Build Coastguard Worker    0x00: {
63*cfb92d14SAndroid Build Coastguard Worker        "receiver": 0,
64*cfb92d14SAndroid Build Coastguard Worker        "secure": 0,
65*cfb92d14SAndroid Build Coastguard Worker        "device_type": 0,
66*cfb92d14SAndroid Build Coastguard Worker        "network_data": 0
67*cfb92d14SAndroid Build Coastguard Worker    },
68*cfb92d14SAndroid Build Coastguard Worker    0x08: {
69*cfb92d14SAndroid Build Coastguard Worker        "receiver": 1,
70*cfb92d14SAndroid Build Coastguard Worker        "secure": 0,
71*cfb92d14SAndroid Build Coastguard Worker        "device_type": 0,
72*cfb92d14SAndroid Build Coastguard Worker        "network_data": 0
73*cfb92d14SAndroid Build Coastguard Worker    },
74*cfb92d14SAndroid Build Coastguard Worker    0x04: {
75*cfb92d14SAndroid Build Coastguard Worker        "receiver": 0,
76*cfb92d14SAndroid Build Coastguard Worker        "secure": 1,
77*cfb92d14SAndroid Build Coastguard Worker        "device_type": 0,
78*cfb92d14SAndroid Build Coastguard Worker        "network_data": 0
79*cfb92d14SAndroid Build Coastguard Worker    },
80*cfb92d14SAndroid Build Coastguard Worker    0x0C: {
81*cfb92d14SAndroid Build Coastguard Worker        "receiver": 1,
82*cfb92d14SAndroid Build Coastguard Worker        "secure": 1,
83*cfb92d14SAndroid Build Coastguard Worker        "device_type": 0,
84*cfb92d14SAndroid Build Coastguard Worker        "network_data": 0
85*cfb92d14SAndroid Build Coastguard Worker    },
86*cfb92d14SAndroid Build Coastguard Worker    0x02: {
87*cfb92d14SAndroid Build Coastguard Worker        "receiver": 0,
88*cfb92d14SAndroid Build Coastguard Worker        "secure": 0,
89*cfb92d14SAndroid Build Coastguard Worker        "device_type": 1,
90*cfb92d14SAndroid Build Coastguard Worker        "network_data": 0
91*cfb92d14SAndroid Build Coastguard Worker    },
92*cfb92d14SAndroid Build Coastguard Worker    0x0A: {
93*cfb92d14SAndroid Build Coastguard Worker        "receiver": 1,
94*cfb92d14SAndroid Build Coastguard Worker        "secure": 0,
95*cfb92d14SAndroid Build Coastguard Worker        "device_type": 1,
96*cfb92d14SAndroid Build Coastguard Worker        "network_data": 0
97*cfb92d14SAndroid Build Coastguard Worker    },
98*cfb92d14SAndroid Build Coastguard Worker    0x06: {
99*cfb92d14SAndroid Build Coastguard Worker        "receiver": 0,
100*cfb92d14SAndroid Build Coastguard Worker        "secure": 1,
101*cfb92d14SAndroid Build Coastguard Worker        "device_type": 1,
102*cfb92d14SAndroid Build Coastguard Worker        "network_data": 0
103*cfb92d14SAndroid Build Coastguard Worker    },
104*cfb92d14SAndroid Build Coastguard Worker    0x0E: {
105*cfb92d14SAndroid Build Coastguard Worker        "receiver": 1,
106*cfb92d14SAndroid Build Coastguard Worker        "secure": 1,
107*cfb92d14SAndroid Build Coastguard Worker        "device_type": 1,
108*cfb92d14SAndroid Build Coastguard Worker        "network_data": 0
109*cfb92d14SAndroid Build Coastguard Worker    },
110*cfb92d14SAndroid Build Coastguard Worker    0x01: {
111*cfb92d14SAndroid Build Coastguard Worker        "receiver": 0,
112*cfb92d14SAndroid Build Coastguard Worker        "secure": 0,
113*cfb92d14SAndroid Build Coastguard Worker        "device_type": 0,
114*cfb92d14SAndroid Build Coastguard Worker        "network_data": 1
115*cfb92d14SAndroid Build Coastguard Worker    },
116*cfb92d14SAndroid Build Coastguard Worker    0x09: {
117*cfb92d14SAndroid Build Coastguard Worker        "receiver": 1,
118*cfb92d14SAndroid Build Coastguard Worker        "secure": 0,
119*cfb92d14SAndroid Build Coastguard Worker        "device_type": 0,
120*cfb92d14SAndroid Build Coastguard Worker        "network_data": 1
121*cfb92d14SAndroid Build Coastguard Worker    },
122*cfb92d14SAndroid Build Coastguard Worker    0x05: {
123*cfb92d14SAndroid Build Coastguard Worker        "receiver": 0,
124*cfb92d14SAndroid Build Coastguard Worker        "secure": 1,
125*cfb92d14SAndroid Build Coastguard Worker        "device_type": 0,
126*cfb92d14SAndroid Build Coastguard Worker        "network_data": 1
127*cfb92d14SAndroid Build Coastguard Worker    },
128*cfb92d14SAndroid Build Coastguard Worker    0x0D: {
129*cfb92d14SAndroid Build Coastguard Worker        "receiver": 1,
130*cfb92d14SAndroid Build Coastguard Worker        "secure": 1,
131*cfb92d14SAndroid Build Coastguard Worker        "device_type": 0,
132*cfb92d14SAndroid Build Coastguard Worker        "network_data": 1
133*cfb92d14SAndroid Build Coastguard Worker    },
134*cfb92d14SAndroid Build Coastguard Worker    0x03: {
135*cfb92d14SAndroid Build Coastguard Worker        "receiver": 0,
136*cfb92d14SAndroid Build Coastguard Worker        "secure": 0,
137*cfb92d14SAndroid Build Coastguard Worker        "device_type": 1,
138*cfb92d14SAndroid Build Coastguard Worker        "network_data": 1
139*cfb92d14SAndroid Build Coastguard Worker    },
140*cfb92d14SAndroid Build Coastguard Worker    0x0B: {
141*cfb92d14SAndroid Build Coastguard Worker        "receiver": 1,
142*cfb92d14SAndroid Build Coastguard Worker        "secure": 0,
143*cfb92d14SAndroid Build Coastguard Worker        "device_type": 1,
144*cfb92d14SAndroid Build Coastguard Worker        "network_data": 1
145*cfb92d14SAndroid Build Coastguard Worker    },
146*cfb92d14SAndroid Build Coastguard Worker    0x07: {
147*cfb92d14SAndroid Build Coastguard Worker        "receiver": 0,
148*cfb92d14SAndroid Build Coastguard Worker        "secure": 1,
149*cfb92d14SAndroid Build Coastguard Worker        "device_type": 1,
150*cfb92d14SAndroid Build Coastguard Worker        "network_data": 1
151*cfb92d14SAndroid Build Coastguard Worker    },
152*cfb92d14SAndroid Build Coastguard Worker    0x0F: {
153*cfb92d14SAndroid Build Coastguard Worker        "receiver": 1,
154*cfb92d14SAndroid Build Coastguard Worker        "secure": 1,
155*cfb92d14SAndroid Build Coastguard Worker        "device_type": 1,
156*cfb92d14SAndroid Build Coastguard Worker        "network_data": 1
157*cfb92d14SAndroid Build Coastguard Worker    }
158*cfb92d14SAndroid Build Coastguard Worker}
159*cfb92d14SAndroid Build Coastguard Worker
160*cfb92d14SAndroid Build Coastguard Worker
161*cfb92d14SAndroid Build Coastguard Workerdef any_mode():
162*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(4)
163*cfb92d14SAndroid Build Coastguard Worker
164*cfb92d14SAndroid Build Coastguard Worker
165*cfb92d14SAndroid Build Coastguard Workerdef any_timeout():
166*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(32)
167*cfb92d14SAndroid Build Coastguard Worker
168*cfb92d14SAndroid Build Coastguard Worker
169*cfb92d14SAndroid Build Coastguard Workerdef any_challenge():
170*cfb92d14SAndroid Build Coastguard Worker    length = random.randint(4, 8)
171*cfb92d14SAndroid Build Coastguard Worker    return bytearray(random.getrandbits(8) for _ in range(length))
172*cfb92d14SAndroid Build Coastguard Worker
173*cfb92d14SAndroid Build Coastguard Worker
174*cfb92d14SAndroid Build Coastguard Workerdef any_response():
175*cfb92d14SAndroid Build Coastguard Worker    length = random.randint(4, 8)
176*cfb92d14SAndroid Build Coastguard Worker    return bytearray(random.getrandbits(8) for _ in range(length))
177*cfb92d14SAndroid Build Coastguard Worker
178*cfb92d14SAndroid Build Coastguard Worker
179*cfb92d14SAndroid Build Coastguard Workerdef any_link_layer_frame_counter():
180*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(32)
181*cfb92d14SAndroid Build Coastguard Worker
182*cfb92d14SAndroid Build Coastguard Worker
183*cfb92d14SAndroid Build Coastguard Workerdef any_mle_frame_counter():
184*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(32)
185*cfb92d14SAndroid Build Coastguard Worker
186*cfb92d14SAndroid Build Coastguard Worker
187*cfb92d14SAndroid Build Coastguard Workerdef any_output():
188*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(2)
189*cfb92d14SAndroid Build Coastguard Worker
190*cfb92d14SAndroid Build Coastguard Worker
191*cfb92d14SAndroid Build Coastguard Workerdef any_input():
192*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(2)
193*cfb92d14SAndroid Build Coastguard Worker
194*cfb92d14SAndroid Build Coastguard Worker
195*cfb92d14SAndroid Build Coastguard Workerdef any_route():
196*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(4)
197*cfb92d14SAndroid Build Coastguard Worker
198*cfb92d14SAndroid Build Coastguard Worker
199*cfb92d14SAndroid Build Coastguard Workerdef any_router_id_mask():
200*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(64)
201*cfb92d14SAndroid Build Coastguard Worker
202*cfb92d14SAndroid Build Coastguard Worker
203*cfb92d14SAndroid Build Coastguard Workerdef any_link_quality_and_route_data(length=None):
204*cfb92d14SAndroid Build Coastguard Worker    length = length if length is not None else random.randint(0, 63)
205*cfb92d14SAndroid Build Coastguard Worker    return [random.getrandbits(8) for _ in range(length)]
206*cfb92d14SAndroid Build Coastguard Worker
207*cfb92d14SAndroid Build Coastguard Worker
208*cfb92d14SAndroid Build Coastguard Workerdef any_partition_id():
209*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(32)
210*cfb92d14SAndroid Build Coastguard Worker
211*cfb92d14SAndroid Build Coastguard Worker
212*cfb92d14SAndroid Build Coastguard Workerdef any_weighting():
213*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
214*cfb92d14SAndroid Build Coastguard Worker
215*cfb92d14SAndroid Build Coastguard Worker
216*cfb92d14SAndroid Build Coastguard Workerdef any_data_version():
217*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
218*cfb92d14SAndroid Build Coastguard Worker
219*cfb92d14SAndroid Build Coastguard Worker
220*cfb92d14SAndroid Build Coastguard Workerdef any_stable_data_version():
221*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
222*cfb92d14SAndroid Build Coastguard Worker
223*cfb92d14SAndroid Build Coastguard Worker
224*cfb92d14SAndroid Build Coastguard Workerdef any_leader_router_id():
225*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
226*cfb92d14SAndroid Build Coastguard Worker
227*cfb92d14SAndroid Build Coastguard Worker
228*cfb92d14SAndroid Build Coastguard Workerscan_mask_map = {
229*cfb92d14SAndroid Build Coastguard Worker    0x00: {
230*cfb92d14SAndroid Build Coastguard Worker        "router": 0,
231*cfb92d14SAndroid Build Coastguard Worker        "end_device": 0
232*cfb92d14SAndroid Build Coastguard Worker    },
233*cfb92d14SAndroid Build Coastguard Worker    0x40: {
234*cfb92d14SAndroid Build Coastguard Worker        "router": 0,
235*cfb92d14SAndroid Build Coastguard Worker        "end_device": 1
236*cfb92d14SAndroid Build Coastguard Worker    },
237*cfb92d14SAndroid Build Coastguard Worker    0x80: {
238*cfb92d14SAndroid Build Coastguard Worker        "router": 1,
239*cfb92d14SAndroid Build Coastguard Worker        "end_device": 0
240*cfb92d14SAndroid Build Coastguard Worker    },
241*cfb92d14SAndroid Build Coastguard Worker    0xC0: {
242*cfb92d14SAndroid Build Coastguard Worker        "router": 1,
243*cfb92d14SAndroid Build Coastguard Worker        "end_device": 1
244*cfb92d14SAndroid Build Coastguard Worker    },
245*cfb92d14SAndroid Build Coastguard Worker}
246*cfb92d14SAndroid Build Coastguard Worker
247*cfb92d14SAndroid Build Coastguard Worker
248*cfb92d14SAndroid Build Coastguard Workerdef any_scan_mask_router():
249*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(1)
250*cfb92d14SAndroid Build Coastguard Worker
251*cfb92d14SAndroid Build Coastguard Worker
252*cfb92d14SAndroid Build Coastguard Workerdef any_scan_mask_end_device():
253*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(1)
254*cfb92d14SAndroid Build Coastguard Worker
255*cfb92d14SAndroid Build Coastguard Worker
256*cfb92d14SAndroid Build Coastguard Workerdef any_scan_mask():
257*cfb92d14SAndroid Build Coastguard Worker    return (random.getrandbits(2) << 6)
258*cfb92d14SAndroid Build Coastguard Worker
259*cfb92d14SAndroid Build Coastguard Worker
260*cfb92d14SAndroid Build Coastguard Workerdef any_link_margin():
261*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
262*cfb92d14SAndroid Build Coastguard Worker
263*cfb92d14SAndroid Build Coastguard Worker
264*cfb92d14SAndroid Build Coastguard Workerdef any_status():
265*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
266*cfb92d14SAndroid Build Coastguard Worker
267*cfb92d14SAndroid Build Coastguard Worker
268*cfb92d14SAndroid Build Coastguard Workerdef any_version():
269*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(16)
270*cfb92d14SAndroid Build Coastguard Worker
271*cfb92d14SAndroid Build Coastguard Worker
272*cfb92d14SAndroid Build Coastguard Workerdef any_channel_page():
273*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
274*cfb92d14SAndroid Build Coastguard Worker
275*cfb92d14SAndroid Build Coastguard Worker
276*cfb92d14SAndroid Build Coastguard Workerdef any_channel():
277*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(16)
278*cfb92d14SAndroid Build Coastguard Worker
279*cfb92d14SAndroid Build Coastguard Worker
280*cfb92d14SAndroid Build Coastguard Workerdef any_pan_id():
281*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(16)
282*cfb92d14SAndroid Build Coastguard Worker
283*cfb92d14SAndroid Build Coastguard Worker
284*cfb92d14SAndroid Build Coastguard Workerdef any_timestamp_seconds():
285*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(48)
286*cfb92d14SAndroid Build Coastguard Worker
287*cfb92d14SAndroid Build Coastguard Worker
288*cfb92d14SAndroid Build Coastguard Workerdef any_timestamp_ticks():
289*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(15)
290*cfb92d14SAndroid Build Coastguard Worker
291*cfb92d14SAndroid Build Coastguard Worker
292*cfb92d14SAndroid Build Coastguard Workerdef any_u():
293*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(1)
294*cfb92d14SAndroid Build Coastguard Worker
295*cfb92d14SAndroid Build Coastguard Worker
296*cfb92d14SAndroid Build Coastguard Workerdef any_pp():
297*cfb92d14SAndroid Build Coastguard Worker    return (random.getrandbits(2) << 6)
298*cfb92d14SAndroid Build Coastguard Worker
299*cfb92d14SAndroid Build Coastguard Worker
300*cfb92d14SAndroid Build Coastguard Workerdef any_link_quality_3():
301*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
302*cfb92d14SAndroid Build Coastguard Worker
303*cfb92d14SAndroid Build Coastguard Worker
304*cfb92d14SAndroid Build Coastguard Workerdef any_link_quality_2():
305*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
306*cfb92d14SAndroid Build Coastguard Worker
307*cfb92d14SAndroid Build Coastguard Worker
308*cfb92d14SAndroid Build Coastguard Workerdef any_link_quality_1():
309*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
310*cfb92d14SAndroid Build Coastguard Worker
311*cfb92d14SAndroid Build Coastguard Worker
312*cfb92d14SAndroid Build Coastguard Workerdef any_leader_cost():
313*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
314*cfb92d14SAndroid Build Coastguard Worker
315*cfb92d14SAndroid Build Coastguard Worker
316*cfb92d14SAndroid Build Coastguard Workerdef any_id_sequence():
317*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
318*cfb92d14SAndroid Build Coastguard Worker
319*cfb92d14SAndroid Build Coastguard Worker
320*cfb92d14SAndroid Build Coastguard Workerdef any_active_routers():
321*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
322*cfb92d14SAndroid Build Coastguard Worker
323*cfb92d14SAndroid Build Coastguard Worker
324*cfb92d14SAndroid Build Coastguard Workerdef any_sed_buffer_size():
325*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(16)
326*cfb92d14SAndroid Build Coastguard Worker
327*cfb92d14SAndroid Build Coastguard Worker
328*cfb92d14SAndroid Build Coastguard Workerdef any_sed_datagram_count():
329*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(8)
330*cfb92d14SAndroid Build Coastguard Worker
331*cfb92d14SAndroid Build Coastguard Worker
332*cfb92d14SAndroid Build Coastguard Workerdef any_tlvs(length=None):
333*cfb92d14SAndroid Build Coastguard Worker    if length is None:
334*cfb92d14SAndroid Build Coastguard Worker        length = random.randint(0, 16)
335*cfb92d14SAndroid Build Coastguard Worker
336*cfb92d14SAndroid Build Coastguard Worker    return [random.getrandbits(8) for _ in range(length)]
337*cfb92d14SAndroid Build Coastguard Worker
338*cfb92d14SAndroid Build Coastguard Worker
339*cfb92d14SAndroid Build Coastguard Workerdef any_cid():
340*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(4)
341*cfb92d14SAndroid Build Coastguard Worker
342*cfb92d14SAndroid Build Coastguard Worker
343*cfb92d14SAndroid Build Coastguard Workerdef any_iid():
344*cfb92d14SAndroid Build Coastguard Worker    return bytearray([random.getrandbits(8) for _ in range(8)])
345*cfb92d14SAndroid Build Coastguard Worker
346*cfb92d14SAndroid Build Coastguard Worker
347*cfb92d14SAndroid Build Coastguard Workerdef any_ipv6_address():
348*cfb92d14SAndroid Build Coastguard Worker    return bytearray([random.getrandbits(8) for _ in range(16)])
349*cfb92d14SAndroid Build Coastguard Worker
350*cfb92d14SAndroid Build Coastguard Worker
351*cfb92d14SAndroid Build Coastguard Workerdef any_addresses():
352*cfb92d14SAndroid Build Coastguard Worker    addresses = [mle.AddressCompressed(any_cid(), any_iid()), mle.AddressFull(any_ipv6_address())]
353*cfb92d14SAndroid Build Coastguard Worker
354*cfb92d14SAndroid Build Coastguard Worker    return addresses
355*cfb92d14SAndroid Build Coastguard Worker
356*cfb92d14SAndroid Build Coastguard Worker
357*cfb92d14SAndroid Build Coastguard Workerdef any_key_id_mode():
358*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(2)
359*cfb92d14SAndroid Build Coastguard Worker
360*cfb92d14SAndroid Build Coastguard Worker
361*cfb92d14SAndroid Build Coastguard Workerdef any_security_level():
362*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(3)
363*cfb92d14SAndroid Build Coastguard Worker
364*cfb92d14SAndroid Build Coastguard Worker
365*cfb92d14SAndroid Build Coastguard Workerdef any_frame_counter():
366*cfb92d14SAndroid Build Coastguard Worker    return random.getrandbits(32)
367*cfb92d14SAndroid Build Coastguard Worker
368*cfb92d14SAndroid Build Coastguard Worker
369*cfb92d14SAndroid Build Coastguard Workerdef any_key_id(key_id_mode):
370*cfb92d14SAndroid Build Coastguard Worker    if key_id_mode == 0:
371*cfb92d14SAndroid Build Coastguard Worker        length = 0
372*cfb92d14SAndroid Build Coastguard Worker    elif key_id_mode == 1:
373*cfb92d14SAndroid Build Coastguard Worker        length = 1
374*cfb92d14SAndroid Build Coastguard Worker    elif key_id_mode == 2:
375*cfb92d14SAndroid Build Coastguard Worker        length = 5
376*cfb92d14SAndroid Build Coastguard Worker    elif key_id_mode == 3:
377*cfb92d14SAndroid Build Coastguard Worker        length = 9
378*cfb92d14SAndroid Build Coastguard Worker
379*cfb92d14SAndroid Build Coastguard Worker    return bytearray([random.getrandbits(8) for _ in range(length)])
380*cfb92d14SAndroid Build Coastguard Worker
381*cfb92d14SAndroid Build Coastguard Worker
382*cfb92d14SAndroid Build Coastguard Workerdef any_eui64():
383*cfb92d14SAndroid Build Coastguard Worker    return bytearray([random.getrandbits(8) for _ in range(8)])
384*cfb92d14SAndroid Build Coastguard Worker
385*cfb92d14SAndroid Build Coastguard Worker
386*cfb92d14SAndroid Build Coastguard Workerclass TestSourceAddress(unittest.TestCase):
387*cfb92d14SAndroid Build Coastguard Worker
388*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_address_value_when_address_property_is_called(self):
389*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
390*cfb92d14SAndroid Build Coastguard Worker        address = any_address()
391*cfb92d14SAndroid Build Coastguard Worker
392*cfb92d14SAndroid Build Coastguard Worker        source_address = mle.SourceAddress(address)
393*cfb92d14SAndroid Build Coastguard Worker
394*cfb92d14SAndroid Build Coastguard Worker        # WHEN
395*cfb92d14SAndroid Build Coastguard Worker        actual_address = source_address.address
396*cfb92d14SAndroid Build Coastguard Worker
397*cfb92d14SAndroid Build Coastguard Worker        # THEN
398*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(address, actual_address)
399*cfb92d14SAndroid Build Coastguard Worker
400*cfb92d14SAndroid Build Coastguard Worker
401*cfb92d14SAndroid Build Coastguard Workerclass TestSourceAddressFactory(unittest.TestCase):
402*cfb92d14SAndroid Build Coastguard Worker
403*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_SourceAddress_from_bytearray_when_parse_method_is_called(self):
404*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
405*cfb92d14SAndroid Build Coastguard Worker        address = any_address()
406*cfb92d14SAndroid Build Coastguard Worker
407*cfb92d14SAndroid Build Coastguard Worker        factory = mle.SourceAddressFactory()
408*cfb92d14SAndroid Build Coastguard Worker
409*cfb92d14SAndroid Build Coastguard Worker        data = struct.pack(">H", address)
410*cfb92d14SAndroid Build Coastguard Worker
411*cfb92d14SAndroid Build Coastguard Worker        # WHEN
412*cfb92d14SAndroid Build Coastguard Worker        actual_source_address = factory.parse(io.BytesIO(data), dict())
413*cfb92d14SAndroid Build Coastguard Worker
414*cfb92d14SAndroid Build Coastguard Worker        # THEN
415*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_source_address, mle.SourceAddress))
416*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(address, actual_source_address.address)
417*cfb92d14SAndroid Build Coastguard Worker
418*cfb92d14SAndroid Build Coastguard Worker
419*cfb92d14SAndroid Build Coastguard Workerclass TestMode(unittest.TestCase):
420*cfb92d14SAndroid Build Coastguard Worker
421*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_receiver_value_when_receiver_property_is_called(self):
422*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
423*cfb92d14SAndroid Build Coastguard Worker        receiver = any_receiver()
424*cfb92d14SAndroid Build Coastguard Worker
425*cfb92d14SAndroid Build Coastguard Worker        mode = mle.Mode(receiver, any_secure(), any_device_type(), any_network_data())
426*cfb92d14SAndroid Build Coastguard Worker
427*cfb92d14SAndroid Build Coastguard Worker        # WHEN
428*cfb92d14SAndroid Build Coastguard Worker        actual_receiver = mode.receiver
429*cfb92d14SAndroid Build Coastguard Worker
430*cfb92d14SAndroid Build Coastguard Worker        # THEN
431*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(receiver, actual_receiver)
432*cfb92d14SAndroid Build Coastguard Worker
433*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_secure_value_when_secure_property_is_called(self):
434*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
435*cfb92d14SAndroid Build Coastguard Worker        secure = any_secure()
436*cfb92d14SAndroid Build Coastguard Worker
437*cfb92d14SAndroid Build Coastguard Worker        mode = mle.Mode(any_receiver(), secure, any_device_type(), any_network_data())
438*cfb92d14SAndroid Build Coastguard Worker
439*cfb92d14SAndroid Build Coastguard Worker        # WHEN
440*cfb92d14SAndroid Build Coastguard Worker        actual_secure = mode.secure
441*cfb92d14SAndroid Build Coastguard Worker
442*cfb92d14SAndroid Build Coastguard Worker        # THEN
443*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(secure, actual_secure)
444*cfb92d14SAndroid Build Coastguard Worker
445*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_device_type_value_when_device_type_property_is_called(self):
446*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
447*cfb92d14SAndroid Build Coastguard Worker        device_type = any_device_type()
448*cfb92d14SAndroid Build Coastguard Worker
449*cfb92d14SAndroid Build Coastguard Worker        mode = mle.Mode(any_receiver(), any_secure(), device_type, any_network_data())
450*cfb92d14SAndroid Build Coastguard Worker
451*cfb92d14SAndroid Build Coastguard Worker        # WHEN
452*cfb92d14SAndroid Build Coastguard Worker        actual_device_type = mode.device_type
453*cfb92d14SAndroid Build Coastguard Worker
454*cfb92d14SAndroid Build Coastguard Worker        # THEN
455*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(device_type, actual_device_type)
456*cfb92d14SAndroid Build Coastguard Worker
457*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_network_data_value_when_network_data_property_is_called(self):
458*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
459*cfb92d14SAndroid Build Coastguard Worker        network_data = any_network_data()
460*cfb92d14SAndroid Build Coastguard Worker
461*cfb92d14SAndroid Build Coastguard Worker        mode = mle.Mode(any_receiver(), any_secure(), any_device_type(), network_data)
462*cfb92d14SAndroid Build Coastguard Worker
463*cfb92d14SAndroid Build Coastguard Worker        # WHEN
464*cfb92d14SAndroid Build Coastguard Worker        actual_network_data = mode.network_data
465*cfb92d14SAndroid Build Coastguard Worker
466*cfb92d14SAndroid Build Coastguard Worker        # THEN
467*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(network_data, actual_network_data)
468*cfb92d14SAndroid Build Coastguard Worker
469*cfb92d14SAndroid Build Coastguard Worker
470*cfb92d14SAndroid Build Coastguard Workerclass TestModeFactory(unittest.TestCase):
471*cfb92d14SAndroid Build Coastguard Worker
472*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Mode_from_bytearray_when_parse_method_is_called(self):
473*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
474*cfb92d14SAndroid Build Coastguard Worker        mode = any_mode()
475*cfb92d14SAndroid Build Coastguard Worker
476*cfb92d14SAndroid Build Coastguard Worker        factory = mle.ModeFactory()
477*cfb92d14SAndroid Build Coastguard Worker
478*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([mode])
479*cfb92d14SAndroid Build Coastguard Worker
480*cfb92d14SAndroid Build Coastguard Worker        # WHEN
481*cfb92d14SAndroid Build Coastguard Worker        actual_mode = factory.parse(io.BytesIO(data), dict())
482*cfb92d14SAndroid Build Coastguard Worker
483*cfb92d14SAndroid Build Coastguard Worker        # THEN
484*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_mode, mle.Mode))
485*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mode_map[mode]["receiver"], actual_mode.receiver)
486*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mode_map[mode]["secure"], actual_mode.secure)
487*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mode_map[mode]["device_type"], actual_mode.device_type)
488*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mode_map[mode]["network_data"], actual_mode.network_data)
489*cfb92d14SAndroid Build Coastguard Worker
490*cfb92d14SAndroid Build Coastguard Worker
491*cfb92d14SAndroid Build Coastguard Workerclass TestTimeout(unittest.TestCase):
492*cfb92d14SAndroid Build Coastguard Worker
493*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_timeout_value_when_timeout_property_is_called(self):
494*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
495*cfb92d14SAndroid Build Coastguard Worker        timeout = any_timeout()
496*cfb92d14SAndroid Build Coastguard Worker
497*cfb92d14SAndroid Build Coastguard Worker        timeout_obj = mle.Timeout(timeout)
498*cfb92d14SAndroid Build Coastguard Worker
499*cfb92d14SAndroid Build Coastguard Worker        # WHEN
500*cfb92d14SAndroid Build Coastguard Worker        actual_timeout = timeout_obj.timeout
501*cfb92d14SAndroid Build Coastguard Worker
502*cfb92d14SAndroid Build Coastguard Worker        # THEN
503*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(timeout, actual_timeout)
504*cfb92d14SAndroid Build Coastguard Worker
505*cfb92d14SAndroid Build Coastguard Worker
506*cfb92d14SAndroid Build Coastguard Workerclass TestTimeoutFactory(unittest.TestCase):
507*cfb92d14SAndroid Build Coastguard Worker
508*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Timeout_from_bytearray_when_parse_method_is_called(self):
509*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
510*cfb92d14SAndroid Build Coastguard Worker        timeout = any_timeout()
511*cfb92d14SAndroid Build Coastguard Worker
512*cfb92d14SAndroid Build Coastguard Worker        factory = mle.TimeoutFactory()
513*cfb92d14SAndroid Build Coastguard Worker
514*cfb92d14SAndroid Build Coastguard Worker        data = struct.pack(">I", timeout)
515*cfb92d14SAndroid Build Coastguard Worker
516*cfb92d14SAndroid Build Coastguard Worker        # WHEN
517*cfb92d14SAndroid Build Coastguard Worker        actual_timeout = factory.parse(io.BytesIO(data), dict())
518*cfb92d14SAndroid Build Coastguard Worker
519*cfb92d14SAndroid Build Coastguard Worker        # THEN
520*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_timeout, mle.Timeout))
521*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(timeout, actual_timeout.timeout)
522*cfb92d14SAndroid Build Coastguard Worker
523*cfb92d14SAndroid Build Coastguard Worker
524*cfb92d14SAndroid Build Coastguard Workerclass TestChallenge(unittest.TestCase):
525*cfb92d14SAndroid Build Coastguard Worker
526*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_challenge_value_when_challenge_property_is_called(self):
527*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
528*cfb92d14SAndroid Build Coastguard Worker        challenge = any_challenge()
529*cfb92d14SAndroid Build Coastguard Worker
530*cfb92d14SAndroid Build Coastguard Worker        challenge_obj = mle.Challenge(challenge)
531*cfb92d14SAndroid Build Coastguard Worker
532*cfb92d14SAndroid Build Coastguard Worker        # WHEN
533*cfb92d14SAndroid Build Coastguard Worker        actual_challenge = challenge_obj.challenge
534*cfb92d14SAndroid Build Coastguard Worker
535*cfb92d14SAndroid Build Coastguard Worker        # THEN
536*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(challenge, actual_challenge)
537*cfb92d14SAndroid Build Coastguard Worker
538*cfb92d14SAndroid Build Coastguard Worker
539*cfb92d14SAndroid Build Coastguard Workerclass TestChallengeFactory(unittest.TestCase):
540*cfb92d14SAndroid Build Coastguard Worker
541*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Challenge_from_bytearray_when_parse_method_is_called(self):
542*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
543*cfb92d14SAndroid Build Coastguard Worker        challenge = any_challenge()
544*cfb92d14SAndroid Build Coastguard Worker
545*cfb92d14SAndroid Build Coastguard Worker        factory = mle.ChallengeFactory()
546*cfb92d14SAndroid Build Coastguard Worker
547*cfb92d14SAndroid Build Coastguard Worker        data = challenge
548*cfb92d14SAndroid Build Coastguard Worker
549*cfb92d14SAndroid Build Coastguard Worker        # WHEN
550*cfb92d14SAndroid Build Coastguard Worker        actual_challenge = factory.parse(io.BytesIO(data), dict())
551*cfb92d14SAndroid Build Coastguard Worker
552*cfb92d14SAndroid Build Coastguard Worker        # THEN
553*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_challenge, mle.Challenge))
554*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(challenge, actual_challenge.challenge)
555*cfb92d14SAndroid Build Coastguard Worker
556*cfb92d14SAndroid Build Coastguard Worker
557*cfb92d14SAndroid Build Coastguard Workerclass TestResponse(unittest.TestCase):
558*cfb92d14SAndroid Build Coastguard Worker
559*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_response_value_when_response_property_is_called(self):
560*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
561*cfb92d14SAndroid Build Coastguard Worker        response = any_response()
562*cfb92d14SAndroid Build Coastguard Worker
563*cfb92d14SAndroid Build Coastguard Worker        response_obj = mle.Response(response)
564*cfb92d14SAndroid Build Coastguard Worker
565*cfb92d14SAndroid Build Coastguard Worker        # WHEN
566*cfb92d14SAndroid Build Coastguard Worker        actual_response = response_obj.response
567*cfb92d14SAndroid Build Coastguard Worker
568*cfb92d14SAndroid Build Coastguard Worker        # THEN
569*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(response, actual_response)
570*cfb92d14SAndroid Build Coastguard Worker
571*cfb92d14SAndroid Build Coastguard Worker
572*cfb92d14SAndroid Build Coastguard Workerclass TestResponseFactory(unittest.TestCase):
573*cfb92d14SAndroid Build Coastguard Worker
574*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Challenge_from_bytearray_when_parse_method_is_called(self):
575*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
576*cfb92d14SAndroid Build Coastguard Worker        response = any_response()
577*cfb92d14SAndroid Build Coastguard Worker
578*cfb92d14SAndroid Build Coastguard Worker        factory = mle.ResponseFactory()
579*cfb92d14SAndroid Build Coastguard Worker
580*cfb92d14SAndroid Build Coastguard Worker        data = response
581*cfb92d14SAndroid Build Coastguard Worker
582*cfb92d14SAndroid Build Coastguard Worker        # WHEN
583*cfb92d14SAndroid Build Coastguard Worker        actual_response = factory.parse(io.BytesIO(data), dict())
584*cfb92d14SAndroid Build Coastguard Worker
585*cfb92d14SAndroid Build Coastguard Worker        # THEN
586*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_response, mle.Response))
587*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(response, actual_response.response)
588*cfb92d14SAndroid Build Coastguard Worker
589*cfb92d14SAndroid Build Coastguard Worker
590*cfb92d14SAndroid Build Coastguard Workerclass TestLinkLayerFrameCounter(unittest.TestCase):
591*cfb92d14SAndroid Build Coastguard Worker
592*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_frame_counter_value_when_frame_counter_property_is_called(self):
593*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
594*cfb92d14SAndroid Build Coastguard Worker        link_layer_frame_counter = any_link_layer_frame_counter()
595*cfb92d14SAndroid Build Coastguard Worker
596*cfb92d14SAndroid Build Coastguard Worker        link_layer_frame_counter_obj = mle.LinkLayerFrameCounter(link_layer_frame_counter)
597*cfb92d14SAndroid Build Coastguard Worker
598*cfb92d14SAndroid Build Coastguard Worker        # WHEN
599*cfb92d14SAndroid Build Coastguard Worker        actual_link_layer_frame_counter = link_layer_frame_counter_obj.frame_counter
600*cfb92d14SAndroid Build Coastguard Worker
601*cfb92d14SAndroid Build Coastguard Worker        # THEN
602*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_layer_frame_counter, actual_link_layer_frame_counter)
603*cfb92d14SAndroid Build Coastguard Worker
604*cfb92d14SAndroid Build Coastguard Worker
605*cfb92d14SAndroid Build Coastguard Workerclass TestLinkLayerFrameCounterFactory(unittest.TestCase):
606*cfb92d14SAndroid Build Coastguard Worker
607*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_LinkLayerFrameCounter_from_bytearray_when_parse_method_is_called(self):
608*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
609*cfb92d14SAndroid Build Coastguard Worker        link_layer_frame_counter = any_link_layer_frame_counter()
610*cfb92d14SAndroid Build Coastguard Worker
611*cfb92d14SAndroid Build Coastguard Worker        factory = mle.LinkLayerFrameCounterFactory()
612*cfb92d14SAndroid Build Coastguard Worker
613*cfb92d14SAndroid Build Coastguard Worker        data = struct.pack(">I", link_layer_frame_counter)
614*cfb92d14SAndroid Build Coastguard Worker
615*cfb92d14SAndroid Build Coastguard Worker        # WHEN
616*cfb92d14SAndroid Build Coastguard Worker        actual_link_layer_frame_counter = factory.parse(io.BytesIO(data), dict())
617*cfb92d14SAndroid Build Coastguard Worker
618*cfb92d14SAndroid Build Coastguard Worker        # THEN
619*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_link_layer_frame_counter, mle.LinkLayerFrameCounter))
620*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_layer_frame_counter, actual_link_layer_frame_counter.frame_counter)
621*cfb92d14SAndroid Build Coastguard Worker
622*cfb92d14SAndroid Build Coastguard Worker
623*cfb92d14SAndroid Build Coastguard Workerclass TestMleFrameCounter(unittest.TestCase):
624*cfb92d14SAndroid Build Coastguard Worker
625*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_frame_counter_value_when_frame_counter_property_is_called(self):
626*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
627*cfb92d14SAndroid Build Coastguard Worker        mle_frame_counter = any_mle_frame_counter()
628*cfb92d14SAndroid Build Coastguard Worker
629*cfb92d14SAndroid Build Coastguard Worker        mle_frame_counter_obj = mle.MleFrameCounter(mle_frame_counter)
630*cfb92d14SAndroid Build Coastguard Worker
631*cfb92d14SAndroid Build Coastguard Worker        # WHEN
632*cfb92d14SAndroid Build Coastguard Worker        actual_mle_frame_counter = mle_frame_counter_obj.frame_counter
633*cfb92d14SAndroid Build Coastguard Worker
634*cfb92d14SAndroid Build Coastguard Worker        # THEN
635*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle_frame_counter, actual_mle_frame_counter)
636*cfb92d14SAndroid Build Coastguard Worker
637*cfb92d14SAndroid Build Coastguard Worker
638*cfb92d14SAndroid Build Coastguard Workerclass TestMleFrameCounterFactory(unittest.TestCase):
639*cfb92d14SAndroid Build Coastguard Worker
640*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_MleFrameCounter_from_bytearray_when_parse_method_is_called(self):
641*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
642*cfb92d14SAndroid Build Coastguard Worker        mle_frame_counter = any_mle_frame_counter()
643*cfb92d14SAndroid Build Coastguard Worker
644*cfb92d14SAndroid Build Coastguard Worker        factory = mle.MleFrameCounterFactory()
645*cfb92d14SAndroid Build Coastguard Worker
646*cfb92d14SAndroid Build Coastguard Worker        data = struct.pack(">I", mle_frame_counter)
647*cfb92d14SAndroid Build Coastguard Worker
648*cfb92d14SAndroid Build Coastguard Worker        # WHEN
649*cfb92d14SAndroid Build Coastguard Worker        actual_mle_frame_counter = factory.parse(io.BytesIO(data), dict())
650*cfb92d14SAndroid Build Coastguard Worker
651*cfb92d14SAndroid Build Coastguard Worker        # THEN
652*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_mle_frame_counter, mle.MleFrameCounter))
653*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle_frame_counter, actual_mle_frame_counter.frame_counter)
654*cfb92d14SAndroid Build Coastguard Worker
655*cfb92d14SAndroid Build Coastguard Worker
656*cfb92d14SAndroid Build Coastguard Workerclass TestLinkQualityAndRouteData(unittest.TestCase):
657*cfb92d14SAndroid Build Coastguard Worker
658*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_output_value_when_output_property_is_called(self):
659*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
660*cfb92d14SAndroid Build Coastguard Worker        output = any_output()
661*cfb92d14SAndroid Build Coastguard Worker
662*cfb92d14SAndroid Build Coastguard Worker        lqrd = mle.LinkQualityAndRouteData(output, any_input(), any_route())
663*cfb92d14SAndroid Build Coastguard Worker
664*cfb92d14SAndroid Build Coastguard Worker        # WHEN
665*cfb92d14SAndroid Build Coastguard Worker        actual_output = lqrd.output
666*cfb92d14SAndroid Build Coastguard Worker
667*cfb92d14SAndroid Build Coastguard Worker        # THEN
668*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(output, actual_output)
669*cfb92d14SAndroid Build Coastguard Worker
670*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_input_value_when_input_property_is_called(self):
671*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
672*cfb92d14SAndroid Build Coastguard Worker        _input = any_input()
673*cfb92d14SAndroid Build Coastguard Worker
674*cfb92d14SAndroid Build Coastguard Worker        lqrd = mle.LinkQualityAndRouteData(any_output(), _input, any_route())
675*cfb92d14SAndroid Build Coastguard Worker
676*cfb92d14SAndroid Build Coastguard Worker        # WHEN
677*cfb92d14SAndroid Build Coastguard Worker        actual_input = lqrd.input
678*cfb92d14SAndroid Build Coastguard Worker
679*cfb92d14SAndroid Build Coastguard Worker        # THEN
680*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(_input, actual_input)
681*cfb92d14SAndroid Build Coastguard Worker
682*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_route_value_when_route_property_is_called(self):
683*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
684*cfb92d14SAndroid Build Coastguard Worker        route = any_route()
685*cfb92d14SAndroid Build Coastguard Worker
686*cfb92d14SAndroid Build Coastguard Worker        lqrd = mle.LinkQualityAndRouteData(any_output(), any_input(), route)
687*cfb92d14SAndroid Build Coastguard Worker
688*cfb92d14SAndroid Build Coastguard Worker        # WHEN
689*cfb92d14SAndroid Build Coastguard Worker        actual_route = lqrd.route
690*cfb92d14SAndroid Build Coastguard Worker
691*cfb92d14SAndroid Build Coastguard Worker        # THEN
692*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(route, actual_route)
693*cfb92d14SAndroid Build Coastguard Worker
694*cfb92d14SAndroid Build Coastguard Worker
695*cfb92d14SAndroid Build Coastguard Workerclass TestLinkQualityAndRouteDataFactory(unittest.TestCase):
696*cfb92d14SAndroid Build Coastguard Worker
697*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_LinkQualityAndRouteData_from_well_known_byte_when_parse_method_is_called(self):
698*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
699*cfb92d14SAndroid Build Coastguard Worker        factory = mle.LinkQualityAndRouteDataFactory()
700*cfb92d14SAndroid Build Coastguard Worker
701*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([0x66])
702*cfb92d14SAndroid Build Coastguard Worker
703*cfb92d14SAndroid Build Coastguard Worker        # WHEN
704*cfb92d14SAndroid Build Coastguard Worker        actual_lqrd = factory.parse(io.BytesIO(data), dict())
705*cfb92d14SAndroid Build Coastguard Worker
706*cfb92d14SAndroid Build Coastguard Worker        # THEN
707*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(1, actual_lqrd.output)
708*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(2, actual_lqrd.input)
709*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(6, actual_lqrd.route)
710*cfb92d14SAndroid Build Coastguard Worker
711*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_LinkQualityAndRouteData_from_bytearray_when_parse_method_is_called(self):
712*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
713*cfb92d14SAndroid Build Coastguard Worker        output = any_output()
714*cfb92d14SAndroid Build Coastguard Worker        _input = any_input()
715*cfb92d14SAndroid Build Coastguard Worker        route = any_route()
716*cfb92d14SAndroid Build Coastguard Worker
717*cfb92d14SAndroid Build Coastguard Worker        lqrd = (output << 6) | (_input << 4) | route
718*cfb92d14SAndroid Build Coastguard Worker
719*cfb92d14SAndroid Build Coastguard Worker        factory = mle.LinkQualityAndRouteDataFactory()
720*cfb92d14SAndroid Build Coastguard Worker
721*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([lqrd])
722*cfb92d14SAndroid Build Coastguard Worker
723*cfb92d14SAndroid Build Coastguard Worker        # WHEN
724*cfb92d14SAndroid Build Coastguard Worker        actual_lqrd = factory.parse(io.BytesIO(data), dict())
725*cfb92d14SAndroid Build Coastguard Worker
726*cfb92d14SAndroid Build Coastguard Worker        # THEN
727*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_lqrd, mle.LinkQualityAndRouteData))
728*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(output, actual_lqrd.output)
729*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(_input, actual_lqrd.input)
730*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(route, actual_lqrd.route)
731*cfb92d14SAndroid Build Coastguard Worker
732*cfb92d14SAndroid Build Coastguard Worker
733*cfb92d14SAndroid Build Coastguard Workerclass TestRoute64(unittest.TestCase):
734*cfb92d14SAndroid Build Coastguard Worker
735*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_id_sequence_value_when_id_sequence_property_is_called(self):
736*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
737*cfb92d14SAndroid Build Coastguard Worker        id_sequence = any_id_sequence()
738*cfb92d14SAndroid Build Coastguard Worker
739*cfb92d14SAndroid Build Coastguard Worker        route64_obj = mle.Route64(id_sequence, any_router_id_mask(), any_link_quality_and_route_data())
740*cfb92d14SAndroid Build Coastguard Worker
741*cfb92d14SAndroid Build Coastguard Worker        # WHEN
742*cfb92d14SAndroid Build Coastguard Worker        actual_id_sequence = route64_obj.id_sequence
743*cfb92d14SAndroid Build Coastguard Worker
744*cfb92d14SAndroid Build Coastguard Worker        # THEN
745*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(id_sequence, actual_id_sequence)
746*cfb92d14SAndroid Build Coastguard Worker
747*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_router_id_mask_value_when_router_id_mask_property_is_called(self):
748*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
749*cfb92d14SAndroid Build Coastguard Worker        router_id_mask = any_router_id_mask()
750*cfb92d14SAndroid Build Coastguard Worker
751*cfb92d14SAndroid Build Coastguard Worker        route64_obj = mle.Route64(any_id_sequence(), router_id_mask, any_link_quality_and_route_data())
752*cfb92d14SAndroid Build Coastguard Worker
753*cfb92d14SAndroid Build Coastguard Worker        # WHEN
754*cfb92d14SAndroid Build Coastguard Worker        actual_router_id_mask = route64_obj.router_id_mask
755*cfb92d14SAndroid Build Coastguard Worker
756*cfb92d14SAndroid Build Coastguard Worker        # THEN
757*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(router_id_mask, actual_router_id_mask)
758*cfb92d14SAndroid Build Coastguard Worker
759*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_link_quality_and_route_data_value_when_link_quality_and_route_data_property_is_called(self):
760*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
761*cfb92d14SAndroid Build Coastguard Worker        link_quality_and_route_data = any_link_quality_and_route_data()
762*cfb92d14SAndroid Build Coastguard Worker
763*cfb92d14SAndroid Build Coastguard Worker        route64_obj = mle.Route64(any_id_sequence(), any_router_id_mask(), link_quality_and_route_data)
764*cfb92d14SAndroid Build Coastguard Worker
765*cfb92d14SAndroid Build Coastguard Worker        # WHEN
766*cfb92d14SAndroid Build Coastguard Worker        actual_link_quality_and_route_data = route64_obj.link_quality_and_route_data
767*cfb92d14SAndroid Build Coastguard Worker
768*cfb92d14SAndroid Build Coastguard Worker        # THEN
769*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_quality_and_route_data, actual_link_quality_and_route_data)
770*cfb92d14SAndroid Build Coastguard Worker
771*cfb92d14SAndroid Build Coastguard Worker
772*cfb92d14SAndroid Build Coastguard Workerclass TestRoute64Factory(unittest.TestCase):
773*cfb92d14SAndroid Build Coastguard Worker
774*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Route64_from_bytearray_when_parse_method_is_called(self):
775*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
776*cfb92d14SAndroid Build Coastguard Worker        class DummyLQRDFactory:
777*cfb92d14SAndroid Build Coastguard Worker
778*cfb92d14SAndroid Build Coastguard Worker            def parse(self, data, context):
779*cfb92d14SAndroid Build Coastguard Worker                return ord(data.read(1))
780*cfb92d14SAndroid Build Coastguard Worker
781*cfb92d14SAndroid Build Coastguard Worker        id_sequence = any_id_sequence()
782*cfb92d14SAndroid Build Coastguard Worker        router_id_mask = any_router_id_mask()
783*cfb92d14SAndroid Build Coastguard Worker
784*cfb92d14SAndroid Build Coastguard Worker        router_count = 0
785*cfb92d14SAndroid Build Coastguard Worker        for i in range(64):
786*cfb92d14SAndroid Build Coastguard Worker            router_count += (router_id_mask >> i) & 0x01
787*cfb92d14SAndroid Build Coastguard Worker
788*cfb92d14SAndroid Build Coastguard Worker        link_quality_and_route_data = any_link_quality_and_route_data(router_count)
789*cfb92d14SAndroid Build Coastguard Worker
790*cfb92d14SAndroid Build Coastguard Worker        factory = mle.Route64Factory(DummyLQRDFactory())
791*cfb92d14SAndroid Build Coastguard Worker
792*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([id_sequence]) + struct.pack(">Q", router_id_mask) + bytearray(link_quality_and_route_data)
793*cfb92d14SAndroid Build Coastguard Worker
794*cfb92d14SAndroid Build Coastguard Worker        # WHEN
795*cfb92d14SAndroid Build Coastguard Worker        actual_route64 = factory.parse(io.BytesIO(data), dict())
796*cfb92d14SAndroid Build Coastguard Worker
797*cfb92d14SAndroid Build Coastguard Worker        # THEN
798*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_route64, mle.Route64))
799*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(id_sequence, actual_route64.id_sequence)
800*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(router_id_mask, actual_route64.router_id_mask)
801*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual([b for b in link_quality_and_route_data], actual_route64.link_quality_and_route_data)
802*cfb92d14SAndroid Build Coastguard Worker
803*cfb92d14SAndroid Build Coastguard Worker
804*cfb92d14SAndroid Build Coastguard Workerclass TestAddress16(unittest.TestCase):
805*cfb92d14SAndroid Build Coastguard Worker
806*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_address_value_when_address_property_is_called(self):
807*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
808*cfb92d14SAndroid Build Coastguard Worker        address = any_address()
809*cfb92d14SAndroid Build Coastguard Worker
810*cfb92d14SAndroid Build Coastguard Worker        address16 = mle.Address16(address)
811*cfb92d14SAndroid Build Coastguard Worker
812*cfb92d14SAndroid Build Coastguard Worker        # WHEN
813*cfb92d14SAndroid Build Coastguard Worker        actual_address = address16.address
814*cfb92d14SAndroid Build Coastguard Worker
815*cfb92d14SAndroid Build Coastguard Worker        # THEN
816*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(address, actual_address)
817*cfb92d14SAndroid Build Coastguard Worker
818*cfb92d14SAndroid Build Coastguard Worker
819*cfb92d14SAndroid Build Coastguard Workerclass TestAddress16Factory(unittest.TestCase):
820*cfb92d14SAndroid Build Coastguard Worker
821*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Address16_from_bytearray_when_parse_method_is_called(self):
822*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
823*cfb92d14SAndroid Build Coastguard Worker        address = any_address()
824*cfb92d14SAndroid Build Coastguard Worker
825*cfb92d14SAndroid Build Coastguard Worker        factory = mle.Address16Factory()
826*cfb92d14SAndroid Build Coastguard Worker
827*cfb92d14SAndroid Build Coastguard Worker        data = struct.pack(">H", address)
828*cfb92d14SAndroid Build Coastguard Worker
829*cfb92d14SAndroid Build Coastguard Worker        # WHEN
830*cfb92d14SAndroid Build Coastguard Worker        actual_address16 = factory.parse(io.BytesIO(data), dict())
831*cfb92d14SAndroid Build Coastguard Worker
832*cfb92d14SAndroid Build Coastguard Worker        # THEN
833*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_address16, mle.Address16))
834*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(address, actual_address16.address)
835*cfb92d14SAndroid Build Coastguard Worker
836*cfb92d14SAndroid Build Coastguard Worker
837*cfb92d14SAndroid Build Coastguard Workerclass TestLeaderData(unittest.TestCase):
838*cfb92d14SAndroid Build Coastguard Worker
839*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_partition_id_value_when_partition_id_property_is_called(self):
840*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
841*cfb92d14SAndroid Build Coastguard Worker        partition_id = any_partition_id()
842*cfb92d14SAndroid Build Coastguard Worker
843*cfb92d14SAndroid Build Coastguard Worker        leader_data = mle.LeaderData(partition_id, any_weighting(), any_data_version(), any_stable_data_version(),
844*cfb92d14SAndroid Build Coastguard Worker                                     any_leader_router_id())
845*cfb92d14SAndroid Build Coastguard Worker
846*cfb92d14SAndroid Build Coastguard Worker        # WHEN
847*cfb92d14SAndroid Build Coastguard Worker        actual_partition_id = leader_data.partition_id
848*cfb92d14SAndroid Build Coastguard Worker
849*cfb92d14SAndroid Build Coastguard Worker        # THEN
850*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(partition_id, actual_partition_id)
851*cfb92d14SAndroid Build Coastguard Worker
852*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_weighting_value_when_weighting_property_is_called(self):
853*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
854*cfb92d14SAndroid Build Coastguard Worker        weighting = any_weighting()
855*cfb92d14SAndroid Build Coastguard Worker
856*cfb92d14SAndroid Build Coastguard Worker        leader_data = mle.LeaderData(any_partition_id(), weighting, any_data_version(), any_stable_data_version(),
857*cfb92d14SAndroid Build Coastguard Worker                                     any_leader_router_id())
858*cfb92d14SAndroid Build Coastguard Worker
859*cfb92d14SAndroid Build Coastguard Worker        # WHEN
860*cfb92d14SAndroid Build Coastguard Worker        actual_weighting = leader_data.weighting
861*cfb92d14SAndroid Build Coastguard Worker
862*cfb92d14SAndroid Build Coastguard Worker        # THEN
863*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(weighting, actual_weighting)
864*cfb92d14SAndroid Build Coastguard Worker
865*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_data_version_value_when_data_version_property_is_called(self):
866*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
867*cfb92d14SAndroid Build Coastguard Worker        data_version = any_data_version()
868*cfb92d14SAndroid Build Coastguard Worker
869*cfb92d14SAndroid Build Coastguard Worker        leader_data = mle.LeaderData(any_partition_id(), any_weighting(), data_version, any_stable_data_version(),
870*cfb92d14SAndroid Build Coastguard Worker                                     any_leader_router_id())
871*cfb92d14SAndroid Build Coastguard Worker
872*cfb92d14SAndroid Build Coastguard Worker        # WHEN
873*cfb92d14SAndroid Build Coastguard Worker        actual_data_version = leader_data.data_version
874*cfb92d14SAndroid Build Coastguard Worker
875*cfb92d14SAndroid Build Coastguard Worker        # THEN
876*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(data_version, actual_data_version)
877*cfb92d14SAndroid Build Coastguard Worker
878*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_stable_data_version_value_when_stable_data_version_property_is_called(self):
879*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
880*cfb92d14SAndroid Build Coastguard Worker        stable_data_version = any_stable_data_version()
881*cfb92d14SAndroid Build Coastguard Worker
882*cfb92d14SAndroid Build Coastguard Worker        leader_data = mle.LeaderData(any_partition_id(), any_weighting(), any_data_version(), stable_data_version,
883*cfb92d14SAndroid Build Coastguard Worker                                     any_leader_router_id())
884*cfb92d14SAndroid Build Coastguard Worker
885*cfb92d14SAndroid Build Coastguard Worker        # WHEN
886*cfb92d14SAndroid Build Coastguard Worker        actual_stable_data_version = leader_data.stable_data_version
887*cfb92d14SAndroid Build Coastguard Worker
888*cfb92d14SAndroid Build Coastguard Worker        # THEN
889*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(stable_data_version, actual_stable_data_version)
890*cfb92d14SAndroid Build Coastguard Worker
891*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_leader_router_id_value_when_leader_router_id_property_is_called(self):
892*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
893*cfb92d14SAndroid Build Coastguard Worker        leader_router_id = any_leader_router_id()
894*cfb92d14SAndroid Build Coastguard Worker
895*cfb92d14SAndroid Build Coastguard Worker        leader_data = mle.LeaderData(any_partition_id(), any_weighting(), any_data_version(),
896*cfb92d14SAndroid Build Coastguard Worker                                     any_stable_data_version(), leader_router_id)
897*cfb92d14SAndroid Build Coastguard Worker
898*cfb92d14SAndroid Build Coastguard Worker        # WHEN
899*cfb92d14SAndroid Build Coastguard Worker        actual_leader_router_id = leader_data.leader_router_id
900*cfb92d14SAndroid Build Coastguard Worker
901*cfb92d14SAndroid Build Coastguard Worker        # THEN
902*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(leader_router_id, actual_leader_router_id)
903*cfb92d14SAndroid Build Coastguard Worker
904*cfb92d14SAndroid Build Coastguard Worker
905*cfb92d14SAndroid Build Coastguard Workerclass TestLeaderDataFactory(unittest.TestCase):
906*cfb92d14SAndroid Build Coastguard Worker
907*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Address16_from_bytearray_when_parse_method_is_called(self):
908*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
909*cfb92d14SAndroid Build Coastguard Worker        partition_id = any_partition_id()
910*cfb92d14SAndroid Build Coastguard Worker        weighting = any_weighting()
911*cfb92d14SAndroid Build Coastguard Worker        data_version = any_data_version()
912*cfb92d14SAndroid Build Coastguard Worker        stable_data_version = any_stable_data_version()
913*cfb92d14SAndroid Build Coastguard Worker        leader_router_id = any_leader_router_id()
914*cfb92d14SAndroid Build Coastguard Worker
915*cfb92d14SAndroid Build Coastguard Worker        factory = mle.LeaderDataFactory()
916*cfb92d14SAndroid Build Coastguard Worker
917*cfb92d14SAndroid Build Coastguard Worker        data = bytearray(struct.pack(">I", partition_id)) + \
918*cfb92d14SAndroid Build Coastguard Worker            bytearray([weighting, data_version, stable_data_version, leader_router_id])
919*cfb92d14SAndroid Build Coastguard Worker
920*cfb92d14SAndroid Build Coastguard Worker        # WHEN
921*cfb92d14SAndroid Build Coastguard Worker        actual_leader_data = factory.parse(io.BytesIO(data), dict())
922*cfb92d14SAndroid Build Coastguard Worker
923*cfb92d14SAndroid Build Coastguard Worker        # THEN
924*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_leader_data, mle.LeaderData))
925*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(partition_id, actual_leader_data.partition_id)
926*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(weighting, actual_leader_data.weighting)
927*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(data_version, actual_leader_data.data_version)
928*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(stable_data_version, actual_leader_data.stable_data_version)
929*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(leader_router_id, actual_leader_data.leader_router_id)
930*cfb92d14SAndroid Build Coastguard Worker
931*cfb92d14SAndroid Build Coastguard Worker
932*cfb92d14SAndroid Build Coastguard Workerclass TestNetworkData(unittest.TestCase):
933*cfb92d14SAndroid Build Coastguard Worker
934*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_tlvs_value_when_tlvs_property_is_called(self):
935*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
936*cfb92d14SAndroid Build Coastguard Worker        tlvs = any_tlvs()
937*cfb92d14SAndroid Build Coastguard Worker
938*cfb92d14SAndroid Build Coastguard Worker        network_data = mle.NetworkData(tlvs)
939*cfb92d14SAndroid Build Coastguard Worker
940*cfb92d14SAndroid Build Coastguard Worker        # WHEN
941*cfb92d14SAndroid Build Coastguard Worker        actual_tlvs = network_data.tlvs
942*cfb92d14SAndroid Build Coastguard Worker
943*cfb92d14SAndroid Build Coastguard Worker        # THEN
944*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(tlvs, actual_tlvs)
945*cfb92d14SAndroid Build Coastguard Worker
946*cfb92d14SAndroid Build Coastguard Worker
947*cfb92d14SAndroid Build Coastguard Workerclass TestNetworkDataFactory(unittest.TestCase):
948*cfb92d14SAndroid Build Coastguard Worker
949*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_TlvRequest_from_bytearray_when_parse_method_is_called(self):
950*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
951*cfb92d14SAndroid Build Coastguard Worker        class DummyNetworkTlvsFactory:
952*cfb92d14SAndroid Build Coastguard Worker
953*cfb92d14SAndroid Build Coastguard Worker            def parse(self, data, context):
954*cfb92d14SAndroid Build Coastguard Worker                return [b for b in bytearray(data.read())]
955*cfb92d14SAndroid Build Coastguard Worker
956*cfb92d14SAndroid Build Coastguard Worker        tlvs = any_tlvs()
957*cfb92d14SAndroid Build Coastguard Worker
958*cfb92d14SAndroid Build Coastguard Worker        factory = mle.NetworkDataFactory(DummyNetworkTlvsFactory())
959*cfb92d14SAndroid Build Coastguard Worker
960*cfb92d14SAndroid Build Coastguard Worker        data = bytearray(tlvs)
961*cfb92d14SAndroid Build Coastguard Worker
962*cfb92d14SAndroid Build Coastguard Worker        # WHEN
963*cfb92d14SAndroid Build Coastguard Worker        actual_network_data = factory.parse(io.BytesIO(data), dict())
964*cfb92d14SAndroid Build Coastguard Worker
965*cfb92d14SAndroid Build Coastguard Worker        # THEN
966*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_network_data, mle.NetworkData))
967*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(tlvs, actual_network_data.tlvs)
968*cfb92d14SAndroid Build Coastguard Worker
969*cfb92d14SAndroid Build Coastguard Worker
970*cfb92d14SAndroid Build Coastguard Workerclass TestTlvRequest(unittest.TestCase):
971*cfb92d14SAndroid Build Coastguard Worker
972*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_tlvs_value_when_tlvs_property_is_called(self):
973*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
974*cfb92d14SAndroid Build Coastguard Worker        tlvs = any_tlvs()
975*cfb92d14SAndroid Build Coastguard Worker
976*cfb92d14SAndroid Build Coastguard Worker        tlv_request = mle.TlvRequest(tlvs)
977*cfb92d14SAndroid Build Coastguard Worker
978*cfb92d14SAndroid Build Coastguard Worker        # WHEN
979*cfb92d14SAndroid Build Coastguard Worker        actual_tlvs = tlv_request.tlvs
980*cfb92d14SAndroid Build Coastguard Worker
981*cfb92d14SAndroid Build Coastguard Worker        # THEN
982*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(tlvs, actual_tlvs)
983*cfb92d14SAndroid Build Coastguard Worker
984*cfb92d14SAndroid Build Coastguard Worker
985*cfb92d14SAndroid Build Coastguard Workerclass TestTlvRequestFactory(unittest.TestCase):
986*cfb92d14SAndroid Build Coastguard Worker
987*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_TlvRequest_from_bytearray_when_parse_method_is_called(self):
988*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
989*cfb92d14SAndroid Build Coastguard Worker        tlvs = any_tlvs()
990*cfb92d14SAndroid Build Coastguard Worker
991*cfb92d14SAndroid Build Coastguard Worker        factory = mle.TlvRequestFactory()
992*cfb92d14SAndroid Build Coastguard Worker
993*cfb92d14SAndroid Build Coastguard Worker        data = bytearray(tlvs)
994*cfb92d14SAndroid Build Coastguard Worker
995*cfb92d14SAndroid Build Coastguard Worker        # WHEN
996*cfb92d14SAndroid Build Coastguard Worker        actual_tlv_request = factory.parse(io.BytesIO(data), dict())
997*cfb92d14SAndroid Build Coastguard Worker
998*cfb92d14SAndroid Build Coastguard Worker        # THEN
999*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_tlv_request, mle.TlvRequest))
1000*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(tlvs, actual_tlv_request.tlvs)
1001*cfb92d14SAndroid Build Coastguard Worker
1002*cfb92d14SAndroid Build Coastguard Worker
1003*cfb92d14SAndroid Build Coastguard Workerclass TestScanMask(unittest.TestCase):
1004*cfb92d14SAndroid Build Coastguard Worker
1005*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_router_value_when_router_property_is_called(self):
1006*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1007*cfb92d14SAndroid Build Coastguard Worker        router = any_scan_mask_router()
1008*cfb92d14SAndroid Build Coastguard Worker
1009*cfb92d14SAndroid Build Coastguard Worker        scan_mask = mle.ScanMask(router, any_scan_mask_end_device())
1010*cfb92d14SAndroid Build Coastguard Worker
1011*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1012*cfb92d14SAndroid Build Coastguard Worker        actual_router = scan_mask.router
1013*cfb92d14SAndroid Build Coastguard Worker
1014*cfb92d14SAndroid Build Coastguard Worker        # THEN
1015*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(router, actual_router)
1016*cfb92d14SAndroid Build Coastguard Worker
1017*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_end_device_value_when_end_device_property_is_called(self):
1018*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1019*cfb92d14SAndroid Build Coastguard Worker        end_device = any_scan_mask_end_device()
1020*cfb92d14SAndroid Build Coastguard Worker
1021*cfb92d14SAndroid Build Coastguard Worker        scan_mask = mle.ScanMask(any_scan_mask_router(), end_device)
1022*cfb92d14SAndroid Build Coastguard Worker
1023*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1024*cfb92d14SAndroid Build Coastguard Worker        actual_end_device = scan_mask.end_device
1025*cfb92d14SAndroid Build Coastguard Worker
1026*cfb92d14SAndroid Build Coastguard Worker        # THEN
1027*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(end_device, actual_end_device)
1028*cfb92d14SAndroid Build Coastguard Worker
1029*cfb92d14SAndroid Build Coastguard Worker
1030*cfb92d14SAndroid Build Coastguard Workerclass TestScanMaskFactory(unittest.TestCase):
1031*cfb92d14SAndroid Build Coastguard Worker
1032*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_ScanMask_from_bytearray_when_parse_method_is_called(self):
1033*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1034*cfb92d14SAndroid Build Coastguard Worker        scan_mask = any_scan_mask()
1035*cfb92d14SAndroid Build Coastguard Worker
1036*cfb92d14SAndroid Build Coastguard Worker        factory = mle.ScanMaskFactory()
1037*cfb92d14SAndroid Build Coastguard Worker
1038*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([scan_mask])
1039*cfb92d14SAndroid Build Coastguard Worker
1040*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1041*cfb92d14SAndroid Build Coastguard Worker        actual_scan_mask = factory.parse(io.BytesIO(data), dict())
1042*cfb92d14SAndroid Build Coastguard Worker
1043*cfb92d14SAndroid Build Coastguard Worker        # THEN
1044*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_scan_mask, mle.ScanMask))
1045*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(scan_mask_map[scan_mask]["router"], actual_scan_mask.router)
1046*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(scan_mask_map[scan_mask]["end_device"], actual_scan_mask.end_device)
1047*cfb92d14SAndroid Build Coastguard Worker
1048*cfb92d14SAndroid Build Coastguard Worker
1049*cfb92d14SAndroid Build Coastguard Workerclass TestConnectivity(unittest.TestCase):
1050*cfb92d14SAndroid Build Coastguard Worker
1051*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_pp_value_when_pp_property_is_called(self):
1052*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1053*cfb92d14SAndroid Build Coastguard Worker        pp_byte = any_pp()
1054*cfb92d14SAndroid Build Coastguard Worker
1055*cfb92d14SAndroid Build Coastguard Worker        connectivity_obj = mle.Connectivity(pp_byte, any_link_quality_3(), any_link_quality_2(), any_link_quality_1(),
1056*cfb92d14SAndroid Build Coastguard Worker                                            any_leader_cost(), any_id_sequence(), any_active_routers(),
1057*cfb92d14SAndroid Build Coastguard Worker                                            any_sed_buffer_size(), any_sed_datagram_count())
1058*cfb92d14SAndroid Build Coastguard Worker
1059*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1060*cfb92d14SAndroid Build Coastguard Worker        actual_pp = connectivity_obj.pp
1061*cfb92d14SAndroid Build Coastguard Worker
1062*cfb92d14SAndroid Build Coastguard Worker        # THEN
1063*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(common.map_pp(pp_byte), actual_pp)
1064*cfb92d14SAndroid Build Coastguard Worker
1065*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_link_quality_3_value_when_link_quality_3_property_is_called(self):
1066*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1067*cfb92d14SAndroid Build Coastguard Worker        link_quality_3 = any_link_quality_3()
1068*cfb92d14SAndroid Build Coastguard Worker
1069*cfb92d14SAndroid Build Coastguard Worker        connectivity_obj = mle.Connectivity(any_pp(), link_quality_3, any_link_quality_2(), any_link_quality_1(),
1070*cfb92d14SAndroid Build Coastguard Worker                                            any_leader_cost(), any_id_sequence(), any_active_routers(),
1071*cfb92d14SAndroid Build Coastguard Worker                                            any_sed_buffer_size(), any_sed_datagram_count())
1072*cfb92d14SAndroid Build Coastguard Worker
1073*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1074*cfb92d14SAndroid Build Coastguard Worker        actual_link_quality_3 = connectivity_obj.link_quality_3
1075*cfb92d14SAndroid Build Coastguard Worker
1076*cfb92d14SAndroid Build Coastguard Worker        # THEN
1077*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_quality_3, actual_link_quality_3)
1078*cfb92d14SAndroid Build Coastguard Worker
1079*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_link_quality_2_value_when_link_quality_2_property_is_called(self):
1080*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1081*cfb92d14SAndroid Build Coastguard Worker        link_quality_2 = any_link_quality_2()
1082*cfb92d14SAndroid Build Coastguard Worker
1083*cfb92d14SAndroid Build Coastguard Worker        connectivity_obj = mle.Connectivity(any_pp(), any_link_quality_3(), link_quality_2, any_link_quality_1(),
1084*cfb92d14SAndroid Build Coastguard Worker                                            any_leader_cost(), any_id_sequence(), any_active_routers(),
1085*cfb92d14SAndroid Build Coastguard Worker                                            any_sed_buffer_size(), any_sed_datagram_count())
1086*cfb92d14SAndroid Build Coastguard Worker
1087*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1088*cfb92d14SAndroid Build Coastguard Worker        actual_link_quality_2 = connectivity_obj.link_quality_2
1089*cfb92d14SAndroid Build Coastguard Worker
1090*cfb92d14SAndroid Build Coastguard Worker        # THEN
1091*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_quality_2, actual_link_quality_2)
1092*cfb92d14SAndroid Build Coastguard Worker
1093*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_link_quality_1_value_when_link_quality_1_property_is_called(self):
1094*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1095*cfb92d14SAndroid Build Coastguard Worker        link_quality_1 = any_link_quality_1()
1096*cfb92d14SAndroid Build Coastguard Worker
1097*cfb92d14SAndroid Build Coastguard Worker        connectivity_obj = mle.Connectivity(any_pp(), any_link_quality_3(), any_link_quality_2(), link_quality_1,
1098*cfb92d14SAndroid Build Coastguard Worker                                            any_leader_cost(), any_id_sequence(), any_active_routers(),
1099*cfb92d14SAndroid Build Coastguard Worker                                            any_sed_buffer_size(), any_sed_datagram_count())
1100*cfb92d14SAndroid Build Coastguard Worker
1101*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1102*cfb92d14SAndroid Build Coastguard Worker        actual_link_quality_1 = connectivity_obj.link_quality_1
1103*cfb92d14SAndroid Build Coastguard Worker
1104*cfb92d14SAndroid Build Coastguard Worker        # THEN
1105*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_quality_1, actual_link_quality_1)
1106*cfb92d14SAndroid Build Coastguard Worker
1107*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_leader_cost_value_when_leader_cost_property_is_called(self):
1108*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1109*cfb92d14SAndroid Build Coastguard Worker        leader_cost = any_leader_cost()
1110*cfb92d14SAndroid Build Coastguard Worker
1111*cfb92d14SAndroid Build Coastguard Worker        connectivity_obj = mle.Connectivity(any_pp(), any_link_quality_3(), any_link_quality_2(),
1112*cfb92d14SAndroid Build Coastguard Worker                                            any_link_quality_1(), leader_cost, any_id_sequence(), any_active_routers(),
1113*cfb92d14SAndroid Build Coastguard Worker                                            any_sed_buffer_size(), any_sed_datagram_count())
1114*cfb92d14SAndroid Build Coastguard Worker
1115*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1116*cfb92d14SAndroid Build Coastguard Worker        actual_leader_cost = connectivity_obj.leader_cost
1117*cfb92d14SAndroid Build Coastguard Worker
1118*cfb92d14SAndroid Build Coastguard Worker        # THEN
1119*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(leader_cost, actual_leader_cost)
1120*cfb92d14SAndroid Build Coastguard Worker
1121*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_id_sequence_value_when_id_sequence_property_is_called(self):
1122*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1123*cfb92d14SAndroid Build Coastguard Worker        id_sequence = any_id_sequence()
1124*cfb92d14SAndroid Build Coastguard Worker
1125*cfb92d14SAndroid Build Coastguard Worker        connectivity_obj = mle.Connectivity(any_pp(), any_link_quality_3(), any_link_quality_2(), any_link_quality_1(),
1126*cfb92d14SAndroid Build Coastguard Worker                                            any_leader_cost(), id_sequence, any_active_routers(),
1127*cfb92d14SAndroid Build Coastguard Worker                                            any_sed_buffer_size(), any_sed_datagram_count())
1128*cfb92d14SAndroid Build Coastguard Worker
1129*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1130*cfb92d14SAndroid Build Coastguard Worker        actual_id_sequence = connectivity_obj.id_sequence
1131*cfb92d14SAndroid Build Coastguard Worker
1132*cfb92d14SAndroid Build Coastguard Worker        # THEN
1133*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(id_sequence, actual_id_sequence)
1134*cfb92d14SAndroid Build Coastguard Worker
1135*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_active_routers_value_when_active_routers_property_is_called(self):
1136*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1137*cfb92d14SAndroid Build Coastguard Worker        active_routers = any_active_routers()
1138*cfb92d14SAndroid Build Coastguard Worker
1139*cfb92d14SAndroid Build Coastguard Worker        connectivity_obj = mle.Connectivity(any_pp(), any_link_quality_3(), any_link_quality_2(), any_link_quality_1(),
1140*cfb92d14SAndroid Build Coastguard Worker                                            any_leader_cost(), any_id_sequence(), active_routers,
1141*cfb92d14SAndroid Build Coastguard Worker                                            any_sed_buffer_size(), any_sed_datagram_count())
1142*cfb92d14SAndroid Build Coastguard Worker
1143*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1144*cfb92d14SAndroid Build Coastguard Worker        actual_active_routers = connectivity_obj.active_routers
1145*cfb92d14SAndroid Build Coastguard Worker
1146*cfb92d14SAndroid Build Coastguard Worker        # THEN
1147*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(active_routers, actual_active_routers)
1148*cfb92d14SAndroid Build Coastguard Worker
1149*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_sed_buffer_size_value_when_sed_buffer_size_property_is_called(self):
1150*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1151*cfb92d14SAndroid Build Coastguard Worker        sed_buffer_size = any_sed_buffer_size()
1152*cfb92d14SAndroid Build Coastguard Worker
1153*cfb92d14SAndroid Build Coastguard Worker        connectivity_obj = mle.Connectivity(any_pp(), any_link_quality_3(), any_link_quality_2(), any_link_quality_1(),
1154*cfb92d14SAndroid Build Coastguard Worker                                            any_leader_cost(), any_id_sequence(), any_active_routers(),
1155*cfb92d14SAndroid Build Coastguard Worker                                            sed_buffer_size, any_sed_datagram_count())
1156*cfb92d14SAndroid Build Coastguard Worker
1157*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1158*cfb92d14SAndroid Build Coastguard Worker        actual_sed_buffer_size = connectivity_obj.sed_buffer_size
1159*cfb92d14SAndroid Build Coastguard Worker
1160*cfb92d14SAndroid Build Coastguard Worker        # THEN
1161*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(sed_buffer_size, actual_sed_buffer_size)
1162*cfb92d14SAndroid Build Coastguard Worker
1163*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_sed_datagram_count_value_when_sed_datagram_count_property_is_called(self):
1164*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1165*cfb92d14SAndroid Build Coastguard Worker        sed_datagram_count = any_sed_datagram_count()
1166*cfb92d14SAndroid Build Coastguard Worker
1167*cfb92d14SAndroid Build Coastguard Worker        connectivity_obj = mle.Connectivity(any_pp(), any_link_quality_3(), any_link_quality_2(), any_link_quality_1(),
1168*cfb92d14SAndroid Build Coastguard Worker                                            any_leader_cost(), any_id_sequence(), any_active_routers(),
1169*cfb92d14SAndroid Build Coastguard Worker                                            any_sed_buffer_size(), sed_datagram_count)
1170*cfb92d14SAndroid Build Coastguard Worker
1171*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1172*cfb92d14SAndroid Build Coastguard Worker        actual_sed_datagram_count = connectivity_obj.sed_datagram_count
1173*cfb92d14SAndroid Build Coastguard Worker
1174*cfb92d14SAndroid Build Coastguard Worker        # THEN
1175*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(sed_datagram_count, actual_sed_datagram_count)
1176*cfb92d14SAndroid Build Coastguard Worker
1177*cfb92d14SAndroid Build Coastguard Worker
1178*cfb92d14SAndroid Build Coastguard Workerclass TestConnectivityFactory(unittest.TestCase):
1179*cfb92d14SAndroid Build Coastguard Worker
1180*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Connectivity_from_bytearray_when_parse_method_is_called(self):
1181*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1182*cfb92d14SAndroid Build Coastguard Worker        pp_byte = any_pp()
1183*cfb92d14SAndroid Build Coastguard Worker        link_quality_3 = any_link_quality_3()
1184*cfb92d14SAndroid Build Coastguard Worker        link_quality_2 = any_link_quality_2()
1185*cfb92d14SAndroid Build Coastguard Worker        link_quality_1 = any_link_quality_1()
1186*cfb92d14SAndroid Build Coastguard Worker        leader_cost = any_leader_cost()
1187*cfb92d14SAndroid Build Coastguard Worker        id_sequence = any_id_sequence()
1188*cfb92d14SAndroid Build Coastguard Worker        active_routers = any_active_routers()
1189*cfb92d14SAndroid Build Coastguard Worker        sed_buffer_size = any_sed_buffer_size()
1190*cfb92d14SAndroid Build Coastguard Worker        sed_datagram_count = any_sed_datagram_count()
1191*cfb92d14SAndroid Build Coastguard Worker
1192*cfb92d14SAndroid Build Coastguard Worker        factory = mle.ConnectivityFactory()
1193*cfb92d14SAndroid Build Coastguard Worker
1194*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([
1195*cfb92d14SAndroid Build Coastguard Worker            pp_byte, link_quality_3, link_quality_2, link_quality_1, leader_cost, id_sequence, active_routers
1196*cfb92d14SAndroid Build Coastguard Worker        ]) + struct.pack(">H", sed_buffer_size) + bytearray([sed_datagram_count])
1197*cfb92d14SAndroid Build Coastguard Worker
1198*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1199*cfb92d14SAndroid Build Coastguard Worker        actual_connectivity = factory.parse(io.BytesIO(data), dict())
1200*cfb92d14SAndroid Build Coastguard Worker
1201*cfb92d14SAndroid Build Coastguard Worker        # THEN
1202*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_connectivity, mle.Connectivity))
1203*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(common.map_pp(pp_byte), actual_connectivity.pp)
1204*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_quality_3, actual_connectivity.link_quality_3)
1205*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_quality_2, actual_connectivity.link_quality_2)
1206*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_quality_1, actual_connectivity.link_quality_1)
1207*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(leader_cost, actual_connectivity.leader_cost)
1208*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(id_sequence, actual_connectivity.id_sequence)
1209*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(active_routers, actual_connectivity.active_routers)
1210*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(sed_buffer_size, actual_connectivity.sed_buffer_size)
1211*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(sed_datagram_count, actual_connectivity.sed_datagram_count)
1212*cfb92d14SAndroid Build Coastguard Worker
1213*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Connectivity_without_sed_data_when_parse_method_is_called(self):
1214*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1215*cfb92d14SAndroid Build Coastguard Worker        pp_byte = any_pp()
1216*cfb92d14SAndroid Build Coastguard Worker        link_quality_3 = any_link_quality_3()
1217*cfb92d14SAndroid Build Coastguard Worker        link_quality_2 = any_link_quality_2()
1218*cfb92d14SAndroid Build Coastguard Worker        link_quality_1 = any_link_quality_1()
1219*cfb92d14SAndroid Build Coastguard Worker        leader_cost = any_leader_cost()
1220*cfb92d14SAndroid Build Coastguard Worker        id_sequence = any_id_sequence()
1221*cfb92d14SAndroid Build Coastguard Worker        active_routers = any_active_routers()
1222*cfb92d14SAndroid Build Coastguard Worker        any_sed_buffer_size()
1223*cfb92d14SAndroid Build Coastguard Worker        any_sed_datagram_count()
1224*cfb92d14SAndroid Build Coastguard Worker
1225*cfb92d14SAndroid Build Coastguard Worker        factory = mle.ConnectivityFactory()
1226*cfb92d14SAndroid Build Coastguard Worker
1227*cfb92d14SAndroid Build Coastguard Worker        data = bytearray(
1228*cfb92d14SAndroid Build Coastguard Worker            [pp_byte, link_quality_3, link_quality_2, link_quality_1, leader_cost, id_sequence, active_routers])
1229*cfb92d14SAndroid Build Coastguard Worker
1230*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1231*cfb92d14SAndroid Build Coastguard Worker        actual_connectivity = factory.parse(io.BytesIO(data), dict())
1232*cfb92d14SAndroid Build Coastguard Worker
1233*cfb92d14SAndroid Build Coastguard Worker        # THEN
1234*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_connectivity, mle.Connectivity))
1235*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(common.map_pp(pp_byte), actual_connectivity.pp)
1236*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_quality_3, actual_connectivity.link_quality_3)
1237*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_quality_2, actual_connectivity.link_quality_2)
1238*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_quality_1, actual_connectivity.link_quality_1)
1239*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(leader_cost, actual_connectivity.leader_cost)
1240*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(id_sequence, actual_connectivity.id_sequence)
1241*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(active_routers, actual_connectivity.active_routers)
1242*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(None, actual_connectivity.sed_buffer_size)
1243*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(None, actual_connectivity.sed_datagram_count)
1244*cfb92d14SAndroid Build Coastguard Worker
1245*cfb92d14SAndroid Build Coastguard Worker
1246*cfb92d14SAndroid Build Coastguard Workerclass TestLinkMargin(unittest.TestCase):
1247*cfb92d14SAndroid Build Coastguard Worker
1248*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_link_margin_value_when_link_margin_property_is_called(self):
1249*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1250*cfb92d14SAndroid Build Coastguard Worker        link_margin = any_link_margin()
1251*cfb92d14SAndroid Build Coastguard Worker
1252*cfb92d14SAndroid Build Coastguard Worker        link_margin_obj = mle.LinkMargin(link_margin)
1253*cfb92d14SAndroid Build Coastguard Worker
1254*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1255*cfb92d14SAndroid Build Coastguard Worker        actual_link_margin = link_margin_obj.link_margin
1256*cfb92d14SAndroid Build Coastguard Worker
1257*cfb92d14SAndroid Build Coastguard Worker        # THEN
1258*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_margin, actual_link_margin)
1259*cfb92d14SAndroid Build Coastguard Worker
1260*cfb92d14SAndroid Build Coastguard Worker
1261*cfb92d14SAndroid Build Coastguard Workerclass TestLinkMarginFactory(unittest.TestCase):
1262*cfb92d14SAndroid Build Coastguard Worker
1263*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_LinkMargin_from_bytearray_when_parse_method_is_called(self):
1264*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1265*cfb92d14SAndroid Build Coastguard Worker        link_margin = any_link_margin()
1266*cfb92d14SAndroid Build Coastguard Worker
1267*cfb92d14SAndroid Build Coastguard Worker        factory = mle.LinkMarginFactory()
1268*cfb92d14SAndroid Build Coastguard Worker
1269*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([link_margin])
1270*cfb92d14SAndroid Build Coastguard Worker
1271*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1272*cfb92d14SAndroid Build Coastguard Worker        actual_link_margin = factory.parse(io.BytesIO(data), dict())
1273*cfb92d14SAndroid Build Coastguard Worker
1274*cfb92d14SAndroid Build Coastguard Worker        # THEN
1275*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_link_margin, mle.LinkMargin))
1276*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(link_margin, actual_link_margin.link_margin)
1277*cfb92d14SAndroid Build Coastguard Worker
1278*cfb92d14SAndroid Build Coastguard Worker
1279*cfb92d14SAndroid Build Coastguard Workerclass TestStatus(unittest.TestCase):
1280*cfb92d14SAndroid Build Coastguard Worker
1281*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_status_value_when_status_property_is_called(self):
1282*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1283*cfb92d14SAndroid Build Coastguard Worker        status = any_status()
1284*cfb92d14SAndroid Build Coastguard Worker
1285*cfb92d14SAndroid Build Coastguard Worker        status_obj = mle.Status(status)
1286*cfb92d14SAndroid Build Coastguard Worker
1287*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1288*cfb92d14SAndroid Build Coastguard Worker        actual_status = status_obj.status
1289*cfb92d14SAndroid Build Coastguard Worker
1290*cfb92d14SAndroid Build Coastguard Worker        # THEN
1291*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(status, actual_status)
1292*cfb92d14SAndroid Build Coastguard Worker
1293*cfb92d14SAndroid Build Coastguard Worker
1294*cfb92d14SAndroid Build Coastguard Workerclass TestStatusFactory(unittest.TestCase):
1295*cfb92d14SAndroid Build Coastguard Worker
1296*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Status_from_bytearray_when_parse_method_is_called(self):
1297*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1298*cfb92d14SAndroid Build Coastguard Worker        status = any_status()
1299*cfb92d14SAndroid Build Coastguard Worker
1300*cfb92d14SAndroid Build Coastguard Worker        factory = mle.StatusFactory()
1301*cfb92d14SAndroid Build Coastguard Worker
1302*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([status])
1303*cfb92d14SAndroid Build Coastguard Worker
1304*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1305*cfb92d14SAndroid Build Coastguard Worker        actual_status = factory.parse(io.BytesIO(data), dict())
1306*cfb92d14SAndroid Build Coastguard Worker
1307*cfb92d14SAndroid Build Coastguard Worker        # THEN
1308*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_status, mle.Status))
1309*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(status, actual_status.status)
1310*cfb92d14SAndroid Build Coastguard Worker
1311*cfb92d14SAndroid Build Coastguard Worker
1312*cfb92d14SAndroid Build Coastguard Workerclass TestVersion(unittest.TestCase):
1313*cfb92d14SAndroid Build Coastguard Worker
1314*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_version_value_when_version_property_is_called(self):
1315*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1316*cfb92d14SAndroid Build Coastguard Worker        version = any_version()
1317*cfb92d14SAndroid Build Coastguard Worker
1318*cfb92d14SAndroid Build Coastguard Worker        version_obj = mle.Version(version)
1319*cfb92d14SAndroid Build Coastguard Worker
1320*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1321*cfb92d14SAndroid Build Coastguard Worker        actual_version = version_obj.version
1322*cfb92d14SAndroid Build Coastguard Worker
1323*cfb92d14SAndroid Build Coastguard Worker        # THEN
1324*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(version, actual_version)
1325*cfb92d14SAndroid Build Coastguard Worker
1326*cfb92d14SAndroid Build Coastguard Worker
1327*cfb92d14SAndroid Build Coastguard Workerclass TestVersionFactory(unittest.TestCase):
1328*cfb92d14SAndroid Build Coastguard Worker
1329*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Version_from_bytearray_when_parse_method_is_called(self):
1330*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1331*cfb92d14SAndroid Build Coastguard Worker        version = any_version()
1332*cfb92d14SAndroid Build Coastguard Worker
1333*cfb92d14SAndroid Build Coastguard Worker        factory = mle.VersionFactory()
1334*cfb92d14SAndroid Build Coastguard Worker
1335*cfb92d14SAndroid Build Coastguard Worker        data = struct.pack(">H", version)
1336*cfb92d14SAndroid Build Coastguard Worker
1337*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1338*cfb92d14SAndroid Build Coastguard Worker        actual_version = factory.parse(io.BytesIO(data), dict())
1339*cfb92d14SAndroid Build Coastguard Worker
1340*cfb92d14SAndroid Build Coastguard Worker        # THEN
1341*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_version, mle.Version))
1342*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(version, actual_version.version)
1343*cfb92d14SAndroid Build Coastguard Worker
1344*cfb92d14SAndroid Build Coastguard Worker
1345*cfb92d14SAndroid Build Coastguard Workerclass TestAddressRegistrationFull(unittest.TestCase):
1346*cfb92d14SAndroid Build Coastguard Worker
1347*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_ipv6_address_value_when_ipv6_address_property_is_called(self):
1348*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1349*cfb92d14SAndroid Build Coastguard Worker        ipv6_address = any_ipv6_address()
1350*cfb92d14SAndroid Build Coastguard Worker
1351*cfb92d14SAndroid Build Coastguard Worker        addr_reg_full_obj = mle.AddressFull(ipv6_address)
1352*cfb92d14SAndroid Build Coastguard Worker
1353*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1354*cfb92d14SAndroid Build Coastguard Worker        actual_ipv6_address = addr_reg_full_obj.ipv6_address
1355*cfb92d14SAndroid Build Coastguard Worker
1356*cfb92d14SAndroid Build Coastguard Worker        # THEN
1357*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(ipv6_address, actual_ipv6_address)
1358*cfb92d14SAndroid Build Coastguard Worker
1359*cfb92d14SAndroid Build Coastguard Worker
1360*cfb92d14SAndroid Build Coastguard Workerclass TestAddressRegistrationFullFactory(unittest.TestCase):
1361*cfb92d14SAndroid Build Coastguard Worker
1362*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_AddressFull_from_bytearray_when_parse_method_is_called(self):
1363*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1364*cfb92d14SAndroid Build Coastguard Worker        ipv6_address = any_ipv6_address()
1365*cfb92d14SAndroid Build Coastguard Worker
1366*cfb92d14SAndroid Build Coastguard Worker        factory = mle.AddressFullFactory()
1367*cfb92d14SAndroid Build Coastguard Worker
1368*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([0x00]) + bytearray(ipv6_address)
1369*cfb92d14SAndroid Build Coastguard Worker
1370*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1371*cfb92d14SAndroid Build Coastguard Worker        actual_addr_reg_full = factory.parse(io.BytesIO(data), dict())
1372*cfb92d14SAndroid Build Coastguard Worker
1373*cfb92d14SAndroid Build Coastguard Worker        # THEN
1374*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_addr_reg_full, mle.AddressFull))
1375*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(ipv6_address, actual_addr_reg_full.ipv6_address)
1376*cfb92d14SAndroid Build Coastguard Worker
1377*cfb92d14SAndroid Build Coastguard Worker
1378*cfb92d14SAndroid Build Coastguard Workerclass TestAddressRegistrationCompressed(unittest.TestCase):
1379*cfb92d14SAndroid Build Coastguard Worker
1380*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_cid_value_when_cid_property_is_called(self):
1381*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1382*cfb92d14SAndroid Build Coastguard Worker        cid = any_cid()
1383*cfb92d14SAndroid Build Coastguard Worker
1384*cfb92d14SAndroid Build Coastguard Worker        addr_reg_compressed_obj = mle.AddressCompressed(cid, any_iid())
1385*cfb92d14SAndroid Build Coastguard Worker
1386*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1387*cfb92d14SAndroid Build Coastguard Worker        actual_cid = addr_reg_compressed_obj.cid
1388*cfb92d14SAndroid Build Coastguard Worker
1389*cfb92d14SAndroid Build Coastguard Worker        # THEN
1390*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(cid, actual_cid)
1391*cfb92d14SAndroid Build Coastguard Worker
1392*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_cid_value_when_iid_property_is_called(self):
1393*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1394*cfb92d14SAndroid Build Coastguard Worker        iid = any_iid()
1395*cfb92d14SAndroid Build Coastguard Worker
1396*cfb92d14SAndroid Build Coastguard Worker        addr_reg_compressed_obj = mle.AddressCompressed(any_cid(), iid)
1397*cfb92d14SAndroid Build Coastguard Worker
1398*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1399*cfb92d14SAndroid Build Coastguard Worker        actual_iid = addr_reg_compressed_obj.iid
1400*cfb92d14SAndroid Build Coastguard Worker
1401*cfb92d14SAndroid Build Coastguard Worker        # THEN
1402*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(iid, actual_iid)
1403*cfb92d14SAndroid Build Coastguard Worker
1404*cfb92d14SAndroid Build Coastguard Worker
1405*cfb92d14SAndroid Build Coastguard Workerclass TestAddressRegistrationCompressedFactory(unittest.TestCase):
1406*cfb92d14SAndroid Build Coastguard Worker
1407*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_AddressRegistrationCompressed_from_bytearray_when_parse_method_is_called(self):
1408*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1409*cfb92d14SAndroid Build Coastguard Worker        cid = any_cid()
1410*cfb92d14SAndroid Build Coastguard Worker        iid = any_iid()
1411*cfb92d14SAndroid Build Coastguard Worker
1412*cfb92d14SAndroid Build Coastguard Worker        factory = mle.AddressCompressedFactory()
1413*cfb92d14SAndroid Build Coastguard Worker
1414*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([(1 << 7) | cid]) + iid
1415*cfb92d14SAndroid Build Coastguard Worker
1416*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1417*cfb92d14SAndroid Build Coastguard Worker        actual_addr_reg_compressed = factory.parse(io.BytesIO(data), dict())
1418*cfb92d14SAndroid Build Coastguard Worker
1419*cfb92d14SAndroid Build Coastguard Worker        # THEN
1420*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_addr_reg_compressed, mle.AddressCompressed))
1421*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(cid, actual_addr_reg_compressed.cid)
1422*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(iid, actual_addr_reg_compressed.iid)
1423*cfb92d14SAndroid Build Coastguard Worker
1424*cfb92d14SAndroid Build Coastguard Worker
1425*cfb92d14SAndroid Build Coastguard Workerclass TestAddressRegistration(unittest.TestCase):
1426*cfb92d14SAndroid Build Coastguard Worker
1427*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_addresses_value_when_addresses_property_is_called(self):
1428*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1429*cfb92d14SAndroid Build Coastguard Worker        addresses = any_addresses()
1430*cfb92d14SAndroid Build Coastguard Worker
1431*cfb92d14SAndroid Build Coastguard Worker        addr_reg_obj = mle.AddressRegistration(addresses)
1432*cfb92d14SAndroid Build Coastguard Worker
1433*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1434*cfb92d14SAndroid Build Coastguard Worker        actual_addresses = addr_reg_obj.addresses
1435*cfb92d14SAndroid Build Coastguard Worker
1436*cfb92d14SAndroid Build Coastguard Worker        # THEN
1437*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(addresses, actual_addresses)
1438*cfb92d14SAndroid Build Coastguard Worker
1439*cfb92d14SAndroid Build Coastguard Worker
1440*cfb92d14SAndroid Build Coastguard Workerclass TestAddressRegistrationFactory(unittest.TestCase):
1441*cfb92d14SAndroid Build Coastguard Worker
1442*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_AddressRegistration_from_bytearray_when_parse_method_is_called(self):
1443*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1444*cfb92d14SAndroid Build Coastguard Worker        cid = any_cid()
1445*cfb92d14SAndroid Build Coastguard Worker        iid = any_iid()
1446*cfb92d14SAndroid Build Coastguard Worker        ipv6_address = any_ipv6_address()
1447*cfb92d14SAndroid Build Coastguard Worker
1448*cfb92d14SAndroid Build Coastguard Worker        addresses = [mle.AddressCompressed(cid, iid), mle.AddressFull(ipv6_address)]
1449*cfb92d14SAndroid Build Coastguard Worker
1450*cfb92d14SAndroid Build Coastguard Worker        factory = mle.AddressRegistrationFactory(mle.AddressCompressedFactory(), mle.AddressFullFactory())
1451*cfb92d14SAndroid Build Coastguard Worker
1452*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([(1 << 7) | cid]) + iid + bytearray([0]) + ipv6_address
1453*cfb92d14SAndroid Build Coastguard Worker
1454*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1455*cfb92d14SAndroid Build Coastguard Worker        actual_addr_reg = factory.parse(io.BytesIO(data), dict())
1456*cfb92d14SAndroid Build Coastguard Worker
1457*cfb92d14SAndroid Build Coastguard Worker        # THEN
1458*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_addr_reg, mle.AddressRegistration))
1459*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(addresses[0].cid, actual_addr_reg.addresses[0].cid)
1460*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(addresses[0].iid, actual_addr_reg.addresses[0].iid)
1461*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(addresses[1].ipv6_address, actual_addr_reg.addresses[1].ipv6_address)
1462*cfb92d14SAndroid Build Coastguard Worker
1463*cfb92d14SAndroid Build Coastguard Worker
1464*cfb92d14SAndroid Build Coastguard Workerclass TestChannel(unittest.TestCase):
1465*cfb92d14SAndroid Build Coastguard Worker
1466*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_channel_page_value_when_channel_page_property_is_called(self):
1467*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1468*cfb92d14SAndroid Build Coastguard Worker        channel_page = any_channel_page()
1469*cfb92d14SAndroid Build Coastguard Worker
1470*cfb92d14SAndroid Build Coastguard Worker        channel_obj = mle.Channel(channel_page, any_channel())
1471*cfb92d14SAndroid Build Coastguard Worker
1472*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1473*cfb92d14SAndroid Build Coastguard Worker        actual_channel_page = channel_obj.channel_page
1474*cfb92d14SAndroid Build Coastguard Worker
1475*cfb92d14SAndroid Build Coastguard Worker        # THEN
1476*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(channel_page, actual_channel_page)
1477*cfb92d14SAndroid Build Coastguard Worker
1478*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_channel_value_when_channel_property_is_called(self):
1479*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1480*cfb92d14SAndroid Build Coastguard Worker        channel = any_channel()
1481*cfb92d14SAndroid Build Coastguard Worker
1482*cfb92d14SAndroid Build Coastguard Worker        channel_obj = mle.Channel(any_channel_page(), channel)
1483*cfb92d14SAndroid Build Coastguard Worker
1484*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1485*cfb92d14SAndroid Build Coastguard Worker        actual_channel = channel_obj.channel
1486*cfb92d14SAndroid Build Coastguard Worker
1487*cfb92d14SAndroid Build Coastguard Worker        # THEN
1488*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(channel, actual_channel)
1489*cfb92d14SAndroid Build Coastguard Worker
1490*cfb92d14SAndroid Build Coastguard Worker
1491*cfb92d14SAndroid Build Coastguard Workerclass TestChannelFactory(unittest.TestCase):
1492*cfb92d14SAndroid Build Coastguard Worker
1493*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_Channel_from_bytearray_when_parse_method_is_called(self):
1494*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1495*cfb92d14SAndroid Build Coastguard Worker        channel_page = any_channel_page()
1496*cfb92d14SAndroid Build Coastguard Worker        channel = any_channel()
1497*cfb92d14SAndroid Build Coastguard Worker
1498*cfb92d14SAndroid Build Coastguard Worker        factory = mle.ChannelFactory()
1499*cfb92d14SAndroid Build Coastguard Worker
1500*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([channel_page]) + struct.pack(">H", channel)
1501*cfb92d14SAndroid Build Coastguard Worker
1502*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1503*cfb92d14SAndroid Build Coastguard Worker        actual_channel = factory.parse(io.BytesIO(data), dict())
1504*cfb92d14SAndroid Build Coastguard Worker
1505*cfb92d14SAndroid Build Coastguard Worker        # THEN
1506*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_channel, mle.Channel))
1507*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(channel_page, actual_channel.channel_page)
1508*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(channel, actual_channel.channel)
1509*cfb92d14SAndroid Build Coastguard Worker
1510*cfb92d14SAndroid Build Coastguard Worker
1511*cfb92d14SAndroid Build Coastguard Workerclass TestPanId(unittest.TestCase):
1512*cfb92d14SAndroid Build Coastguard Worker
1513*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_pan_id_value_when_pan_id_property_is_called(self):
1514*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1515*cfb92d14SAndroid Build Coastguard Worker        pan_id = any_pan_id()
1516*cfb92d14SAndroid Build Coastguard Worker
1517*cfb92d14SAndroid Build Coastguard Worker        pan_id_obj = mle.PanId(pan_id)
1518*cfb92d14SAndroid Build Coastguard Worker
1519*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1520*cfb92d14SAndroid Build Coastguard Worker        actual_pan_id = pan_id_obj.pan_id
1521*cfb92d14SAndroid Build Coastguard Worker
1522*cfb92d14SAndroid Build Coastguard Worker        # THEN
1523*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(pan_id, actual_pan_id)
1524*cfb92d14SAndroid Build Coastguard Worker
1525*cfb92d14SAndroid Build Coastguard Worker
1526*cfb92d14SAndroid Build Coastguard Workerclass TestPanIdFactory(unittest.TestCase):
1527*cfb92d14SAndroid Build Coastguard Worker
1528*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_PanId_from_bytearray_when_parse_method_is_called(self):
1529*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1530*cfb92d14SAndroid Build Coastguard Worker        pan_id = any_pan_id()
1531*cfb92d14SAndroid Build Coastguard Worker
1532*cfb92d14SAndroid Build Coastguard Worker        factory = mle.PanIdFactory()
1533*cfb92d14SAndroid Build Coastguard Worker
1534*cfb92d14SAndroid Build Coastguard Worker        data = struct.pack(">H", pan_id)
1535*cfb92d14SAndroid Build Coastguard Worker
1536*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1537*cfb92d14SAndroid Build Coastguard Worker        actual_pan_id = factory.parse(io.BytesIO(data), dict())
1538*cfb92d14SAndroid Build Coastguard Worker
1539*cfb92d14SAndroid Build Coastguard Worker        # THEN
1540*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_pan_id, mle.PanId))
1541*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(pan_id, actual_pan_id.pan_id)
1542*cfb92d14SAndroid Build Coastguard Worker
1543*cfb92d14SAndroid Build Coastguard Worker
1544*cfb92d14SAndroid Build Coastguard Workerclass TestActiveTimestamp(unittest.TestCase):
1545*cfb92d14SAndroid Build Coastguard Worker
1546*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_timestamp_seconds_value_when_timestamp_seconds_property_is_called(self):
1547*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1548*cfb92d14SAndroid Build Coastguard Worker        timestamp_seconds = any_timestamp_seconds()
1549*cfb92d14SAndroid Build Coastguard Worker
1550*cfb92d14SAndroid Build Coastguard Worker        active_timestamp_obj = mle.ActiveTimestamp(timestamp_seconds, any_timestamp_ticks(), any_u())
1551*cfb92d14SAndroid Build Coastguard Worker
1552*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1553*cfb92d14SAndroid Build Coastguard Worker        actual_timestamp_seconds = active_timestamp_obj.timestamp_seconds
1554*cfb92d14SAndroid Build Coastguard Worker
1555*cfb92d14SAndroid Build Coastguard Worker        # THEN
1556*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(timestamp_seconds, actual_timestamp_seconds)
1557*cfb92d14SAndroid Build Coastguard Worker
1558*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_timestamp_ticks_value_when_timestamp_ticks_property_is_called(self):
1559*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1560*cfb92d14SAndroid Build Coastguard Worker        timestamp_ticks = any_timestamp_ticks()
1561*cfb92d14SAndroid Build Coastguard Worker
1562*cfb92d14SAndroid Build Coastguard Worker        active_timestamp_obj = mle.ActiveTimestamp(any_timestamp_seconds(), timestamp_ticks, any_u())
1563*cfb92d14SAndroid Build Coastguard Worker
1564*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1565*cfb92d14SAndroid Build Coastguard Worker        actual_timestamp_ticks = active_timestamp_obj.timestamp_ticks
1566*cfb92d14SAndroid Build Coastguard Worker
1567*cfb92d14SAndroid Build Coastguard Worker        # THEN
1568*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(timestamp_ticks, actual_timestamp_ticks)
1569*cfb92d14SAndroid Build Coastguard Worker
1570*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_u_value_when_u_property_is_called(self):
1571*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1572*cfb92d14SAndroid Build Coastguard Worker        u = any_u()
1573*cfb92d14SAndroid Build Coastguard Worker
1574*cfb92d14SAndroid Build Coastguard Worker        active_timestamp_obj = mle.ActiveTimestamp(any_timestamp_seconds(), any_timestamp_ticks(), u)
1575*cfb92d14SAndroid Build Coastguard Worker
1576*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1577*cfb92d14SAndroid Build Coastguard Worker        actual_u = active_timestamp_obj.u
1578*cfb92d14SAndroid Build Coastguard Worker
1579*cfb92d14SAndroid Build Coastguard Worker        # THEN
1580*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(u, actual_u)
1581*cfb92d14SAndroid Build Coastguard Worker
1582*cfb92d14SAndroid Build Coastguard Worker
1583*cfb92d14SAndroid Build Coastguard Workerclass TestActiveTimestampFactory(unittest.TestCase):
1584*cfb92d14SAndroid Build Coastguard Worker
1585*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_ActiveTimestamp_from_bytearray_when_parse_method_is_called(self):
1586*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1587*cfb92d14SAndroid Build Coastguard Worker        timestamp_seconds = any_timestamp_seconds()
1588*cfb92d14SAndroid Build Coastguard Worker        timestamp_ticks = any_timestamp_ticks()
1589*cfb92d14SAndroid Build Coastguard Worker        u = any_u()
1590*cfb92d14SAndroid Build Coastguard Worker
1591*cfb92d14SAndroid Build Coastguard Worker        factory = mle.ActiveTimestampFactory()
1592*cfb92d14SAndroid Build Coastguard Worker
1593*cfb92d14SAndroid Build Coastguard Worker        data = struct.pack(">Q", timestamp_seconds)[2:] + struct.pack(">H", (timestamp_ticks << 1) | u)
1594*cfb92d14SAndroid Build Coastguard Worker
1595*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1596*cfb92d14SAndroid Build Coastguard Worker        active_timestamp = factory.parse(io.BytesIO(data), dict())
1597*cfb92d14SAndroid Build Coastguard Worker
1598*cfb92d14SAndroid Build Coastguard Worker        # THEN
1599*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(active_timestamp, mle.ActiveTimestamp))
1600*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(timestamp_seconds, active_timestamp.timestamp_seconds)
1601*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(timestamp_ticks, active_timestamp.timestamp_ticks)
1602*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(u, active_timestamp.u)
1603*cfb92d14SAndroid Build Coastguard Worker
1604*cfb92d14SAndroid Build Coastguard Worker
1605*cfb92d14SAndroid Build Coastguard Workerclass TestPendingTimestamp(unittest.TestCase):
1606*cfb92d14SAndroid Build Coastguard Worker
1607*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_timestamp_seconds_value_when_timestamp_seconds_property_is_called(self):
1608*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1609*cfb92d14SAndroid Build Coastguard Worker        timestamp_seconds = any_timestamp_seconds()
1610*cfb92d14SAndroid Build Coastguard Worker
1611*cfb92d14SAndroid Build Coastguard Worker        pending_timestamp_obj = mle.PendingTimestamp(timestamp_seconds, any_timestamp_ticks(), any_u())
1612*cfb92d14SAndroid Build Coastguard Worker
1613*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1614*cfb92d14SAndroid Build Coastguard Worker        actual_timestamp_seconds = pending_timestamp_obj.timestamp_seconds
1615*cfb92d14SAndroid Build Coastguard Worker
1616*cfb92d14SAndroid Build Coastguard Worker        # THEN
1617*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(timestamp_seconds, actual_timestamp_seconds)
1618*cfb92d14SAndroid Build Coastguard Worker
1619*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_timestamp_ticks_value_when_timestamp_ticks_property_is_called(self):
1620*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1621*cfb92d14SAndroid Build Coastguard Worker        timestamp_ticks = any_timestamp_ticks()
1622*cfb92d14SAndroid Build Coastguard Worker
1623*cfb92d14SAndroid Build Coastguard Worker        pending_timestamp_obj = mle.PendingTimestamp(any_timestamp_seconds(), timestamp_ticks, any_u())
1624*cfb92d14SAndroid Build Coastguard Worker
1625*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1626*cfb92d14SAndroid Build Coastguard Worker        actual_timestamp_ticks = pending_timestamp_obj.timestamp_ticks
1627*cfb92d14SAndroid Build Coastguard Worker
1628*cfb92d14SAndroid Build Coastguard Worker        # THEN
1629*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(timestamp_ticks, actual_timestamp_ticks)
1630*cfb92d14SAndroid Build Coastguard Worker
1631*cfb92d14SAndroid Build Coastguard Worker    def test_should_return_u_value_when_u_property_is_called(self):
1632*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1633*cfb92d14SAndroid Build Coastguard Worker        u = any_u()
1634*cfb92d14SAndroid Build Coastguard Worker
1635*cfb92d14SAndroid Build Coastguard Worker        pending_timestamp_obj = mle.PendingTimestamp(any_timestamp_seconds(), any_timestamp_ticks(), u)
1636*cfb92d14SAndroid Build Coastguard Worker
1637*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1638*cfb92d14SAndroid Build Coastguard Worker        actual_u = pending_timestamp_obj.u
1639*cfb92d14SAndroid Build Coastguard Worker
1640*cfb92d14SAndroid Build Coastguard Worker        # THEN
1641*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(u, actual_u)
1642*cfb92d14SAndroid Build Coastguard Worker
1643*cfb92d14SAndroid Build Coastguard Worker
1644*cfb92d14SAndroid Build Coastguard Workerclass TestPendingTimestampFactory(unittest.TestCase):
1645*cfb92d14SAndroid Build Coastguard Worker
1646*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_PendingTimestamp_from_bytearray_when_parse_method_is_called(self):
1647*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1648*cfb92d14SAndroid Build Coastguard Worker        timestamp_seconds = any_timestamp_seconds()
1649*cfb92d14SAndroid Build Coastguard Worker        timestamp_ticks = any_timestamp_ticks()
1650*cfb92d14SAndroid Build Coastguard Worker        u = any_u()
1651*cfb92d14SAndroid Build Coastguard Worker
1652*cfb92d14SAndroid Build Coastguard Worker        factory = mle.PendingTimestampFactory()
1653*cfb92d14SAndroid Build Coastguard Worker
1654*cfb92d14SAndroid Build Coastguard Worker        data = struct.pack(">Q", timestamp_seconds)[2:] + struct.pack(">H", (timestamp_ticks << 1) | u)
1655*cfb92d14SAndroid Build Coastguard Worker
1656*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1657*cfb92d14SAndroid Build Coastguard Worker        pending_timestamp = factory.parse(io.BytesIO(data), dict())
1658*cfb92d14SAndroid Build Coastguard Worker
1659*cfb92d14SAndroid Build Coastguard Worker        # THEN
1660*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(pending_timestamp, mle.PendingTimestamp))
1661*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(timestamp_seconds, pending_timestamp.timestamp_seconds)
1662*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(timestamp_ticks, pending_timestamp.timestamp_ticks)
1663*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(u, pending_timestamp.u)
1664*cfb92d14SAndroid Build Coastguard Worker
1665*cfb92d14SAndroid Build Coastguard Worker
1666*cfb92d14SAndroid Build Coastguard Workerclass TestMleCommandFactory(unittest.TestCase):
1667*cfb92d14SAndroid Build Coastguard Worker
1668*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_MleCommand_from_bytearray_when_parse_method_is_called(self):
1669*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([
1670*cfb92d14SAndroid Build Coastguard Worker            0x0b, 0x04, 0x08, 0xa5, 0xf2, 0x9b, 0xde, 0xe3, 0xd8, 0xbe, 0xb9, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08,
1671*cfb92d14SAndroid Build Coastguard Worker            0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x0d, 0x02, 0x04, 0x00, 0x00, 0x00, 0xf0, 0x12, 0x02, 0x00, 0x02,
1672*cfb92d14SAndroid Build Coastguard Worker            0x13, 0x09, 0x80, 0x86, 0xa2, 0x1b, 0x81, 0x6d, 0xb8, 0xb5, 0xe8, 0x0d, 0x03, 0x0a, 0x0c, 0x09
1673*cfb92d14SAndroid Build Coastguard Worker        ])
1674*cfb92d14SAndroid Build Coastguard Worker
1675*cfb92d14SAndroid Build Coastguard Worker        factory = mle.MleCommandFactory(config.create_default_mle_tlvs_factories())
1676*cfb92d14SAndroid Build Coastguard Worker
1677*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1678*cfb92d14SAndroid Build Coastguard Worker        actual_mle_command = factory.parse(io.BytesIO(data), None)
1679*cfb92d14SAndroid Build Coastguard Worker
1680*cfb92d14SAndroid Build Coastguard Worker        # THEN
1681*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_mle_command, mle.MleCommand))
1682*cfb92d14SAndroid Build Coastguard Worker
1683*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(11, actual_mle_command.type)
1684*cfb92d14SAndroid Build Coastguard Worker
1685*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.Response(bytearray([0xa5, 0xf2, 0x9b, 0xde, 0xe3, 0xd8, 0xbe, 0xb9])),
1686*cfb92d14SAndroid Build Coastguard Worker                         actual_mle_command.tlvs[0])
1687*cfb92d14SAndroid Build Coastguard Worker
1688*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.LinkLayerFrameCounter(0), actual_mle_command.tlvs[1])
1689*cfb92d14SAndroid Build Coastguard Worker
1690*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.MleFrameCounter(1), actual_mle_command.tlvs[2])
1691*cfb92d14SAndroid Build Coastguard Worker
1692*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.Mode(receiver=1, secure=1, device_type=0, network_data=1), actual_mle_command.tlvs[3])
1693*cfb92d14SAndroid Build Coastguard Worker
1694*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.Timeout(240), actual_mle_command.tlvs[4])
1695*cfb92d14SAndroid Build Coastguard Worker
1696*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.Version(2), actual_mle_command.tlvs[5])
1697*cfb92d14SAndroid Build Coastguard Worker
1698*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(
1699*cfb92d14SAndroid Build Coastguard Worker            mle.AddressRegistration(addresses=[
1700*cfb92d14SAndroid Build Coastguard Worker                mle.AddressCompressed(cid=0, iid=bytearray([0x86, 0xa2, 0x1b, 0x81, 0x6d, 0xb8, 0xb5, 0xe8]))
1701*cfb92d14SAndroid Build Coastguard Worker            ]), actual_mle_command.tlvs[6])
1702*cfb92d14SAndroid Build Coastguard Worker
1703*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.TlvRequest(tlvs=[10, 12, 9]), actual_mle_command.tlvs[7])
1704*cfb92d14SAndroid Build Coastguard Worker
1705*cfb92d14SAndroid Build Coastguard Worker
1706*cfb92d14SAndroid Build Coastguard Workerclass TestMleMessageFactory(unittest.TestCase):
1707*cfb92d14SAndroid Build Coastguard Worker
1708*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_MleMessageSecured_from_bytearray_when_parse_method_is_called(self):
1709*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1710*cfb92d14SAndroid Build Coastguard Worker        message_info = common.MessageInfo()
1711*cfb92d14SAndroid Build Coastguard Worker        message_info.source_ipv6 = "fe80::10cf:d38b:3b61:5558"
1712*cfb92d14SAndroid Build Coastguard Worker        message_info.destination_ipv6 = "fe80::383e:9eed:7a01:36a5"
1713*cfb92d14SAndroid Build Coastguard Worker
1714*cfb92d14SAndroid Build Coastguard Worker        message_info.source_mac_address = common.MacAddress.from_eui64(
1715*cfb92d14SAndroid Build Coastguard Worker            bytearray([0x12, 0xcf, 0xd3, 0x8b, 0x3b, 0x61, 0x55, 0x58]))
1716*cfb92d14SAndroid Build Coastguard Worker        message_info.destination_mac_address = common.MacAddress.from_eui64(
1717*cfb92d14SAndroid Build Coastguard Worker            bytearray([0x3a, 0x3e, 0x9e, 0xed, 0x7a, 0x01, 0x36, 0xa5]))
1718*cfb92d14SAndroid Build Coastguard Worker
1719*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([
1720*cfb92d14SAndroid Build Coastguard Worker            0x00, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x14, 0x03, 0xe3, 0x72, 0x50, 0x4f, 0x8c,
1721*cfb92d14SAndroid Build Coastguard Worker            0x5c, 0x42, 0x81, 0x68, 0xe2, 0x11, 0xfc, 0xf5, 0x8c, 0x62, 0x8e, 0x83, 0x99, 0xe7, 0x26, 0x86, 0x34, 0x3b,
1722*cfb92d14SAndroid Build Coastguard Worker            0xa7, 0x68, 0xc7, 0x93, 0xfb, 0x72, 0xd9, 0xcc, 0x13, 0x5e, 0x5b, 0x96, 0x0e, 0xf1, 0x80, 0x03, 0x55, 0x4f,
1723*cfb92d14SAndroid Build Coastguard Worker            0x27, 0xc2, 0x96, 0xf4, 0x9c, 0x65, 0x82, 0x97, 0xcf, 0x97, 0x35, 0x89, 0xc2
1724*cfb92d14SAndroid Build Coastguard Worker        ])
1725*cfb92d14SAndroid Build Coastguard Worker
1726*cfb92d14SAndroid Build Coastguard Worker        factory = config.create_default_mle_message_factory(network_key=config.DEFAULT_NETWORK_KEY)
1727*cfb92d14SAndroid Build Coastguard Worker
1728*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1729*cfb92d14SAndroid Build Coastguard Worker        actual_mle_message = factory.parse(io.BytesIO(data), message_info)
1730*cfb92d14SAndroid Build Coastguard Worker
1731*cfb92d14SAndroid Build Coastguard Worker        # THEN
1732*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_mle_message, mle.MleMessageSecured))
1733*cfb92d14SAndroid Build Coastguard Worker
1734*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(11, actual_mle_message.command.type)
1735*cfb92d14SAndroid Build Coastguard Worker
1736*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.Response(bytearray([0xa5, 0xf2, 0x9b, 0xde, 0xe3, 0xd8, 0xbe, 0xb9])),
1737*cfb92d14SAndroid Build Coastguard Worker                         actual_mle_message.command.tlvs[0])
1738*cfb92d14SAndroid Build Coastguard Worker
1739*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.LinkLayerFrameCounter(0), actual_mle_message.command.tlvs[1])
1740*cfb92d14SAndroid Build Coastguard Worker
1741*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.MleFrameCounter(1), actual_mle_message.command.tlvs[2])
1742*cfb92d14SAndroid Build Coastguard Worker
1743*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.Mode(receiver=1, secure=1, device_type=0, network_data=1),
1744*cfb92d14SAndroid Build Coastguard Worker                         actual_mle_message.command.tlvs[3])
1745*cfb92d14SAndroid Build Coastguard Worker
1746*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.Timeout(240), actual_mle_message.command.tlvs[4])
1747*cfb92d14SAndroid Build Coastguard Worker
1748*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.Version(2), actual_mle_message.command.tlvs[5])
1749*cfb92d14SAndroid Build Coastguard Worker
1750*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(
1751*cfb92d14SAndroid Build Coastguard Worker            mle.AddressRegistration(addresses=[
1752*cfb92d14SAndroid Build Coastguard Worker                mle.AddressCompressed(cid=0, iid=bytearray([0x86, 0xa2, 0x1b, 0x81, 0x6d, 0xb8, 0xb5, 0xe8]))
1753*cfb92d14SAndroid Build Coastguard Worker            ]), actual_mle_message.command.tlvs[6])
1754*cfb92d14SAndroid Build Coastguard Worker
1755*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.TlvRequest(tlvs=[10, 12, 9]), actual_mle_message.command.tlvs[7])
1756*cfb92d14SAndroid Build Coastguard Worker
1757*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(bytearray(data[-4:]), actual_mle_message.mic)
1758*cfb92d14SAndroid Build Coastguard Worker
1759*cfb92d14SAndroid Build Coastguard Worker    def test_should_create_MleMessageSecured_with_MLE_Data_Response_from_bytearray_when_parse_method_is_called(self):
1760*cfb92d14SAndroid Build Coastguard Worker        # GIVEN
1761*cfb92d14SAndroid Build Coastguard Worker        message_info = common.MessageInfo()
1762*cfb92d14SAndroid Build Coastguard Worker        message_info.source_ipv6 = "fe80::241c:b11b:7b62:caf1"
1763*cfb92d14SAndroid Build Coastguard Worker        message_info.destination_ipv6 = "ff02::1"
1764*cfb92d14SAndroid Build Coastguard Worker
1765*cfb92d14SAndroid Build Coastguard Worker        message_info.source_mac_address = common.MacAddress.from_eui64(
1766*cfb92d14SAndroid Build Coastguard Worker            bytearray([0x26, 0x1c, 0xb1, 0x1b, 0x7b, 0x62, 0xca, 0xf1]))
1767*cfb92d14SAndroid Build Coastguard Worker        message_info.destination_mac_address = common.MacAddress.from_eui64(
1768*cfb92d14SAndroid Build Coastguard Worker            bytearray([0x3a, 0xba, 0xad, 0xca, 0xfe, 0xde, 0xff, 0xa5]))
1769*cfb92d14SAndroid Build Coastguard Worker
1770*cfb92d14SAndroid Build Coastguard Worker        data = bytearray([
1771*cfb92d14SAndroid Build Coastguard Worker            0x00, 0x15, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xca, 0xd3, 0x45, 0xe2, 0x35, 0x1d, 0x00,
1772*cfb92d14SAndroid Build Coastguard Worker            0x2d, 0x72, 0x71, 0xb1, 0x19, 0xaf, 0x8b, 0x05, 0xd9, 0x52, 0x74, 0xce, 0xe6, 0x36, 0x53, 0xeb, 0xc6, 0x25,
1773*cfb92d14SAndroid Build Coastguard Worker            0x94, 0x01, 0x6d, 0x20, 0xdf, 0x30, 0x82, 0xf8, 0xbb, 0x34, 0x47, 0x42, 0x50, 0xe9, 0x41, 0xa7, 0x33, 0xa5
1774*cfb92d14SAndroid Build Coastguard Worker        ])
1775*cfb92d14SAndroid Build Coastguard Worker
1776*cfb92d14SAndroid Build Coastguard Worker        factory = config.create_default_mle_message_factory(network_key=config.DEFAULT_NETWORK_KEY)
1777*cfb92d14SAndroid Build Coastguard Worker
1778*cfb92d14SAndroid Build Coastguard Worker        # WHEN
1779*cfb92d14SAndroid Build Coastguard Worker        actual_mle_message = factory.parse(io.BytesIO(data), message_info)
1780*cfb92d14SAndroid Build Coastguard Worker
1781*cfb92d14SAndroid Build Coastguard Worker        # THEN
1782*cfb92d14SAndroid Build Coastguard Worker        self.assertTrue(isinstance(actual_mle_message, mle.MleMessageSecured))
1783*cfb92d14SAndroid Build Coastguard Worker
1784*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(8, actual_mle_message.command.type)
1785*cfb92d14SAndroid Build Coastguard Worker
1786*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(mle.SourceAddress(address=0x9400), actual_mle_message.command.tlvs[0])
1787*cfb92d14SAndroid Build Coastguard Worker
1788*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(
1789*cfb92d14SAndroid Build Coastguard Worker            mle.LeaderData(partition_id=0x06d014ca,
1790*cfb92d14SAndroid Build Coastguard Worker                           weighting=64,
1791*cfb92d14SAndroid Build Coastguard Worker                           data_version=131,
1792*cfb92d14SAndroid Build Coastguard Worker                           stable_data_version=168,
1793*cfb92d14SAndroid Build Coastguard Worker                           leader_router_id=37), actual_mle_message.command.tlvs[1])
1794*cfb92d14SAndroid Build Coastguard Worker
1795*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(
1796*cfb92d14SAndroid Build Coastguard Worker            mle.NetworkData(tlvs=[
1797*cfb92d14SAndroid Build Coastguard Worker                network_data.Prefix(domain_id=0,
1798*cfb92d14SAndroid Build Coastguard Worker                                    prefix_length=64,
1799*cfb92d14SAndroid Build Coastguard Worker                                    prefix=bytearray([0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34]),
1800*cfb92d14SAndroid Build Coastguard Worker                                    sub_tlvs=[
1801*cfb92d14SAndroid Build Coastguard Worker                                        network_data.LowpanId(c=1, cid=1, context_length=64, stable=1),
1802*cfb92d14SAndroid Build Coastguard Worker                                        network_data.BorderRouter(
1803*cfb92d14SAndroid Build Coastguard Worker                                            border_router_16=37888, prf=0, p=1, s=1, d=0, c=0, r=1, o=1, n=0, stable=1)
1804*cfb92d14SAndroid Build Coastguard Worker                                    ],
1805*cfb92d14SAndroid Build Coastguard Worker                                    stable=1)
1806*cfb92d14SAndroid Build Coastguard Worker            ]), actual_mle_message.command.tlvs[2])
1807*cfb92d14SAndroid Build Coastguard Worker
1808*cfb92d14SAndroid Build Coastguard Worker        self.assertEqual(bytearray(data[-4:]), actual_mle_message.mic)
1809*cfb92d14SAndroid Build Coastguard Worker
1810*cfb92d14SAndroid Build Coastguard Worker
1811*cfb92d14SAndroid Build Coastguard Workerif __name__ == "__main__":
1812*cfb92d14SAndroid Build Coastguard Worker    unittest.main()
1813