def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') # 1 DUT_ROUTER1: Attach to LEADER self.nodes[DUT_ROUTER1].start() self.simulator.go(5) self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router') # DUT_ROUTER1: Verify MLE advertisements router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) msg = router1_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) command.check_mle_advertisement(msg) # 2 REED1: Attach to DUT_ROUTER1 self.nodes[REED1].start() self.simulator.go(5) self.assertEqual(self.nodes[REED1].get_state(), 'child') # 3 DUT_ROUTER1: Verify MLE Parent Response router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) msg = router1_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE) msg.assertSentToNode(self.nodes[REED1]) command.check_parent_response(msg) # 4 DUT_ROUTER1: Verify MLE Child ID Response msg = router1_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE) msg.assertSentToNode(self.nodes[REED1]) command.check_child_id_response(msg) # 5 Omitted # 6 MED1: Attach to REED1 self.nodes[MED1].start() self.simulator.go(5) self.assertEqual(self.nodes[MED1].get_state(), 'child') # 7 REED1: Verify sending Address Solicit Request to DUT_ROUTER1 reed1_messages = self.simulator.get_messages_sent_by(REED1) msg = reed1_messages.next_coap_message('0.02') reed1_ipv6_address = msg.ipv6_packet.ipv6_header.source_address.compressed msg.assertSentToNode(self.nodes[DUT_ROUTER1]); msg.assertCoapMessageRequestUriPath('/a/as') # 8 DUT_ROUTER1: Verify forwarding REED1's Address Solicit Request to LEADER router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) msg = router1_messages.next_coap_message('0.02') msg.assertSentToNode(self.nodes[LEADER]); msg.assertCoapMessageRequestUriPath('/a/as') # DUT_ROUTER1: Verify forwarding LEADER's Address Solicit Response to REED1 msg = router1_messages.next_coap_message('2.04') msg.assertSentToDestinationAddress(reed1_ipv6_address) # 9 LEADER: Verify connectivity by sending an ICMPv6 Echo Request to REED1 for addr in self.nodes[REED1].get_addrs(): if addr[0:4] != 'fe80': self.assertTrue(self.nodes[LEADER].ping(addr))
def test(self): # 1 self.nodes[DUT_LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader') for i in range(ROUTER1, MED3 + 1): self.nodes[i].start() self.simulator.go(5) for i in [ROUTER1, ROUTER2]: self.assertEqual(self.nodes[i].get_state(), 'router') for i in MTDS: self.assertEqual(self.nodes[i].get_state(), 'child') # 2 leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) command.check_mle_advertisement(msg) # 3 self.nodes[ROUTER2].add_prefix('2001:2:0:1::/64', 'paros') self.nodes[ROUTER2].register_netdata() # Set lowpan context of sniffer self.simulator.set_lowpan_context(1, '2001:2:0:1::/64') self.nodes[MED1].add_ipaddr('2001:2:0:1::1234') self.nodes[SED1].add_ipaddr('2001:2:0:1::1234') self.simulator.go(5) # 4 # Flush the message queue to avoid possible impact on follow-up # verification. self.simulator.get_messages_sent_by(DUT_LEADER) self.nodes[MED3].ping('2001:2:0:1::1234') # Verify DUT_LEADER sent an Address Query Request to the Realm local # address. dut_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = dut_messages.next_coap_message('0.02', '/a/aq') command.check_address_query(msg, self.nodes[DUT_LEADER], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS) # 5 & 6 # Verify DUT_LEADER sent an Address Error Notification to the Realm # local address. self.simulator.go(5) dut_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = dut_messages.next_coap_message('0.02', '/a/ae') command.check_address_error_notification( msg, self.nodes[DUT_LEADER], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
def test(self): # 1 self.nodes[DUT_LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader') for i in range(ROUTER1, MED3 + 1): self.nodes[i].start() self.simulator.go(5) for i in [ROUTER1, ROUTER2]: self.assertEqual(self.nodes[i].get_state(), 'router') for i in MTDS: self.assertEqual(self.nodes[i].get_state(), 'child') # 2 leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) command.check_mle_advertisement(msg) # 3 self.nodes[ROUTER2].add_prefix('2001:2:0:1::/64', 'paros') self.nodes[ROUTER2].register_netdata() # Set lowpan context of sniffer self.simulator.set_lowpan_context(1, '2001:2:0:1::/64') self.nodes[MED1].add_ipaddr('2001:2:0:1::1234') self.nodes[SED1].add_ipaddr('2001:2:0:1::1234') self.simulator.go(5) # 4 # Flush the message queue to avoid possible impact on follow-up verification. self.simulator.get_messages_sent_by(DUT_LEADER) self.nodes[MED3].ping('2001:2:0:1::1234') # Verify DUT_LEADER sent an Address Query Request to the Realm local address. dut_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = dut_messages.next_coap_message('0.02', '/a/aq') command.check_address_query(msg, self.nodes[DUT_LEADER], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS) # 5 & 6 # Verify DUT_LEADER sent an Address Error Notification to the Realm local address. self.simulator.go(5) dut_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = dut_messages.next_coap_message('0.02', '/a/ae') command.check_address_error_notification(msg, self.nodes[DUT_LEADER], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
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): self.nodes[DUT_LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader') self.nodes[BR].start() self.simulator.go(5) self.assertEqual(self.nodes[BR].get_state(), 'router') # 1 BR: Configure BR to be a DHCPv6 server self.nodes[BR].add_prefix('2001::/64', 'pdros') self.nodes[BR].add_prefix('2002::/64', 'pdros') self.nodes[BR].add_prefix('2003::/64', 'pdros') self.nodes[BR].register_netdata() # Set lowpan context of sniffer self.simulator.set_lowpan_context(1, '2001::/64') self.simulator.set_lowpan_context(2, '2002::/64') self.simulator.set_lowpan_context(3, '2003::/64') # 2 DUT_LEADER: Verify LEADER sent an Advertisement leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) command.check_mle_advertisement(msg) # 3 MED1, MED2: MED1 and MED2 attach to DUT_LEADER for i in MTDS: self.nodes[i].start() self.simulator.go(5) self.assertEqual(self.nodes[i].get_state(), 'child') # 4 MED1: MED1 send an ICMPv6 Echo Request to the MED2 ML-EID med2_ml_eid = self.nodes[MED2].get_ip6_address(config.ADDRESS_TYPE.ML_EID) self.assertTrue(med2_ml_eid != None) self.assertTrue(self.nodes[MED1].ping(med2_ml_eid)) # Verify DUT_LEADER didn't generate an Address Query Request leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_coap_message('0.02', '/a/aq', False) assert msg is None, "Error: The DUT_LEADER sent an unexpected Address Query Request" # Wait for sniffer got packets self.simulator.go(1) # Verify MED2 sent an ICMPv6 Echo Reply med2_messages = self.simulator.get_messages_sent_by(MED2) msg = med2_messages.get_icmp_message(ipv6.ICMP_ECHO_RESPONSE) assert msg is not None, "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1" # 5 MED1: MED1 send an ICMPv6 Echo Request to the MED2 2001::GUA addr = self.nodes[MED2].get_addr("2001::/64") self.assertTrue(addr is not None) self.assertTrue(self.nodes[MED1].ping(addr)) # Verify DUT_LEADER didn't generate an Address Query Request leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_coap_message('0.02', '/a/aq', False) assert msg is None, "Error: The DUT_LEADER sent an unexpected Address Query Request" # Wait for sniffer got packets self.simulator.go(1) # Verify MED2 sent an ICMPv6 Echo Reply med2_messages = self.simulator.get_messages_sent_by(MED2) msg = med2_messages.get_icmp_message(ipv6.ICMP_ECHO_RESPONSE) assert msg is not None, "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1" # 6 MED1: MED1 send an ICMPv6 Echo Request to the MED2 2002::GUA addr = self.nodes[MED2].get_addr("2002::/64") self.assertTrue(addr is not None) self.assertTrue(self.nodes[MED1].ping(addr)) # Verify DUT_LEADER didn't generate an Address Query Request leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_coap_message('0.02', '/a/aq', False) assert msg is None, "Error: The DUT_LEADER sent an unexpected Address Query Request" # Wait for sniffer got packets self.simulator.go(1) # Verify MED2 sent an ICMPv6 Echo Reply med2_messages = self.simulator.get_messages_sent_by(MED2) msg = med2_messages.get_icmp_message(ipv6.ICMP_ECHO_RESPONSE) assert msg is not None, "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1" # 7 MED1: MED1 send an ICMPv6 Echo Request to the MED2 2003::GUA addr = self.nodes[MED2].get_addr("2003::/64") self.assertTrue(addr is not None) self.assertTrue(self.nodes[MED1].ping(addr)) # Verify DUT_LEADER didn't generate an Address Query Request leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER) msg = leader_messages.next_coap_message('0.02', '/a/aq', False) assert msg is None, "Error: The DUT_LEADER sent an unexpected Address Query Request" # Wait for sniffer got packets self.simulator.go(1) # Verify MED2 sent an ICMPv6 Echo Reply med2_messages = self.simulator.get_messages_sent_by(MED2) msg = med2_messages.get_icmp_message(ipv6.ICMP_ECHO_RESPONSE) assert msg is not None, "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1"
def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') # 1 DUT_ROUTER1: Attach to LEADER self.nodes[DUT_ROUTER1].start() self.simulator.go(5) self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router') # DUT_ROUTER1: Verify MLE advertisements router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) msg = router1_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) command.check_mle_advertisement(msg) # 2 REED1: Attach to DUT_ROUTER1 self.nodes[REED1].start() self.simulator.go(5) self.assertEqual(self.nodes[REED1].get_state(), 'child') # 3 DUT_ROUTER1: Verify MLE Parent Response router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) msg = router1_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE) msg.assertSentToNode(self.nodes[REED1]) command.check_parent_response(msg) # 4 DUT_ROUTER1: Verify MLE Child ID Response msg = router1_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE) msg.assertSentToNode(self.nodes[REED1]) command.check_child_id_response(msg) # 5 Omitted # 6 MED1: Attach to REED1 self.nodes[MED1].start() self.simulator.go(5) self.assertEqual(self.nodes[MED1].get_state(), 'child') # 7 REED1: Verify sending Address Solicit Request to DUT_ROUTER1 reed1_messages = self.simulator.get_messages_sent_by(REED1) msg = reed1_messages.next_coap_message('0.02') reed1_ipv6_address = msg.ipv6_packet.ipv6_header.source_address.compressed msg.assertSentToNode(self.nodes[DUT_ROUTER1]); msg.assertCoapMessageRequestUriPath('/a/as') # 8 DUT_ROUTER1: Verify forwarding REED1's Address Solicit Request to LEADER router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1) msg = router1_messages.next_coap_message('0.02') msg.assertSentToNode(self.nodes[LEADER]); msg.assertCoapMessageRequestUriPath('/a/as') # DUT_ROUTER1: Verify forwarding LEADER's Address Solicit Response to REED1 msg = router1_messages.next_coap_message('2.04') msg.assertSentToDestinationAddress(reed1_ipv6_address) self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL) # 9 LEADER: Verify connectivity by sending an ICMPv6 Echo Request to REED1 for addr in self.nodes[REED1].get_addrs(): if addr[0:4] != 'fe80': self.assertTrue(self.nodes[LEADER].ping(addr))
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))