def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[REED].start() self.simulator.go(5) self.assertEqual(self.nodes[REED].get_state(), 'child') self.nodes[SED].start() self.simulator.go(5) self.assertEqual(self.nodes[SED].get_state(), 'child') self.assertEqual(self.nodes[REED].get_state(), 'router') sed_messages = self.simulator.get_messages_sent_by(SED) # Step 2 - DUT sends MLE Parent Request msg = sed_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) check_parent_request(msg, is_first_request=True) # Step 4 - DUT sends MLE Parent Request again msg = sed_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) check_parent_request(msg, is_first_request=False) # Step 6 - DUT sends Child ID Request msg = sed_messages.next_mle_message( mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[REED] ) check_child_id_request( msg, address_registration=CheckType.CONTAIN, tlv_request=CheckType.CONTAIN, mle_frame_counter=CheckType.OPTIONAL, route64=CheckType.OPTIONAL, ) # Wait DEFAULT_CHILD_TIMEOUT seconds, # ensure SED has received the CHILD_ID_RESPONSE, # and the next data requests would be keep-alive messages self.simulator.go(config.DEFAULT_CHILD_TIMEOUT) sed_messages = self.simulator.get_messages_sent_by(SED) # Step 11 - SED sends periodic 802.15.4 Data Request messages msg = sed_messages.next_message() self.assertEqual( False, msg.isMacAddressTypeLong() ) # Extra check, keep-alive messages are of short types of mac address self.assertEqual(msg.type, message.MessageType.COMMAND) self.assertEqual( msg.mac_header.command_type, mac802154.MacHeader.CommandIdentifier.DATA_REQUEST, ) # Step 12 - REED sends ICMPv6 echo request, to DUT link local address sed_addrs = self.nodes[SED].get_addrs() for addr in sed_addrs: if addr[0:4] == 'fe80': self.assertTrue(self.nodes[REED].ping(addr))
def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[ROUTER1].start() self.simulator.go(5) self.assertEqual(self.nodes[ROUTER1].get_state(), 'router') rloc16 = self.nodes[ROUTER1].get_addr16() for addr in self.nodes[ROUTER1].get_addrs(): self.assertTrue(self.nodes[LEADER].ping(addr)) self.nodes[LEADER].release_router_id(rloc16 >> 10) self.simulator.go(5) self.assertEqual(self.nodes[ROUTER1].get_state(), 'router') leader_messages = self.simulator.get_messages_sent_by(LEADER) router1_messages = self.simulator.get_messages_sent_by(ROUTER1) # 1 - All leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) router1_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) leader_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE) router1_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST) leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE) msg = router1_messages.next_coap_message("0.02") msg.assertCoapMessageRequestUriPath("/a/as") leader_messages.next_coap_message("2.04") # 2 - N/A # 3 - Router1 msg = router1_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) command.check_parent_request(msg, is_first_request=True) msg = router1_messages.next_mle_message( mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[LEADER]) command.check_child_id_request( msg, tlv_request=CheckType.CONTAIN, mle_frame_counter=CheckType.OPTIONAL, address_registration=CheckType.NOT_CONTAIN, active_timestamp=CheckType.OPTIONAL, pending_timestamp=CheckType.OPTIONAL, ) msg = router1_messages.next_coap_message(code="0.02") command.check_address_solicit(msg, was_router=True) # 4 - Router1 for addr in self.nodes[ROUTER1].get_addrs(): self.assertTrue(self.nodes[LEADER].ping(addr))
def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[REED].start() self.simulator.go(5) self.assertEqual(self.nodes[REED].get_state(), 'child') self.nodes[MED].start() self.simulator.go(5) self.assertEqual(self.nodes[MED].get_state(), 'child') self.assertEqual(self.nodes[REED].get_state(), 'router') med_messages = self.simulator.get_messages_sent_by(MED) # Step 2 - DUT sends MLE Parent Request msg = med_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) check_parent_request(msg, is_first_request=True) # Step 4 - DUT sends MLE Parent Request again msg = med_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) check_parent_request(msg, is_first_request=False) # Step 6 - DUT sends Child ID Request msg = med_messages.next_mle_message( mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[REED] ) check_child_id_request( msg, address_registration=CheckType.CONTAIN, tlv_request=CheckType.CONTAIN, mle_frame_counter=CheckType.OPTIONAL, route64=CheckType.OPTIONAL, ) # Wait additional DEFAULT_CHILD_TIMEOUT to ensure the keep-alive # message (child update request from MED) happens. self.simulator.go(config.DEFAULT_CHILD_TIMEOUT) med_messages = self.simulator.get_messages_sent_by(MED) # Step 8 - DUT sends Child Update messages msg = med_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_REQUEST ) check_child_update_request_from_child( msg, source_address=CheckType.CONTAIN, leader_data=CheckType.CONTAIN, ) # Step 10 - Leader sends ICMPv6 echo request, to DUT link local address med_addrs = self.nodes[MED].get_addrs() for addr in med_addrs: if addr[0:4] == 'fe80': self.assertTrue(self.nodes[REED].ping(addr))
def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[ROUTER1].start() self.simulator.go(5) self.assertEqual(self.nodes[ROUTER1].get_state(), 'router') rloc16 = self.nodes[ROUTER1].get_addr16() for addr in self.nodes[ROUTER1].get_addrs(): self.assertTrue(self.nodes[LEADER].ping(addr)) self.nodes[LEADER].release_router_id(rloc16 >> 10) self.simulator.go(5) self.assertEqual(self.nodes[ROUTER1].get_state(), 'router') leader_messages = self.simulator.get_messages_sent_by(LEADER) router1_messages = self.simulator.get_messages_sent_by(ROUTER1) # 1 - All leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) router1_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) leader_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE) router1_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST) leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE) msg = router1_messages.next_coap_message("0.02") msg.assertCoapMessageRequestUriPath("/a/as") leader_messages.next_coap_message("2.04") # 2 - N/A # 3 - Router1 msg = router1_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) command.check_parent_request(msg, is_first_request=True) msg = router1_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[LEADER]) command.check_child_id_request(msg, tlv_request=CheckType.CONTAIN, mle_frame_counter=CheckType.OPTIONAL, address_registration=CheckType.NOT_CONTAIN, active_timestamp=CheckType.OPTIONAL, pending_timestamp=CheckType.OPTIONAL) msg = router1_messages.next_coap_message(code="0.02") command.check_address_solicit(msg, was_router=True) # 4 - Router1 for addr in self.nodes[ROUTER1].get_addrs(): self.assertTrue(self.nodes[LEADER].ping(addr))
def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[REED].start() self.simulator.go(5) self.assertEqual(self.nodes[REED].get_state(), 'child') self.nodes[SED].start() self.simulator.go(5) self.assertEqual(self.nodes[SED].get_state(), 'child') self.assertEqual(self.nodes[REED].get_state(), 'router') sed_messages = self.simulator.get_messages_sent_by(SED) # Step 2 - DUT sends MLE Parent Request msg = sed_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) check_parent_request(msg, is_first_request=True) # Step 4 - DUT sends MLE Parent Request again msg = sed_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) check_parent_request(msg, is_first_request=False) # Step 6 - DUT sends Child ID Request msg = sed_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[REED]) check_child_id_request(msg, address_registration=CheckType.CONTAIN, tlv_request=CheckType.CONTAIN, mle_frame_counter=CheckType.OPTIONAL, route64=CheckType.OPTIONAL) # Wait DEFAULT_CHILD_TIMEOUT seconds, # ensure SED has received the CHILD_ID_RESPONSE, # and the next data requests would be keep-alive messages self.simulator.go(config.DEFAULT_CHILD_TIMEOUT) sed_messages = self.simulator.get_messages_sent_by(SED) # Step 11 - SED sends periodic 802.15.4 Data Request messages msg = sed_messages.next_message() self.assertEqual(False, msg.isMacAddressTypeLong()) # Extra check, keep-alive messages are of short types of mac address self.assertEqual(msg.type, message.MessageType.COMMAND) self.assertEqual(msg.mac_header.command_type, mac802154.MacHeader.CommandIdentifier.DATA_REQUEST) # Step 12 - REED sends ICMPv6 echo request, to DUT link local address sed_addrs = self.nodes[SED].get_addrs() for addr in sed_addrs: if addr[0:4] == 'fe80': self.assertTrue(self.nodes[REED].ping(addr))
def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[REED].start() self.simulator.go(5) self.assertEqual(self.nodes[REED].get_state(), 'child') self.nodes[MED].start() self.simulator.go(5) self.assertEqual(self.nodes[MED].get_state(), 'child') self.assertEqual(self.nodes[REED].get_state(), 'router') med_messages = self.simulator.get_messages_sent_by(MED) # Step 2 - DUT sends MLE Parent Request msg = med_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) check_parent_request(msg, is_first_request=True) # Step 4 - DUT sends MLE Parent Request again msg = med_messages.next_mle_message(mle.CommandType.PARENT_REQUEST) check_parent_request(msg, is_first_request=False) # Step 6 - DUT sends Child ID Request msg = med_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[REED]) check_child_id_request(msg, address_registration=CheckType.CONTAIN, tlv_request=CheckType.CONTAIN, mle_frame_counter=CheckType.OPTIONAL, route64=CheckType.OPTIONAL) # Wait additional DEFAULT_CHILD_TIMEOUT to ensure the keep-alive message (child update request from MED) happens. self.simulator.go(config.DEFAULT_CHILD_TIMEOUT) med_messages = self.simulator.get_messages_sent_by(MED) # Step 8 - DUT sends Child Update messages msg = med_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST) check_child_update_request_by_child(msg) # Step 10 - Leader sends ICMPv6 echo request, to DUT link local address med_addrs = self.nodes[MED].get_addrs() for addr in med_addrs: if addr[0:4] == 'fe80': self.assertTrue(self.nodes[REED].ping(addr))