Exemplo n.º 1
0
    def test(self):
        # 1
        self.nodes[DUT_LEADER].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')

        self.nodes[ROUTER1].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')

        self.nodes[ROUTER2].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
        router2_id = self.nodes[ROUTER2].get_router_id()

        # Wait DUT_LEADER to establish routing to ROUTER2 via ROUTER1's MLE
        # advertisement.
        self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)

        # 2
        self.nodes[ROUTER2].reset()
        self._setUpRouter2()

        # 3 & 4
        # Flush the message queue to avoid possible impact on follow-up
        # verification.
        self.simulator.get_messages_sent_by(DUT_LEADER)

        # Verify the cost from DUT_LEADER to ROUTER2 goes to infinity in 12
        # mins.
        routing_cost = 1
        for i in range(0, 24):
            self.simulator.go(30)
            print("%ss" % ((i + 1) * 30))

            leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
            msg = leader_messages.last_mle_message(
                mle.CommandType.ADVERTISEMENT, False)
            if msg is None:
                continue

            self.assertTrue(command.check_id_set(msg, router2_id))

            routing_cost = command.get_routing_cost(msg, router2_id)
            if routing_cost == 0:
                break
        self.assertTrue(routing_cost == 0)

        self.simulator.go(config.INFINITE_COST_TIMEOUT +
                          config.MAX_ADVERTISEMENT_INTERVAL)
        leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
        msg = leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT)
        self.assertFalse(command.check_id_set(msg, router2_id))

        # 5
        # Flush the message queue to avoid possible impact on follow-up
        # verification.
        self.simulator.get_messages_sent_by(DUT_LEADER)

        self.nodes[ROUTER2].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')

        self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)
        leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
        leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT)

        # 6
        self.nodes[ROUTER1].reset()
        self.nodes[ROUTER2].reset()

        router1_id = self.nodes[ROUTER1].get_router_id()
        router2_id = self.nodes[ROUTER2].get_router_id()

        self.simulator.go(config.MAX_NEIGHBOR_AGE +
                          config.MAX_ADVERTISEMENT_INTERVAL)
        leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
        msg = leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT)
        self.assertEqual(command.get_routing_cost(msg, router1_id), 0)

        self.simulator.go(config.INFINITE_COST_TIMEOUT +
                          config.MAX_ADVERTISEMENT_INTERVAL)
        leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
        msg = leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT)
        self.assertFalse(command.check_id_set(msg, router1_id))
        self.assertFalse(command.check_id_set(msg, router2_id))
    def test(self):
        # 1
        self.nodes[DUT_LEADER].start()
        self.nodes[DUT_LEADER].set_state('leader')
        self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')

        self.nodes[ROUTER1].start()
        time.sleep(5)
        self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')

        self.nodes[ROUTER2].start()
        time.sleep(5)
        self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
        router2_id = self.nodes[ROUTER2].get_router_id()

        # Wait DUT_LEADER to establish routing to ROUTER2 via ROUTER1's MLE advertisement.
        time.sleep(config.MAX_ADVERTISEMENT_INTERVAL)

        # 2
        self.nodes[ROUTER2].reset()
        self._setUpRouter2()

        # 3 & 4
        # Flush the message queue to avoid possible impact on follow-up verification.
        dut_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)

        # Verify the cost from DUT_LEADER to ROUTER2 goes to infinity in 12 mins.
        routing_cost = 1
        for i in range(0, 24):
            time.sleep(30)
            print("%ss" %((i + 1) * 30))

            leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
            msg = leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT, False)
            if msg == None:
                continue

            self.assertTrue(command.check_id_set(msg, router2_id))

            routing_cost = command.get_routing_cost(msg, router2_id)
            if routing_cost == 0:
                break
        self.assertTrue(routing_cost == 0)

        time.sleep(config.INFINITE_COST_TIMEOUT + config.MAX_ADVERTISEMENT_INTERVAL)
        leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
        msg = leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT)
        self.assertFalse(command.check_id_set(msg, router2_id))

        # 5
        # Flush the message queue to avoid possible impact on follow-up verification.
        dut_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)

        self.nodes[ROUTER2].start()
        time.sleep(5)
        self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')

        time.sleep(config.MAX_ADVERTISEMENT_INTERVAL)
        leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
        leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT)

        # 6
        self.nodes[ROUTER1].stop()
        self.nodes[ROUTER2].stop()

        router1_id = self.nodes[ROUTER1].get_router_id()
        router2_id = self.nodes[ROUTER2].get_router_id()

        time.sleep(config.MAX_NEIGHBOR_AGE + config.MAX_ADVERTISEMENT_INTERVAL)
        leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
        msg = leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT)
        self.assertEqual(command.get_routing_cost(msg, router1_id), 0)

        time.sleep(config.INFINITE_COST_TIMEOUT + config.MAX_ADVERTISEMENT_INTERVAL)
        leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
        msg = leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT)
        self.assertFalse(command.check_id_set(msg, router1_id))
        self.assertFalse(command.check_id_set(msg, router2_id))