Exemple #1
0
    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))
Exemple #5
0
    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))