def test(self): # 1. Ensure topology is formed correctly without DUT_ROUTER1. self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') for i in range(2, 17): self.nodes[i].start() self.simulator.go(5) for i in range(2, 17): self.assertEqual(self.nodes[i].get_state(), 'router') # 2. DUT_REED: Attach to network. Verify it didn't send an Address Solicit Request. # Avoid DUT_REED attach to DUT_ROUTER1. self.nodes[DUT_REED].add_whitelist( self.nodes[DUT_ROUTER1].get_addr64(), config.RSSI['LINK_QULITY_1']) self.nodes[DUT_REED].start() self.simulator.go(5) self.assertEqual(self.nodes[DUT_REED].get_state(), 'child') # The DUT_REED must not send a coap message here. reed_messages = self.simulator.get_messages_sent_by(DUT_REED) msg = reed_messages.does_not_contain_coap_message() assert msg is True, "Error: The DUT_REED sent an Address Solicit Request" # 3. DUT_REED: Verify sent a Link Request to at least 3 neighboring Routers. for i in range(0, 3): msg = reed_messages.next_mle_message(mle.CommandType.LINK_REQUEST) command.check_link_request(msg, source_address = command.CheckType.CONTAIN, \ leader_data = command.CheckType.CONTAIN) # 4. DUT_ROUTER1: Verify sent a Link Accept to DUT_REED. self.simulator.go(30) dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) flag_link_accept = False while True: msg = dut_messages.next_mle_message(mle.CommandType.LINK_ACCEPT, False) if msg == None: break destination_link_local = self.nodes[DUT_REED].get_ip6_address( config.ADDRESS_TYPE.LINK_LOCAL) if ipv6.ip_address( destination_link_local ) == msg.ipv6_packet.ipv6_header.destination_address: flag_link_accept = True break assert flag_link_accept is True, "Error: DUT_ROUTER1 didn't send a Link Accept to DUT_REED" command.check_link_accept(msg, self.nodes[DUT_REED])
def test(self): # 1. Ensure topology is formed correctly without DUT_ROUTER1. self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') for i in range(2, 17): self.nodes[i].start() self.simulator.go(10) for i in range(2, 17): self.assertEqual(self.nodes[i].get_state(), 'router') # 2. DUT_REED: Attach to network. Verify it didn't send an Address Solicit Request. # Avoid DUT_REED attach to DUT_ROUTER1. self.nodes[DUT_REED].add_whitelist(self.nodes[DUT_ROUTER1].get_addr64(), config.RSSI['LINK_QULITY_1']) self.nodes[DUT_REED].start() self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL) self.assertEqual(self.nodes[DUT_REED].get_state(), 'child') # The DUT_REED must not send a coap message here. reed_messages = self.simulator.get_messages_sent_by(DUT_REED) msg = reed_messages.does_not_contain_coap_message() assert msg is True, "Error: The DUT_REED sent an Address Solicit Request" # 3. DUT_REED: Verify sent a Link Request to at least 3 neighboring Routers. for i in range(0, MLE_MIN_LINKS): msg = reed_messages.next_mle_message(mle.CommandType.LINK_REQUEST) command.check_link_request(msg, source_address = command.CheckType.CONTAIN, \ leader_data = command.CheckType.CONTAIN) # 4. DUT_REED: Verify at least 3 Link Accept messages sent to DUT_REED. self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL) link_accept_count = 0 destination_link_local = self.nodes[DUT_REED].get_ip6_address(config.ADDRESS_TYPE.LINK_LOCAL) for i in range(1, DUT_REED): dut_messages = self.simulator.get_messages_sent_by(i) while True: msg = dut_messages.next_mle_message(mle.CommandType.LINK_ACCEPT, False) if msg == None: break if ipv6.ip_address(destination_link_local) == msg.ipv6_packet.ipv6_header.destination_address: command.check_link_accept(msg, self.nodes[DUT_REED]) link_accept_count += 1 break assert (link_accept_count >= MLE_MIN_LINKS) is True, "Error: too few Link Accept sent to DUT_REED"
def test(self): # 1. Ensure topology is formed correctly without DUT_ROUTER1. self.nodes[LEADER].start() self.nodes[LEADER].set_state('leader') self.assertEqual(self.nodes[LEADER].get_state(), 'leader') for i in range(2, 17): self.nodes[i].start() time.sleep(5) for i in range(2, 17): self.assertEqual(self.nodes[i].get_state(), 'router') # 2. DUT_REED: Attach to network. Verify it didn't send an Address Solicit Request. # Avoid DUT_REED attach to DUT_ROUTER1. self.nodes[DUT_REED].add_whitelist(self.nodes[DUT_ROUTER1].get_addr64(), config.RSSI['LINK_QULITY_1']) self.nodes[DUT_REED].start() time.sleep(5) self.assertEqual(self.nodes[DUT_REED].get_state(), 'child') # The DUT_REED must not send a coap message here. reed_messages = self.sniffer.get_messages_sent_by(DUT_REED) msg = reed_messages.does_not_contain_coap_message() assert msg is True, "Error: The DUT_REED sent an Address Solicit Request" # 3. DUT_REED: Verify sent a Link Request to at least 3 neighboring Routers. for i in range(0, 3): msg = reed_messages.next_mle_message(mle.CommandType.LINK_REQUEST) command.check_link_request(msg) # 4. DUT_ROUTER1: Verify sent a Link Accept to DUT_REED. time.sleep(30) dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER1) flag_link_accept = False while True: msg = dut_messages.next_mle_message(mle.CommandType.LINK_ACCEPT, False) if msg == None : break destination_link_local = self.nodes[DUT_REED].get_ip6_address(config.ADDRESS_TYPE.LINK_LOCAL) if ipv6.ip_address(destination_link_local) == msg.ipv6_packet.ipv6_header.destination_address: flag_link_accept = True break assert flag_link_accept is True, "Error: DUT_ROUTER1 didn't send a Link Accept to DUT_REED" command.check_link_accept(msg, self.nodes[DUT_REED])
def test(self): # 1 ALL: Build and verify the topology self.nodes[DUT_LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader') self.nodes[DUT_ROUTER1].start() self.simulator.go(5) self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router') # 2 DUT_LEADER, DUT_ROUTER1: Verify both DUT_LEADER and DUT_ROUTER1 # send MLE Advertisement message leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) command.check_mle_advertisement(msg) router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) msg = router1_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) command.check_mle_advertisement(msg) # Send a harness helper ping to the DUT router1_rloc = self.nodes[DUT_ROUTER1].get_ip6_address( config.ADDRESS_TYPE.RLOC) self.assertTrue(self.nodes[DUT_LEADER].ping(router1_rloc)) leader_rloc = self.nodes[DUT_LEADER].get_ip6_address( config.ADDRESS_TYPE.RLOC) self.assertTrue(self.nodes[DUT_ROUTER1].ping(leader_rloc)) # 3 DUT_LEADER: Reset DUT_LEADER leader_rloc16 = self.nodes[DUT_LEADER].get_addr16() self.nodes[DUT_LEADER].reset() self._setUpLeader() # Clean sniffer's buffer self.simulator.get_messages_sent_by(DUT_LEADER) self.simulator.get_messages_sent_by(DUT_ROUTER1) # DUT_LEADER sleep time is less than leader timeout value self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL) # Verify DUT_LEADER didn't send MLE Advertisement messages leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT, False) self.assertTrue(msg is None) self.nodes[DUT_LEADER].start() # Verify the DUT_LEADER is still a leader self.simulator.go(5) self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader') self.assertEqual(self.nodes[DUT_LEADER].get_addr16(), leader_rloc16) # 4 DUT_LEADER: Verify DUT_LEADER sent a multicast Link Request message leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) leader_messages_temp = copy.deepcopy(leader_messages) msg = leader_messages.next_mle_message(mle.CommandType.LINK_REQUEST) command.check_link_request( msg, tlv_request_address16=command.CheckType.CONTAIN, tlv_request_route64=command.CheckType.CONTAIN, ) # 5 DUT_ROUTER1: Verify DUT_ROUTER1 replied with Link Accept message router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) router1_messages_temp = copy.deepcopy(router1_messages) msg = router1_messages.next_mle_message(mle.CommandType.LINK_ACCEPT) if msg is not None: command.check_link_accept( msg, self.nodes[DUT_LEADER], address16=command.CheckType.CONTAIN, leader_data=command.CheckType.CONTAIN, route64=command.CheckType.CONTAIN, ) else: msg = router1_messages_temp.next_mle_message( mle.CommandType.LINK_ACCEPT_AND_REQUEST) self.assertTrue(msg is not None) command.check_link_accept( msg, self.nodes[DUT_LEADER], address16=command.CheckType.CONTAIN, leader_data=command.CheckType.CONTAIN, route64=command.CheckType.CONTAIN, challenge=command.CheckType.CONTAIN, ) # 6 DUT_LEADER: Verify DUT_LEADER didn't send a Parent Request message msg = leader_messages_temp.next_mle_message( mle.CommandType.PARENT_REQUEST, False) self.assertTrue(msg is None) # 7 ALL: Verify connectivity by sending an ICMPv6 Echo Request from # DUT_LEADER to DUT_ROUTER1 link local address router1_link_local_address = self.nodes[DUT_ROUTER1].get_ip6_address( config.ADDRESS_TYPE.LINK_LOCAL) self.assertTrue( self.nodes[DUT_LEADER].ping(router1_link_local_address))
def test(self): # 1. Ensure topology is formed correctly without DUT_ROUTER1. self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') for i in range(2, 17): self.nodes[i].start() self.simulator.go(10) for i in range(2, 17): self.assertEqual(self.nodes[i].get_state(), 'router') # 2. DUT_REED: Attach to network. Verify it didn't send an Address Solicit Request. # Avoid DUT_REED attach to DUT_ROUTER1. self.nodes[DUT_REED].add_allowlist( self.nodes[DUT_ROUTER1].get_addr64(), config.RSSI['LINK_QULITY_1']) self.nodes[DUT_REED].start() self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL) self.assertEqual(self.nodes[DUT_REED].get_state(), 'child') # The DUT_REED must not send a coap message here. reed_messages = self.simulator.get_messages_sent_by(DUT_REED) msg = reed_messages.does_not_contain_coap_message() assert (msg is True), "Error: The DUT_REED sent an Address Solicit Request" # 3. DUT_REED: Verify sent a Link Request to at least 3 neighboring # Routers. for i in range(0, MLE_MIN_LINKS): msg = reed_messages.next_mle_message(mle.CommandType.LINK_REQUEST) command.check_link_request( msg, source_address=command.CheckType.CONTAIN, leader_data=command.CheckType.CONTAIN, ) # 4. DUT_REED: Verify at least 3 Link Accept messages sent to DUT_REED. self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL) link_accept_count = 0 destination_link_local = self.nodes[DUT_REED].get_ip6_address( config.ADDRESS_TYPE.LINK_LOCAL) for i in range(1, DUT_REED): dut_messages = self.simulator.get_messages_sent_by(i) while True: msg = dut_messages.next_mle_message( mle.CommandType.LINK_ACCEPT, False) if msg is None: break if (ipv6.ip_address(destination_link_local) == msg.ipv6_packet.ipv6_header.destination_address): command.check_link_accept(msg, self.nodes[DUT_REED]) link_accept_count += 1 break assert (link_accept_count >= MLE_MIN_LINKS ) is True, "Error: too few Link Accept sent to DUT_REED"
def test(self): # 1 ALL: Build and verify the topology self.nodes[DUT_LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader') self.nodes[DUT_ROUTER1].start() self.simulator.go(5) self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router') # 2 DUT_LEADER, DUT_ROUTER1: Verify both DUT_LEADER and DUT_ROUTER1 send MLE Advertisement message leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) command.check_mle_advertisement(msg) router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) msg = router1_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) command.check_mle_advertisement(msg) # Send a harness helper ping to the DUT router1_rloc = self.nodes[DUT_ROUTER1].get_ip6_address(config.ADDRESS_TYPE.RLOC) self.assertTrue(self.nodes[DUT_LEADER].ping(router1_rloc)) leader_rloc = self.nodes[DUT_LEADER].get_ip6_address(config.ADDRESS_TYPE.RLOC) self.assertTrue(self.nodes[DUT_ROUTER1].ping(leader_rloc)) # 3 DUT_LEADER: Reset DUT_LEADER leader_rloc16 = self.nodes[DUT_LEADER].get_addr16() self.nodes[DUT_LEADER].reset() self._setUpLeader() # Clean sniffer's buffer self.simulator.get_messages_sent_by(DUT_LEADER) self.simulator.get_messages_sent_by(DUT_ROUTER1) # DUT_LEADER sleep time is less than leader timeout value self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL) # Verify DUT_LEADER didn't send MLE Advertisement messages leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT, False) self.assertTrue(msg is None) self.nodes[DUT_LEADER].start() # Verify the DUT_LEADER is still a leader self.simulator.go(5) self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader') self.assertEqual(self.nodes[DUT_LEADER].get_addr16(), leader_rloc16) # 4 DUT_LEADER: Verify DUT_LEADER sent a multicast Link Request message leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) leader_messages_temp = copy.deepcopy(leader_messages) msg = leader_messages.next_mle_message(mle.CommandType.LINK_REQUEST) command.check_link_request(msg, tlv_request_address16 = command.CheckType.CONTAIN, \ tlv_request_route64 = command.CheckType.CONTAIN) # 5 DUT_ROUTER1: Verify DUT_ROUTER1 replied with Link Accept message router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) router1_messages_temp = copy.deepcopy(router1_messages) msg = router1_messages.next_mle_message(mle.CommandType.LINK_ACCEPT) if msg is not None: command.check_link_accept(msg, self.nodes[DUT_LEADER], address16 = command.CheckType.CONTAIN, \ leader_data = command.CheckType.CONTAIN, route64 = command.CheckType.CONTAIN) else: msg = router1_messages_temp.next_mle_message(mle.CommandType.LINK_ACCEPT_AND_REQUEST) self.assertTrue(msg is not None) command.check_link_accept(msg, self.nodes[DUT_LEADER], address16 = command.CheckType.CONTAIN, \ leader_data = command.CheckType.CONTAIN, route64 = command.CheckType.CONTAIN, \ challenge = command.CheckType.CONTAIN) # 6 DUT_LEADER: Verify DUT_LEADER didn't send a Parent Request message msg = leader_messages_temp.next_mle_message(mle.CommandType.PARENT_REQUEST, False) self.assertTrue(msg is None) # 7 ALL: Verify connectivity by sending an ICMPv6 Echo Request from DUT_LEADER to DUT_ROUTER1 link local address router1_link_local_address = self.nodes[DUT_ROUTER1].get_ip6_address(config.ADDRESS_TYPE.LINK_LOCAL) self.assertTrue(self.nodes[DUT_LEADER].ping(router1_link_local_address))