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))