4f86b417f6d4e9fa2053210351b43f4683f1684c
[platform/upstream/connectedhomeip.git] / third_party / openthread / repo / tests / scripts / thread-cert / Cert_5_3_06b_RouterIdMask.py
1 #!/usr/bin/env python3
2 #
3 #  Copyright (c) 2016, The OpenThread Authors.
4 #  All rights reserved.
5 #
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.
16 #
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.
28 #
29
30 import unittest
31
32 import thread_cert
33
34 LEADER = 1
35 ROUTER1 = 2
36 ROUTER2 = 3
37
38
39 class Cert_5_3_6_RouterIdMask(thread_cert.TestCase):
40     TOPOLOGY = {
41         LEADER: {
42             'mode': 'rsdn',
43             'panid': 0xface,
44             'whitelist': [ROUTER1]
45         },
46         ROUTER1: {
47             'mode': 'rsdn',
48             'panid': 0xface,
49             'router_selection_jitter': 1,
50             'whitelist': [LEADER, ROUTER2]
51         },
52         ROUTER2: {
53             'mode': 'rsdn',
54             'panid': 0xface,
55             'router_selection_jitter': 1,
56             'whitelist': [ROUTER1]
57         },
58     }
59
60     def test(self):
61         self.nodes[LEADER].start()
62         self.simulator.go(5)
63         self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
64
65         self.nodes[ROUTER1].start()
66         self.simulator.go(5)
67         self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
68
69         self.nodes[ROUTER2].start()
70         self.simulator.go(5)
71         self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
72
73         self.nodes[ROUTER1].stop()
74         self.nodes[ROUTER2].stop()
75
76         self.simulator.go(300)
77
78
79 if __name__ == '__main__':
80     unittest.main()