3 # Copyright (c) 2016, The OpenThread Authors.
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are met:
8 # 1. Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer.
10 # 2. Redistributions in binary form must reproduce the above copyright
11 # notice, this list of conditions and the following disclaimer in the
12 # documentation and/or other materials provided with the distribution.
13 # 3. Neither the name of the copyright holder nor the
14 # names of its contributors may be used to endorse or promote products
15 # derived from this software without specific prior written permission.
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 # POSSIBILITY OF SUCH DAMAGE.
41 class Cert_6_1_6_REEDAttachLinkQuality_ED(thread_cert.TestCase):
46 'whitelist': [REED, ROUTER2]
51 'router_upgrade_threshold': 0,
52 'whitelist': [LEADER, ED]
57 'router_selection_jitter': 1,
58 'whitelist': [LEADER, (ED, -85)]
64 'whitelist': [REED, ROUTER2]
69 self.nodes[LEADER].start()
71 self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
73 self.nodes[REED].start()
75 self.assertEqual(self.nodes[REED].get_state(), 'child')
77 self.nodes[ROUTER2].start()
79 self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
81 self.nodes[ED].start()
83 self.assertEqual(self.nodes[ED].get_state(), 'child')
84 self.assertEqual(self.nodes[REED].get_state(), 'router')
86 leader_messages = self.simulator.get_messages_sent_by(LEADER)
87 reed_messages = self.simulator.get_messages_sent_by(REED)
88 ed_messages = self.simulator.get_messages_sent_by(ED)
89 router2_messages = self.simulator.get_messages_sent_by(ROUTER2)
91 # 1 - Leader. REED1, Router2
92 leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
94 reed_messages.next_mle_message(mle.CommandType.PARENT_REQUEST)
95 leader_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
97 reed_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
98 leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
100 router2_messages.next_mle_message(mle.CommandType.PARENT_REQUEST)
101 leader_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
103 router2_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
104 leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
106 msg = router2_messages.next_coap_message("0.02")
107 msg.assertCoapMessageRequestUriPath("/a/as")
109 msg = leader_messages.next_coap_message("2.04")
111 router2_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
114 msg = ed_messages.next_mle_message(mle.CommandType.PARENT_REQUEST)
115 msg.assertSentWithHopLimit(255)
116 msg.assertSentToDestinationAddress("ff02::2")
117 msg.assertMleMessageContainsTlv(mle.Mode)
118 msg.assertMleMessageContainsTlv(mle.Challenge)
119 msg.assertMleMessageContainsTlv(mle.ScanMask)
120 msg.assertMleMessageContainsTlv(mle.Version)
122 scan_mask_tlv = msg.get_mle_message_tlv(mle.ScanMask)
123 self.assertEqual(1, scan_mask_tlv.router)
124 self.assertEqual(0, scan_mask_tlv.end_device)
127 msg = router2_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
128 msg.assertSentToNode(self.nodes[ED])
131 msg = ed_messages.next_mle_message(mle.CommandType.PARENT_REQUEST)
132 msg.assertSentWithHopLimit(255)
133 msg.assertSentToDestinationAddress("ff02::2")
134 msg.assertMleMessageContainsTlv(mle.Mode)
135 msg.assertMleMessageContainsTlv(mle.Challenge)
136 msg.assertMleMessageContainsTlv(mle.ScanMask)
137 msg.assertMleMessageContainsTlv(mle.Version)
139 scan_mask_tlv = msg.get_mle_message_tlv(mle.ScanMask)
140 self.assertEqual(1, scan_mask_tlv.router)
141 self.assertEqual(1, scan_mask_tlv.end_device)
144 msg = router2_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
145 msg.assertSentToNode(self.nodes[ED])
147 msg = reed_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
148 msg.assertSentToNode(self.nodes[ED])
151 msg = ed_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
152 msg.assertMleMessageContainsTlv(mle.AddressRegistration)
153 msg.assertMleMessageContainsTlv(mle.LinkLayerFrameCounter)
154 msg.assertMleMessageContainsTlv(mle.Mode)
155 msg.assertMleMessageContainsTlv(mle.Response)
156 msg.assertMleMessageContainsTlv(mle.Timeout)
157 msg.assertMleMessageContainsTlv(mle.TlvRequest)
158 msg.assertMleMessageContainsTlv(mle.Version)
159 msg.assertMleMessageContainsOptionalTlv(mle.MleFrameCounter)
160 msg.assertSentToNode(self.nodes[REED])
162 msg = reed_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
163 msg.assertSentToNode(self.nodes[ED])
166 if __name__ == '__main__':