Example #1
0
    def test(self):
        self.nodes[LEADER].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[LEADER].get_state(), 'leader')

        # 1 DUT_ROUTER1: Attach to LEADER
        self.nodes[DUT_ROUTER1].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')

        # DUT_ROUTER1: Verify MLE advertisements
        router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
        msg = router1_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
        command.check_mle_advertisement(msg)

        # 2 REED1: Attach to DUT_ROUTER1
        self.nodes[REED1].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[REED1].get_state(), 'child')

        # 3 DUT_ROUTER1: Verify MLE Parent Response
        router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
        msg = router1_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
        msg.assertSentToNode(self.nodes[REED1])
        command.check_parent_response(msg)

        # 4 DUT_ROUTER1: Verify MLE Child ID Response
        msg = router1_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
        msg.assertSentToNode(self.nodes[REED1])
        command.check_child_id_response(msg)

        # 5 Omitted

        # 6 MED1: Attach to REED1
        self.nodes[MED1].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[MED1].get_state(), 'child')

        # 7 REED1: Verify sending Address Solicit Request to DUT_ROUTER1
        reed1_messages = self.simulator.get_messages_sent_by(REED1)
        msg = reed1_messages.next_coap_message('0.02')
        reed1_ipv6_address = msg.ipv6_packet.ipv6_header.source_address.compressed
        msg.assertSentToNode(self.nodes[DUT_ROUTER1]);
        msg.assertCoapMessageRequestUriPath('/a/as')

        # 8 DUT_ROUTER1: Verify forwarding REED1's Address Solicit Request to LEADER
        router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
        msg = router1_messages.next_coap_message('0.02')
        msg.assertSentToNode(self.nodes[LEADER]);
        msg.assertCoapMessageRequestUriPath('/a/as')

        # DUT_ROUTER1: Verify forwarding LEADER's Address Solicit Response to REED1
        msg = router1_messages.next_coap_message('2.04')
        msg.assertSentToDestinationAddress(reed1_ipv6_address)

        # 9 LEADER: Verify connectivity by sending an ICMPv6 Echo Request to REED1
        for addr in self.nodes[REED1].get_addrs():
            if addr[0:4] != 'fe80':
                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')

        # 1 DUT_ROUTER1: Attach to LEADER
        self.nodes[DUT_ROUTER1].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')

        # DUT_ROUTER1: Verify MLE advertisements
        router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
        msg = router1_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
        command.check_mle_advertisement(msg)

        # 2 REED1: Attach to DUT_ROUTER1
        self.nodes[REED1].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[REED1].get_state(), 'child')

        # 3 DUT_ROUTER1: Verify MLE Parent Response
        router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
        msg = router1_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
        msg.assertSentToNode(self.nodes[REED1])
        command.check_parent_response(msg)

        # 4 DUT_ROUTER1: Verify MLE Child ID Response
        msg = router1_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
        msg.assertSentToNode(self.nodes[REED1])
        command.check_child_id_response(msg)

        # 5 Omitted

        # 6 MED1: Attach to REED1
        self.nodes[MED1].start()
        self.simulator.go(5)
        self.assertEqual(self.nodes[MED1].get_state(), 'child')

        # 7 REED1: Verify sending Address Solicit Request to DUT_ROUTER1
        reed1_messages = self.simulator.get_messages_sent_by(REED1)
        msg = reed1_messages.next_coap_message('0.02')
        reed1_ipv6_address = msg.ipv6_packet.ipv6_header.source_address.compressed
        msg.assertSentToNode(self.nodes[DUT_ROUTER1]);
        msg.assertCoapMessageRequestUriPath('/a/as')

        # 8 DUT_ROUTER1: Verify forwarding REED1's Address Solicit Request to LEADER
        router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
        msg = router1_messages.next_coap_message('0.02')
        msg.assertSentToNode(self.nodes[LEADER]);
        msg.assertCoapMessageRequestUriPath('/a/as')

        # DUT_ROUTER1: Verify forwarding LEADER's Address Solicit Response to REED1
        msg = router1_messages.next_coap_message('2.04')
        msg.assertSentToDestinationAddress(reed1_ipv6_address)

        self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)

        # 9 LEADER: Verify connectivity by sending an ICMPv6 Echo Request to REED1
        for addr in self.nodes[REED1].get_addrs():
            if addr[0:4] != 'fe80':
                self.assertTrue(self.nodes[LEADER].ping(addr))