def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[COMMISSIONER].start() self.simulator.go(5) self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router') # Skip all other Coaps sent by Leader self.simulator.get_messages_sent_by(COMMISSIONER) self.simulator.get_messages_sent_by(LEADER) # Commissioner start self.nodes[COMMISSIONER].commissioner_start() self.simulator.go(3) self.simulator.get_messages_sent_by(COMMISSIONER) # Skip LEAD_PET.req # Get CommissionerSessionId from LEAD_PET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04', assert_enabled=True) commissioner_session_id_tlv = command.get_sub_tlv( msg.coap.payload, mesh_cop.CommissionerSessionId) # Step 2 - Harness instructs commissioner to send # MGMT_COMMISSIONER_SET.req to Leader steering_data_tlv = mesh_cop.SteeringData(bytes([0xff])) self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs( [steering_data_tlv]) self.simulator.go(5) # Step 3 - Leader responds to MGMT_COMMISSIONER_SET.req with # MGMT_COMMISSIONER_SET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') # (mesh_cop.State(mesh_cop.MeshCopState.REJECT),) <- this a tuple, don't delete the comma command.check_coap_message( msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]) self.simulator.get_messages_sent_by(COMMISSIONER) # Skip LEAD_PET.req # Step 4 - Harness instructs commissioner to send # MGMT_COMMISSIONER_SET.req to Leader self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs( [steering_data_tlv, commissioner_session_id_tlv]) self.simulator.go(5) commissioner_messages = self.simulator.get_messages_sent_by( COMMISSIONER) msg = commissioner_messages.next_coap_message('0.02', uri_path='/c/cs') rloc = ip_address(self.nodes[LEADER].get_rloc()) leader_aloc = ip_address(self.nodes[LEADER].get_addr_leader_aloc()) command.check_coap_message( msg, [steering_data_tlv, commissioner_session_id_tlv], dest_addrs=[rloc, leader_aloc], ) # Step 5 - Leader sends MGMT_COMMISSIONER_SET.rsp to commissioner leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message( msg, [mesh_cop.State(mesh_cop.MeshCopState.ACCEPT)]) # Step 6 - Leader sends a multicast MLE Data Response msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE) command.check_data_response( msg, command.NetworkDataCheck( commissioning_data_check=command.CommissioningDataCheck( stable=0, sub_tlv_type_list=[ mesh_cop.CommissionerSessionId, mesh_cop.SteeringData, mesh_cop.BorderAgentLocator, ], )), ) # Step 7 - Harness instructs commissioner to send # MGMT_COMMISSIONER_SET.req to Leader border_agent_locator_tlv = mesh_cop.BorderAgentLocator(0x0400) self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs( [commissioner_session_id_tlv, border_agent_locator_tlv]) self.simulator.go(5) # Step 8 - Leader responds to MGMT_COMMISSIONER_SET.req with # MGMT_COMMISSIONER_SET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message( msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]) # Step 9 - Harness instructs commissioner to send # MGMT_COMMISSIONER_SET.req to Leader self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs([ steering_data_tlv, commissioner_session_id_tlv, border_agent_locator_tlv, ]) self.simulator.go(5) # Step 10 - Leader responds to MGMT_COMMISSIONER_SET.req with # MGMT_COMMISSIONER_SET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message( msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]) # Step 11 - Harness instructs commissioner to send # MGMT_COMMISSIONER_SET.req to Leader self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs( [mesh_cop.CommissionerSessionId(0xffff), steering_data_tlv]) self.simulator.go(5) # Step 12 - Leader responds to MGMT_COMMISSIONER_SET.req with # MGMT_COMMISSIONER_SET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message( msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]) # Step 13 - Harness instructs commissioner to send # MGMT_COMMISSIONER_SET.req to Leader self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs([ commissioner_session_id_tlv, steering_data_tlv, mesh_cop.Channel(0x0, 0x0), ]) self.simulator.go(5) # Step 14 - Leader responds to MGMT_COMMISSIONER_SET.req with # MGMT_COMMISSIONER_SET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message( msg, [mesh_cop.State(mesh_cop.MeshCopState.ACCEPT)]) # Step 15 - Send ICMPv6 Echo Request to Leader leader_rloc = self.nodes[LEADER].get_rloc() self.assertTrue(self.nodes[COMMISSIONER].ping(leader_rloc))
def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros') self.nodes[LEADER].add_prefix('2001:2:0:2::/64', 'paro') self.nodes[LEADER].register_netdata() # Set lowpan context of sniffer self.simulator.set_lowpan_context(1, '2001:2:0:1::/64') self.simulator.set_lowpan_context(2, '2001:2:0:2::/64') self.nodes[ROUTER].start() self.simulator.go(5) self.assertEqual(self.nodes[ROUTER].get_state(), 'router') self.nodes[SED1].start() self.simulator.go(5) self.assertEqual(self.nodes[SED1].get_state(), 'child') self.nodes[MED1].start() self.simulator.go(5) self.assertEqual(self.nodes[MED1].get_state(), 'child') addrs = self.nodes[SED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertFalse(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) addrs = self.nodes[MED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertTrue(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) leader_messages = self.simulator.get_messages_sent_by(LEADER) med1_messages = self.simulator.get_messages_sent_by(MED1) sed1_messages = self.simulator.get_messages_sent_by(SED1) # Step 1 - DUT sends MLE Advertisements msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) # Step 2 - DUT creates network data msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE) check_data_response( msg, network_data_check=(NetworkDataCheckType.PREFIX_CONTENT, [{ network_data.TlvType.PREFIX: b'2001000200000001' }, { network_data.TlvType.PREFIX: b'2001000200000002' }])) # Step 4 - DUT sends a MLE Child ID Response to Router1 msg = leader_messages.next_mle_message( mle.CommandType.CHILD_ID_RESPONSE) check_child_id_response( msg, network_data_check=(NetworkDataCheckType.PREFIX_CNT, 2)) # Step 6 - DUT sends a MLE Child ID Response to SED1 msg = leader_messages.next_mle_message( mle.CommandType.CHILD_ID_RESPONSE) check_child_id_response( msg, network_data_check=(NetworkDataCheckType.PREFIX_CONTENT, [{ network_data.TlvType.BORDER_ROUTER: 0xFFFE }])) # For Step 10 msg_chd_upd_res_to_sed = leader_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_RESPONSE) # Step 8 - DUT sends a MLE Child ID Response to MED1 msg = leader_messages.next_mle_message( mle.CommandType.CHILD_ID_RESPONSE) check_child_id_response( msg, network_data_check=(NetworkDataCheckType.PREFIX_CNT, 2)) # Step 10 - DUT sends Child Update Response msg_chd_upd_res_to_med = leader_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_RESPONSE) msg = med1_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_REQUEST) check_child_update_request_from_child( msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1, 2]) check_child_update_response(msg_chd_upd_res_to_med, address_registration=CheckType.CONTAIN, CIDs=[1, 2]) msg = sed1_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_REQUEST) check_child_update_request_from_child( msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1]) check_child_update_response(msg_chd_upd_res_to_sed, address_registration=CheckType.CONTAIN, CIDs=[1])
def test(self): # 1 - All self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[ROUTER].start() self.simulator.go(5) self.assertEqual(self.nodes[ROUTER].get_state(), 'router') self.nodes[SED1].start() self.simulator.go(5) self.assertEqual(self.nodes[SED1].get_state(), 'child') self.nodes[MED1].start() self.simulator.go(5) self.assertEqual(self.nodes[MED1].get_state(), 'child') # 2 - N/A # Clear collected messages self.simulator.get_messages_sent_by(LEADER) self.simulator.get_messages_sent_by(MED1) self.simulator.get_messages_sent_by(SED1) self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros') self.nodes[LEADER].add_prefix('2001:2:0:2::/64', 'paro') self.nodes[LEADER].register_netdata() self.simulator.go(5) # Set lowpan context of sniffer self.simulator.set_lowpan_context(1, '2001:2:0:1::/64') self.simulator.set_lowpan_context(2, '2001:2:0:2::/64') leader_messages = self.simulator.get_messages_sent_by(LEADER) med1_messages = self.simulator.get_messages_sent_by(MED1) sed1_messages = self.simulator.get_messages_sent_by(SED1) addrs = self.nodes[SED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertFalse(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) addrs = self.nodes[MED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertTrue(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) # 3 - Leader msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE) check_data_response( msg, network_data_check=NetworkDataCheck(prefixes_check=PrefixesCheck( prefix_check_list=[ SinglePrefixCheck(b'2001000200000001'), SinglePrefixCheck(b'2001000200000002'), ])), ) # 4 - N/A # Get addresses registered by MED1 msg = med1_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_REQUEST) check_child_update_request_from_child( msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1, 2]) # 5 - Leader # Make a copy of leader's messages to ensure that we don't miss # messages to SED1 leader_messages_copy = leader_messages.clone() msg = leader_messages_copy.next_mle_message( mle.CommandType.CHILD_UPDATE_RESPONSE, sent_to_node=self.nodes[MED1], ) check_child_update_response(msg, address_registration=CheckType.CONTAIN, CIDs=[1, 2]) # 6A & 6B - Leader if config.LEADER_NOTIFY_SED_BY_CHILD_UPDATE_REQUEST: msg = leader_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_REQUEST, sent_to_node=self.nodes[SED1], ) check_child_update_request_from_parent( msg, leader_data=CheckType.CONTAIN, network_data=CheckType.CONTAIN, active_timestamp=CheckType.CONTAIN, ) else: msg = leader_messages.next_mle_message( mle.CommandType.DATA_RESPONSE, sent_to_node=self.nodes[SED1]) check_data_response(msg, network_data_check=NetworkDataCheck()) # 7 - N/A # Get addresses registered by SED1 msg = sed1_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_REQUEST) check_child_update_request_from_child( msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1]) # 8 - Leader msg = leader_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_RESPONSE, sent_to_node=self.nodes[SED1], ) check_child_update_response(msg, address_registration=CheckType.CONTAIN, CIDs=[1])
def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[COMMISSIONER].start() self.simulator.go(5) self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router') # Skip all other Coaps sent by Leader self.simulator.get_messages_sent_by(COMMISSIONER) self.simulator.get_messages_sent_by(LEADER) # Commissioner start self.nodes[COMMISSIONER].commissioner_start() self.simulator.go(3) self.simulator.get_messages_sent_by(COMMISSIONER) # Skip LEAD_PET.req # Get CommissionerSesssionId from LEAD_PET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04', assert_enabled=True) commissioner_session_id_tlv = command.get_sub_tlv(msg.coap.payload, mesh_cop.CommissionerSessionId) # Step 2 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader steering_data_tlv = mesh_cop.SteeringData(bytes([0xFF])) self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs([steering_data_tlv]) self.simulator.go(5) # Step 3 - Leader responds to MGMT_COMMISSIONER_SET.req with MGMT_COMMISSIONER_SET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]) # (mesh_cop.State(mesh_cop.MeshCopState.REJECT),) <- this a tuple, don't delete the comma self.simulator.get_messages_sent_by(COMMISSIONER) # Skip LEAD_PET.req # Step 4 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs([steering_data_tlv, commissioner_session_id_tlv]) self.simulator.go(5) commissioner_messages = self.simulator.get_messages_sent_by(COMMISSIONER) msg = commissioner_messages.next_coap_message('0.02', uri_path='/c/cs') rloc = ip_address(self.nodes[LEADER].get_addr_rloc()) leader_aloc = ip_address(self.nodes[LEADER].get_addr_leader_aloc()) command.check_coap_message(msg, [steering_data_tlv, commissioner_session_id_tlv], dest_addrs=[rloc, leader_aloc]) # Step 5 - Leader sends MGMT_COMMISSIONER_SET.rsp to commissioner leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.ACCEPT)]) # Step 6 - Leader sends a multicast MLE Data Response msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE) command.check_data_response(msg, command.NetworkDataCheck( commissioning_data_check=command.CommissioningDataCheck(stable=0, sub_tlv_type_list=[mesh_cop.CommissionerSessionId, mesh_cop.SteeringData, mesh_cop.BorderAgentLocator]))) # Step 7 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader border_agent_locator_tlv = mesh_cop.BorderAgentLocator(0x0400) self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs( [commissioner_session_id_tlv, border_agent_locator_tlv]) self.simulator.go(5) # Step 8 - Leader responds to MGMT_COMMISSIONER_SET.req with MGMT_COMMISSIONER_SET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]) # Step 9 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs( [steering_data_tlv, commissioner_session_id_tlv, border_agent_locator_tlv]) self.simulator.go(5) # Step 10 - Leader responds to MGMT_COMMISSIONER_SET.req with MGMT_COMMISSIONER_SET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]) # Step 11 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs( [mesh_cop.CommissionerSessionId(0xFFFF), steering_data_tlv]) self.simulator.go(5) # Step 12 - Leader responds to MGMT_COMMISSIONER_SET.req with MGMT_COMMISSIONER_SET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]) # Step 13 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs( [commissioner_session_id_tlv, steering_data_tlv, mesh_cop.Channel(0x0, 0x0)]) self.simulator.go(5) # Step 14 - Leader responds to MGMT_COMMISSIONER_SET.req with MGMT_COMMISSIONER_SET.rsp leader_messages = self.simulator.get_messages_sent_by(LEADER) msg = leader_messages.next_coap_message('2.04') command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.ACCEPT)]) # Step 15 - Send ICMPv6 Echo Request to Leader leader_rloc = self.nodes[LEADER].get_addr_rloc() self.assertTrue(self.nodes[COMMISSIONER].ping(leader_rloc))
def test(self): # 1 - All self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[ROUTER].start() self.simulator.go(5) self.assertEqual(self.nodes[ROUTER].get_state(), 'router') self.nodes[SED1].start() self.simulator.go(5) self.assertEqual(self.nodes[SED1].get_state(), 'child') self.nodes[MED1].start() self.simulator.go(5) self.assertEqual(self.nodes[MED1].get_state(), 'child') # 2 - N/A # Clear collected messages self.simulator.get_messages_sent_by(LEADER) self.simulator.get_messages_sent_by(MED1) self.simulator.get_messages_sent_by(SED1) self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros') self.nodes[LEADER].add_prefix('2001:2:0:2::/64', 'paro') self.nodes[LEADER].register_netdata() self.simulator.go(5) leader_messages = self.simulator.get_messages_sent_by(LEADER) med1_messages = self.simulator.get_messages_sent_by(MED1) sed1_messages = self.simulator.get_messages_sent_by(SED1) addrs = self.nodes[SED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertFalse(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) addrs = self.nodes[MED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertTrue(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) # 3 - Leader msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE) command.check_data_response(msg, network_data=CheckType.CONTAIN, prefixes=[('2001:2:0:1::/64', 'paros'), ('2001:2:0:2::/64', 'paro')]) # 4 - N/A # Get addresses registered by MED1 msg = med1_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_REQUEST) med1_addresses = msg.get_mle_message_tlv( mle.AddressRegistration).addresses # 5 - Leader # Make a copy of leader's messages to ensure that we don't miss messages to SED1 leader_messages_copy = leader_messages.clone() msg = leader_messages_copy.next_mle_message( mle.CommandType.CHILD_UPDATE_RESPONSE, sent_to_node=self.nodes[MED1]) command.check_child_update_response_from_parent( msg, address_registration=CheckType.CONTAIN) leader_addresses = msg.get_mle_message_tlv( mle.AddressRegistration).addresses self.assertTrue( all(addr in leader_addresses for addr in med1_addresses)) # 6A & 6B - Leader if config.LEADER_NOTIFY_SED_BY_CHILD_UPDATE_REQUEST: msg = leader_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_REQUEST, sent_to_node=self.nodes[SED1]) command.check_child_update_request_from_parent( msg, leader_data=CheckType.CONTAIN, network_data=CheckType.CONTAIN, active_timestamp=CheckType.CONTAIN) else: msg = leader_messages.next_mle_message( mle.CommandType.DATA_RESPONSE, sent_to_node=self.nodes[SED1]) command.check_data_response(msg, network_data=CheckType.CONTAIN, active_timestamp=CheckType.CONTAIN) # 7 - N/A # Get addresses registered by SED1 msg = sed1_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_REQUEST) sed1_addresses = msg.get_mle_message_tlv( mle.AddressRegistration).addresses # 8 - Leader msg = leader_messages.next_mle_message( mle.CommandType.CHILD_UPDATE_RESPONSE, sent_to_node=self.nodes[SED1]) command.check_child_update_response_from_parent( msg, address_registration=CheckType.CONTAIN) leader_addresses = msg.get_mle_message_tlv( mle.AddressRegistration).addresses self.assertTrue( all(addr in leader_addresses for addr in sed1_addresses))
def test(self): self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros') self.nodes[LEADER].add_prefix('2001:2:0:2::/64', 'paro') self.nodes[LEADER].register_netdata() # Set lowpan context of sniffer self.simulator.set_lowpan_context(1, '2001:2:0:1::/64') self.simulator.set_lowpan_context(2, '2001:2:0:2::/64') self.nodes[ROUTER].start() self.simulator.go(5) self.assertEqual(self.nodes[ROUTER].get_state(), 'router') self.nodes[SED1].start() self.simulator.go(5) self.assertEqual(self.nodes[SED1].get_state(), 'child') self.nodes[MED1].start() self.simulator.go(5) self.assertEqual(self.nodes[MED1].get_state(), 'child') addrs = self.nodes[SED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertFalse(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) addrs = self.nodes[MED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertTrue(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) leader_messages = self.simulator.get_messages_sent_by(LEADER) med1_messages = self.simulator.get_messages_sent_by(MED1) sed1_messages = self.simulator.get_messages_sent_by(SED1) # Step 1 - DUT sends MLE Advertisements msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT) # Step 2 - DUT creates network data msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE) check_data_response(msg, network_data_check=NetworkDataCheck( prefixes_check=PrefixesCheck(prefix_check_list=[ SinglePrefixCheck(prefix=b'2001000200000001'), SinglePrefixCheck(prefix=b'2001000200000002') ]) ) ) # Step 4 - DUT sends a MLE Child ID Response to Router1 msg = leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE) check_child_id_response(msg, network_data_check=NetworkDataCheck( prefixes_check=PrefixesCheck(prefix_cnt=2) ) ) # Step 6 - DUT sends a MLE Child ID Response to SED1 msg = leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE) check_child_id_response(msg, network_data_check=NetworkDataCheck( prefixes_check=PrefixesCheck(prefix_check_list=[ SinglePrefixCheck(border_router_16=0xFFFE) ]) ) ) # For Step 10 msg_chd_upd_res_to_sed = leader_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_RESPONSE) # Step 8 - DUT sends a MLE Child ID Response to MED1 msg = leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE) check_child_id_response(msg, network_data_check=NetworkDataCheck( prefixes_check=PrefixesCheck(prefix_cnt=2) ) ) # Step 10 - DUT sends Child Update Response msg_chd_upd_res_to_med = leader_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_RESPONSE) msg = med1_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST) check_child_update_request_from_child(msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1, 2]) check_child_update_response(msg_chd_upd_res_to_med, address_registration=CheckType.CONTAIN, CIDs=[1, 2]) msg = sed1_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST) check_child_update_request_from_child(msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1]) check_child_update_response(msg_chd_upd_res_to_sed, address_registration=CheckType.CONTAIN, CIDs=[1])
def test(self): # 1 - All self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[ROUTER].start() self.simulator.go(5) self.assertEqual(self.nodes[ROUTER].get_state(), 'router') self.nodes[SED1].start() self.simulator.go(5) self.assertEqual(self.nodes[SED1].get_state(), 'child') self.nodes[MED1].start() self.simulator.go(5) self.assertEqual(self.nodes[MED1].get_state(), 'child') # 2 - N/A # Clear collected messages self.simulator.get_messages_sent_by(LEADER) self.simulator.get_messages_sent_by(MED1) self.simulator.get_messages_sent_by(SED1) self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros') self.nodes[LEADER].add_prefix('2001:2:0:2::/64', 'paro') self.nodes[LEADER].register_netdata() self.simulator.go(5) leader_messages = self.simulator.get_messages_sent_by(LEADER) med1_messages = self.simulator.get_messages_sent_by(MED1) sed1_messages = self.simulator.get_messages_sent_by(SED1) addrs = self.nodes[SED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertFalse(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) addrs = self.nodes[MED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertTrue(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) # 3 - Leader msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE) command.check_data_response(msg, network_data=CheckType.CONTAIN, prefixes=[('2001:2:0:1::/64', 'paros'), ('2001:2:0:2::/64', 'paro')]) # 4 - N/A # Get addresses registered by MED1 msg = med1_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST) med1_addresses = msg.get_mle_message_tlv(mle.AddressRegistration).addresses # 5 - Leader # Make a copy of leader's messages to ensure that we don't miss messages to SED1 leader_messages_copy = leader_messages.clone() msg = leader_messages_copy.next_mle_message(mle.CommandType.CHILD_UPDATE_RESPONSE, sent_to_node=self.nodes[MED1]) command.check_child_update_response_from_parent(msg, address_registration=CheckType.CONTAIN) leader_addresses = msg.get_mle_message_tlv(mle.AddressRegistration).addresses self.assertTrue(all(addr in leader_addresses for addr in med1_addresses)) # 6A & 6B - Leader if config.LEADER_NOTIFY_SED_BY_CHILD_UPDATE_REQUEST: msg = leader_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST, sent_to_node=self.nodes[SED1]) command.check_child_update_request_from_parent(msg, leader_data=CheckType.CONTAIN, network_data=CheckType.CONTAIN, active_timestamp=CheckType.CONTAIN) else: msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE, sent_to_node=self.nodes[SED1]) command.check_data_response(msg, network_data=CheckType.CONTAIN, active_timestamp=CheckType.CONTAIN) # 7 - N/A # Get addresses registered by SED1 msg = sed1_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST) sed1_addresses = msg.get_mle_message_tlv(mle.AddressRegistration).addresses # 8 - Leader msg = leader_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_RESPONSE, sent_to_node=self.nodes[SED1]) command.check_child_update_response_from_parent(msg, address_registration=CheckType.CONTAIN) leader_addresses = msg.get_mle_message_tlv(mle.AddressRegistration).addresses self.assertTrue(all(addr in leader_addresses for addr in sed1_addresses))
def test(self): # 1 - All self.nodes[LEADER].start() self.simulator.go(5) self.assertEqual(self.nodes[LEADER].get_state(), 'leader') self.nodes[ROUTER].start() self.simulator.go(5) self.assertEqual(self.nodes[ROUTER].get_state(), 'router') self.nodes[SED1].start() self.simulator.go(5) self.assertEqual(self.nodes[SED1].get_state(), 'child') self.nodes[MED1].start() self.simulator.go(5) self.assertEqual(self.nodes[MED1].get_state(), 'child') # 2 - N/A # Clear collected messages self.simulator.get_messages_sent_by(LEADER) self.simulator.get_messages_sent_by(MED1) self.simulator.get_messages_sent_by(SED1) self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros') self.nodes[LEADER].add_prefix('2001:2:0:2::/64', 'paro') self.nodes[LEADER].register_netdata() self.simulator.go(5) # Set lowpan context of sniffer self.simulator.set_lowpan_context(1, '2001:2:0:1::/64') self.simulator.set_lowpan_context(2, '2001:2:0:2::/64') leader_messages = self.simulator.get_messages_sent_by(LEADER) med1_messages = self.simulator.get_messages_sent_by(MED1) sed1_messages = self.simulator.get_messages_sent_by(SED1) addrs = self.nodes[SED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertFalse(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) addrs = self.nodes[MED1].get_addrs() self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs)) self.assertTrue(any('2001:2:0:2' in addr[0:10] for addr in addrs)) for addr in addrs: if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2': self.assertTrue(self.nodes[LEADER].ping(addr)) # 3 - Leader msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE) check_data_response(msg, network_data_check=NetworkDataCheck( prefixes_check=PrefixesCheck(prefix_check_list=[ SinglePrefixCheck(b'2001000200000001'), SinglePrefixCheck(b'2001000200000002')]) ) ) # 4 - N/A # Get addresses registered by MED1 msg = med1_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST) check_child_update_request_from_child(msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1, 2]) # 5 - Leader # Make a copy of leader's messages to ensure that we don't miss messages to SED1 leader_messages_copy = leader_messages.clone() msg = leader_messages_copy.next_mle_message(mle.CommandType.CHILD_UPDATE_RESPONSE, sent_to_node=self.nodes[MED1]) check_child_update_response(msg, address_registration=CheckType.CONTAIN, CIDs=[1, 2]) # 6A & 6B - Leader if config.LEADER_NOTIFY_SED_BY_CHILD_UPDATE_REQUEST: msg = leader_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST, sent_to_node=self.nodes[SED1]) check_child_update_request_from_parent(msg, leader_data=CheckType.CONTAIN, network_data=CheckType.CONTAIN, active_timestamp=CheckType.CONTAIN) else: msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE, sent_to_node=self.nodes[SED1]) check_data_response(msg, network_data_check=command.NetworkDataCheck()) # 7 - N/A # Get addresses registered by SED1 msg = sed1_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST) check_child_update_request_from_child(msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1]) # 8 - Leader msg = leader_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_RESPONSE, sent_to_node=self.nodes[SED1]) check_child_update_response(msg, address_registration=CheckType.CONTAIN, CIDs=[1])