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))
Esempio n. 2
0
    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))
Esempio n. 3
0
    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))