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