mirror of
https://github.com/espressif/openthread.git
synced 2026-08-03 09:27:47 +00:00
[posix] implement virtual time and update tests to utilize virtual time (#2508)
This commit adds the following features: - Example posix drivers to support virtual time simulation, allowing tests to run faster than real time. - A python-based simulation driver that coordinates the virtual time simulations. Each alarm event and message transmission across all nodes are scheduled in a single discrete time event queue. As a result, only a single node is making forward progress at a time. - Updated tests to utilize new virtual-time simulator, allowing them to run faster than real time. - To enable virtual time feature, define VIRTUAL_TIME=1 env var and set CPPFLAGS=-DOPENTHREAD_POSIX_VIRTUAL_TIME=1.
This commit is contained in:
@@ -37,15 +37,16 @@ import node
|
||||
|
||||
LEADER = 1
|
||||
ROUTER = 2
|
||||
SNIFFER = 3
|
||||
|
||||
|
||||
class Cert_5_1_01_RouterAttach(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -58,29 +59,23 @@ class Cert_5_1_01_RouterAttach(unittest.TestCase):
|
||||
self.nodes[ROUTER].enable_whitelist()
|
||||
self.nodes[ROUTER].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(7)
|
||||
self.simulator.go(7)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router_messages = self.sniffer.get_messages_sent_by(ROUTER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router_messages = self.simulator.get_messages_sent_by(ROUTER)
|
||||
|
||||
# 1 - Leader
|
||||
msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
@@ -186,6 +181,5 @@ class Cert_5_1_01_RouterAttach(unittest.TestCase):
|
||||
for addr in self.nodes[LEADER].get_addrs():
|
||||
self.assertTrue(self.nodes[ROUTER].ping(addr))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
@@ -38,16 +38,17 @@ LEADER = 1
|
||||
ROUTER = 2
|
||||
ED = 3
|
||||
SED = 4
|
||||
SNIFFER = 5
|
||||
|
||||
MTDS = [ED, SED]
|
||||
|
||||
class Cert_5_1_02_ChildAddressTimeout(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -74,54 +75,48 @@ class Cert_5_1_02_ChildAddressTimeout(unittest.TestCase):
|
||||
self.nodes[SED].add_whitelist(self.nodes[ROUTER].get_addr64())
|
||||
self.nodes[SED].enable_whitelist()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[SED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED].get_state(), 'child')
|
||||
|
||||
ed_addrs = self.nodes[ED].get_addrs()
|
||||
sed_addrs = self.nodes[SED].get_addrs()
|
||||
|
||||
self.nodes[ED].stop()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
for addr in ed_addrs:
|
||||
if addr[0:4] != 'fe80':
|
||||
self.assertFalse(self.nodes[LEADER].ping(addr))
|
||||
|
||||
self.nodes[SED].stop()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
for addr in sed_addrs:
|
||||
if addr[0:4] != 'fe80':
|
||||
self.assertFalse(self.nodes[LEADER].ping(addr))
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER)
|
||||
ed_messages = self.sniffer.get_messages_sent_by(ED)
|
||||
sed_messages = self.sniffer.get_messages_sent_by(SED)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER)
|
||||
ed_messages = self.simulator.get_messages_sent_by(ED)
|
||||
sed_messages = self.simulator.get_messages_sent_by(SED)
|
||||
|
||||
# 1 - All
|
||||
leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -38,15 +38,16 @@ import node
|
||||
LEADER = 1
|
||||
ROUTER1 = 2
|
||||
ROUTER2 = 3
|
||||
SNIFFER = 4
|
||||
|
||||
|
||||
class Cert_5_1_03_RouterAddressReallocation(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 4):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -68,44 +69,38 @@ class Cert_5_1_03_RouterAddressReallocation(unittest.TestCase):
|
||||
self.nodes[ROUTER2].enable_whitelist()
|
||||
self.nodes[ROUTER2].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
rloc16 = self.nodes[ROUTER1].get_addr16()
|
||||
|
||||
self.nodes[ROUTER2].set_network_id_timeout(110)
|
||||
self.nodes[LEADER].stop()
|
||||
time.sleep(140)
|
||||
self.simulator.go(140)
|
||||
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[ROUTER1].get_addr16(), rloc16)
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.sniffer.get_messages_sent_by(ROUTER2)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.simulator.get_messages_sent_by(ROUTER2)
|
||||
|
||||
# 2 - All
|
||||
leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -38,15 +38,16 @@ import node
|
||||
LEADER = 1
|
||||
ROUTER1 = 2
|
||||
ROUTER2 = 3
|
||||
SNIFFER = 4
|
||||
|
||||
|
||||
class Cert_5_1_04_RouterAddressReallocation(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 4):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -68,43 +69,37 @@ class Cert_5_1_04_RouterAddressReallocation(unittest.TestCase):
|
||||
self.nodes[ROUTER2].enable_whitelist()
|
||||
self.nodes[ROUTER2].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
rloc16 = self.nodes[ROUTER1].get_addr16()
|
||||
|
||||
self.nodes[ROUTER2].set_network_id_timeout(200)
|
||||
self.nodes[LEADER].stop()
|
||||
time.sleep(220)
|
||||
self.simulator.go(220)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[ROUTER1].get_addr16(), rloc16)
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.sniffer.get_messages_sent_by(ROUTER2)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.simulator.get_messages_sent_by(ROUTER2)
|
||||
|
||||
# 2 - All
|
||||
leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -37,15 +37,16 @@ import node
|
||||
|
||||
LEADER = 1
|
||||
ROUTER1 = 2
|
||||
SNIFFER = 3
|
||||
|
||||
|
||||
class Cert_5_1_05_RouterAddressTimeout(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -56,53 +57,47 @@ class Cert_5_1_05_RouterAddressTimeout(unittest.TestCase):
|
||||
self.nodes[ROUTER1].set_mode('rsdn')
|
||||
self._setUpRouter1()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def _setUpRouter1(self):
|
||||
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64())
|
||||
self.nodes[ROUTER1].enable_whitelist()
|
||||
self.nodes[ROUTER1].set_router_selection_jitter(1)
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
rloc16 = self.nodes[ROUTER1].get_addr16()
|
||||
|
||||
self.nodes[ROUTER1].reset()
|
||||
self._setUpRouter1()
|
||||
time.sleep(200)
|
||||
self.simulator.go(200)
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
self.assertNotEqual(self.nodes[ROUTER1].get_addr16(), rloc16)
|
||||
|
||||
rloc16 = self.nodes[ROUTER1].get_addr16()
|
||||
self.nodes[ROUTER1].reset()
|
||||
self._setUpRouter1()
|
||||
time.sleep(300)
|
||||
self.simulator.go(300)
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[ROUTER1].get_addr16(), rloc16)
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER1)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER1)
|
||||
|
||||
# 2 - All
|
||||
leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -37,15 +37,16 @@ import node
|
||||
|
||||
LEADER = 1
|
||||
ROUTER1 = 2
|
||||
SNIFFER = 3
|
||||
|
||||
|
||||
class Cert_5_1_06_RemoveRouterId(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -58,25 +59,19 @@ class Cert_5_1_06_RemoveRouterId(unittest.TestCase):
|
||||
self.nodes[ROUTER1].enable_whitelist()
|
||||
self.nodes[ROUTER1].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
rloc16 = self.nodes[ROUTER1].get_addr16()
|
||||
|
||||
@@ -84,14 +79,14 @@ class Cert_5_1_06_RemoveRouterId(unittest.TestCase):
|
||||
self.assertTrue(self.nodes[LEADER].ping(addr))
|
||||
|
||||
self.nodes[LEADER].release_router_id(rloc16 >> 10)
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
for addr in self.nodes[ROUTER1].get_addrs():
|
||||
self.assertTrue(self.nodes[LEADER].ping(addr))
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER1)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER1)
|
||||
|
||||
# 1 - All
|
||||
leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -38,9 +39,11 @@ SED1 = 7
|
||||
|
||||
class Cert_5_1_07_MaxChildCount(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 13):
|
||||
self.nodes[i] = node.Node(i, (i >= 3))
|
||||
self.nodes[i] = node.Node(i, (i >= 3), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -69,20 +72,20 @@ class Cert_5_1_07_MaxChildCount(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
for i in range(3, 13):
|
||||
self.nodes[i].start()
|
||||
time.sleep(7)
|
||||
self.simulator.go(7)
|
||||
self.assertEqual(self.nodes[i].get_state(), 'child')
|
||||
|
||||
ipaddrs = self.nodes[SED1].get_addrs()
|
||||
|
||||
@@ -39,15 +39,16 @@ ROUTER1 = 2
|
||||
ROUTER2 = 3
|
||||
ROUTER3 = 4
|
||||
ROUTER4 = 5
|
||||
SNIFFER = 6
|
||||
|
||||
|
||||
class Cert_5_1_08_RouterAttachConnectivity(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 6):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -85,33 +86,27 @@ class Cert_5_1_08_RouterAttachConnectivity(unittest.TestCase):
|
||||
self.nodes[ROUTER4].enable_whitelist()
|
||||
self.nodes[ROUTER4].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
for i in range(2, 6):
|
||||
self.nodes[i].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[i].get_state(), 'router')
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.sniffer.get_messages_sent_by(ROUTER2)
|
||||
router3_messages = self.sniffer.get_messages_sent_by(ROUTER3)
|
||||
router4_messages = self.sniffer.get_messages_sent_by(ROUTER4)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.simulator.get_messages_sent_by(ROUTER2)
|
||||
router3_messages = self.simulator.get_messages_sent_by(ROUTER3)
|
||||
router4_messages = self.simulator.get_messages_sent_by(ROUTER4)
|
||||
|
||||
# 1 - Leader, Router1, Router2, Router3
|
||||
leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -39,15 +39,16 @@ ROUTER1 = 2
|
||||
REED0 = 3
|
||||
REED1 = 4
|
||||
ROUTER2 = 5
|
||||
SNIFFER = 6
|
||||
|
||||
|
||||
class Cert_5_1_09_REEDAttachConnectivity(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 6):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -85,47 +86,41 @@ class Cert_5_1_09_REEDAttachConnectivity(unittest.TestCase):
|
||||
self.nodes[ROUTER2].enable_whitelist()
|
||||
self.nodes[ROUTER2].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[REED0].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[REED0].get_state(), 'child')
|
||||
|
||||
self.nodes[REED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[REED1].get_state(), 'child')
|
||||
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[REED1].get_state(), 'router')
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER1)
|
||||
reed0_messages = self.sniffer.get_messages_sent_by(REED0)
|
||||
reed1_messages = self.sniffer.get_messages_sent_by(REED1)
|
||||
router2_messages = self.sniffer.get_messages_sent_by(ROUTER2)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER1)
|
||||
reed0_messages = self.simulator.get_messages_sent_by(REED0)
|
||||
reed1_messages = self.simulator.get_messages_sent_by(REED1)
|
||||
router2_messages = self.simulator.get_messages_sent_by(ROUTER2)
|
||||
|
||||
# 1 - Leader, Router1, REED1, REED2
|
||||
leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -38,15 +38,16 @@ LEADER = 1
|
||||
ROUTER1 = 2
|
||||
ROUTER2 = 3
|
||||
ROUTER3 = 4
|
||||
SNIFFER = 5
|
||||
|
||||
|
||||
class Cert_5_1_10_RouterAttachLinkQuality(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 5):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -75,39 +76,33 @@ class Cert_5_1_10_RouterAttachLinkQuality(unittest.TestCase):
|
||||
self.nodes[ROUTER3].enable_whitelist()
|
||||
self.nodes[ROUTER3].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER3].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.sniffer.get_messages_sent_by(ROUTER2)
|
||||
router3_messages = self.sniffer.get_messages_sent_by(ROUTER3)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.simulator.get_messages_sent_by(ROUTER2)
|
||||
router3_messages = self.simulator.get_messages_sent_by(ROUTER3)
|
||||
|
||||
# 1 - Leader, Router1, Router2
|
||||
leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -38,15 +38,16 @@ LEADER = 1
|
||||
REED = 2
|
||||
ROUTER2 = 3
|
||||
ROUTER1 = 4
|
||||
SNIFFER = 5
|
||||
|
||||
|
||||
class Cert_5_1_11_REEDAttachLinkQuality(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 5):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -75,40 +76,34 @@ class Cert_5_1_11_REEDAttachLinkQuality(unittest.TestCase):
|
||||
self.nodes[ROUTER1].enable_whitelist()
|
||||
self.nodes[ROUTER1].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[REED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[REED].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[REED].get_state(), 'router')
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
reed_messages = self.sniffer.get_messages_sent_by(REED)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.sniffer.get_messages_sent_by(ROUTER2)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
reed_messages = self.simulator.get_messages_sent_by(REED)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.simulator.get_messages_sent_by(ROUTER2)
|
||||
|
||||
# 1 - Leader. REED1, Router2
|
||||
leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -37,15 +37,16 @@ import node
|
||||
LEADER = 1
|
||||
ROUTER1 = 2
|
||||
ROUTER2 = 3
|
||||
SNIFFER = 4
|
||||
|
||||
|
||||
class Cert_5_1_12_NewRouterSync(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 4):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -65,16 +66,11 @@ class Cert_5_1_12_NewRouterSync(unittest.TestCase):
|
||||
self.nodes[ROUTER2].enable_whitelist()
|
||||
self.nodes[ROUTER2].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def verify_step_4(self, router1_messages, router2_messages, req_receiver, accept_receiver):
|
||||
if router2_messages.contains_mle_message(mle.CommandType.LINK_REQUEST) and \
|
||||
@@ -113,23 +109,22 @@ class Cert_5_1_12_NewRouterSync(unittest.TestCase):
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.sniffer.get_messages_sent_by(ROUTER2)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.simulator.get_messages_sent_by(ROUTER2)
|
||||
|
||||
# 2 - Router1
|
||||
msg = router1_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
@@ -142,11 +137,11 @@ class Cert_5_1_12_NewRouterSync(unittest.TestCase):
|
||||
self.nodes[ROUTER1].add_whitelist(self.nodes[ROUTER2].get_addr64())
|
||||
self.nodes[ROUTER2].add_whitelist(self.nodes[ROUTER1].get_addr64())
|
||||
|
||||
time.sleep(35)
|
||||
self.simulator.go(35)
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.sniffer.get_messages_sent_by(ROUTER2)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER1)
|
||||
router2_messages = self.simulator.get_messages_sent_by(ROUTER2)
|
||||
|
||||
# 4 - Router1, Router2
|
||||
self.assertTrue(self.verify_step_4(router1_messages, router2_messages, ROUTER1, ROUTER2) or
|
||||
|
||||
@@ -36,15 +36,16 @@ import node
|
||||
|
||||
LEADER = 1
|
||||
ROUTER = 2
|
||||
SNIFFER = 3
|
||||
|
||||
|
||||
class Cert_5_1_13_RouterReset(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -55,45 +56,39 @@ class Cert_5_1_13_RouterReset(unittest.TestCase):
|
||||
self.nodes[ROUTER].set_mode('rsdn')
|
||||
self._setUpRouter()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def _setUpRouter(self):
|
||||
self.nodes[ROUTER].add_whitelist(self.nodes[LEADER].get_addr64())
|
||||
self.nodes[ROUTER].enable_whitelist()
|
||||
self.nodes[ROUTER].set_router_selection_jitter(1)
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
time.sleep(4)
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
rloc16 = self.nodes[ROUTER].get_addr16()
|
||||
|
||||
self.nodes[ROUTER].reset()
|
||||
self._setUpRouter()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[ROUTER].get_addr16(), rloc16)
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.sniffer.get_messages_sent_by(ROUTER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
router1_messages = self.simulator.get_messages_sent_by(ROUTER)
|
||||
|
||||
# 1 - All
|
||||
leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -45,9 +45,11 @@ MED1 = 4
|
||||
|
||||
class Cert_5_2_01_REEDAttach(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 5):
|
||||
self.nodes[i] = node.Node(i, i == MED1)
|
||||
self.nodes[i] = node.Node(i, i == MED1, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -74,39 +76,34 @@ class Cert_5_2_01_REEDAttach(unittest.TestCase):
|
||||
self.nodes[MED1].add_whitelist(self.nodes[REED1].get_addr64())
|
||||
self.nodes[MED1].enable_whitelist()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
# 1 DUT_ROUTER1: Attach to LEADER
|
||||
self.nodes[DUT_ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')
|
||||
|
||||
# DUT_ROUTER1: Verify MLE advertisements
|
||||
router1_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER1)
|
||||
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()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[REED1].get_state(), 'child')
|
||||
|
||||
# 3 DUT_ROUTER1: Verify MLE Parent Response
|
||||
router1_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER1)
|
||||
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)
|
||||
@@ -120,18 +117,18 @@ class Cert_5_2_01_REEDAttach(unittest.TestCase):
|
||||
|
||||
# 6 MED1: Attach to REED1
|
||||
self.nodes[MED1].start()
|
||||
time.sleep(5)
|
||||
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.sniffer.get_messages_sent_by(REED1)
|
||||
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.sniffer.get_messages_sent_by(DUT_ROUTER1)
|
||||
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')
|
||||
|
||||
@@ -39,13 +39,14 @@ DUT_LEADER = 1
|
||||
ROUTER_1 = 2
|
||||
ROUTER_31 = 32
|
||||
ROUTER_32 = 33
|
||||
SNIFFER = 34
|
||||
|
||||
class Cert_5_2_3_LeaderReject2Hops(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
|
||||
self.nodes[DUT_LEADER] = node.Node(DUT_LEADER)
|
||||
self.nodes[DUT_LEADER] = node.Node(DUT_LEADER, simulator=self.simulator)
|
||||
self.nodes[DUT_LEADER].set_panid(0xface)
|
||||
self.nodes[DUT_LEADER].set_mode('rsdn')
|
||||
self.nodes[DUT_LEADER].enable_whitelist()
|
||||
@@ -53,7 +54,7 @@ class Cert_5_2_3_LeaderReject2Hops(unittest.TestCase):
|
||||
self.nodes[DUT_LEADER].set_router_downgrade_threshold(33)
|
||||
|
||||
for i in range(2, 33):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
self.nodes[i].set_panid(0xface)
|
||||
self.nodes[i].set_mode('rsdn')
|
||||
self.nodes[i].add_whitelist(self.nodes[DUT_LEADER].get_addr64())
|
||||
@@ -63,7 +64,7 @@ class Cert_5_2_3_LeaderReject2Hops(unittest.TestCase):
|
||||
self.nodes[i].set_router_downgrade_threshold(33)
|
||||
self.nodes[i].set_router_selection_jitter(1)
|
||||
|
||||
self.nodes[ROUTER_32] = node.Node(ROUTER_32)
|
||||
self.nodes[ROUTER_32] = node.Node(ROUTER_32, simulator=self.simulator)
|
||||
self.nodes[ROUTER_32].set_panid(0xface)
|
||||
self.nodes[ROUTER_32].set_mode('rsdn')
|
||||
self.nodes[ROUTER_32].add_whitelist(self.nodes[ROUTER_1].get_addr64())
|
||||
@@ -73,38 +74,33 @@ class Cert_5_2_3_LeaderReject2Hops(unittest.TestCase):
|
||||
self.nodes[ROUTER_32].set_router_downgrade_threshold(33)
|
||||
self.nodes[ROUTER_32].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1
|
||||
self.nodes[DUT_LEADER].start()
|
||||
self.nodes[DUT_LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 32):
|
||||
self.nodes[i].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[i].get_state(), 'router')
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
|
||||
# 2
|
||||
self.nodes[ROUTER_31].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER_31].get_state(), 'router')
|
||||
|
||||
# 3 - DUT_LEADER
|
||||
# This method flushes the message queue so calling this method again will return only the newly logged messages.
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = leader_messages.next_coap_message('2.04')
|
||||
msg.assertCoapMessageContainsTlv(network_layer.Status)
|
||||
msg.assertCoapMessageContainsTlv(network_layer.RouterMask)
|
||||
@@ -119,10 +115,10 @@ class Cert_5_2_3_LeaderReject2Hops(unittest.TestCase):
|
||||
|
||||
# 5 - Router_32
|
||||
self.nodes[ROUTER_32].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
# 6 - DUT_LEADER
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = leader_messages.next_coap_message('2.04')
|
||||
msg.assertCoapMessageContainsTlv(network_layer.Status)
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ LEADER = 1
|
||||
ROUTER = 16
|
||||
DUT_REED = 17
|
||||
ED = 18
|
||||
SNIFFER = 19
|
||||
MESH_LOCAL_PREFIX = 'fdde:ad00:beef:0:'
|
||||
ROUTING_LACATOR = ':0:ff:fe00'
|
||||
REED_ADVERTISEMENT_INTERVAL = 570
|
||||
@@ -48,9 +47,11 @@ ROUTER_SELECTION_JITTER = 1
|
||||
|
||||
class Cert_5_2_4_REEDUpgrade(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 19):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -77,34 +78,29 @@ class Cert_5_2_4_REEDUpgrade(unittest.TestCase):
|
||||
self.nodes[ED].add_whitelist(self.nodes[DUT_REED].get_addr64())
|
||||
self.nodes[ED].enable_whitelist()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1 Ensure topology is formed correctly without the DUT_REED.
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 17):
|
||||
self.nodes[i].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[i].get_state(), 'router')
|
||||
|
||||
# 2 DUT_REED: Attach to ROUTER, 2-hops from the Leader.
|
||||
self.nodes[DUT_REED].start()
|
||||
time.sleep(5)
|
||||
time.sleep(ROUTER_SELECTION_JITTER)
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(ROUTER_SELECTION_JITTER)
|
||||
|
||||
reed_messages = self.sniffer.get_messages_sent_by(DUT_REED)
|
||||
reed_messages = self.simulator.get_messages_sent_by(DUT_REED)
|
||||
|
||||
# The DUT_REED must not send a coap message here.
|
||||
msg = reed_messages.does_not_contain_coap_message()
|
||||
@@ -119,18 +115,18 @@ class Cert_5_2_4_REEDUpgrade(unittest.TestCase):
|
||||
msg.assertMleMessageDoesNotContainTlv(mle.Route64)
|
||||
|
||||
# 4 Wait for DUT_REED to send the second packet.
|
||||
time.sleep(REED_ADVERTISEMENT_INTERVAL + REED_ADVERTISEMENT_MAX_JITTER)
|
||||
self.simulator.go(REED_ADVERTISEMENT_INTERVAL + REED_ADVERTISEMENT_MAX_JITTER)
|
||||
|
||||
# 5 DUT_REED: Verify the second MLE Advertisement.
|
||||
reed_messages = self.sniffer.get_messages_sent_by(DUT_REED)
|
||||
reed_messages = self.simulator.get_messages_sent_by(DUT_REED)
|
||||
msg = reed_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
# 6 ED
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
# 7 DUT_REED: Verify MLE Parent Response.
|
||||
reed_messages = self.sniffer.get_messages_sent_by(DUT_REED)
|
||||
reed_messages = self.simulator.get_messages_sent_by(DUT_REED)
|
||||
msg = reed_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
|
||||
msg.assertSentToNode(self.nodes[ED])
|
||||
msg.assertMleMessageContainsTlv(mle.SourceAddress)
|
||||
|
||||
@@ -43,9 +43,11 @@ ROUTER_SELECTION_JITTER = 1
|
||||
|
||||
class Cert_5_2_5_AddressQuery(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 19):
|
||||
self.nodes[i] = node.Node(i, (i == ED1))
|
||||
self.nodes[i] = node.Node(i, (i == ED1), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid()
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -72,28 +74,23 @@ class Cert_5_2_5_AddressQuery(unittest.TestCase):
|
||||
self.nodes[DUT_REED].enable_whitelist()
|
||||
self.nodes[DUT_REED].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1. LEADER: DHCPv6 Server for prefix 2001::/64.
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
self.nodes[LEADER].add_prefix('2001::/64', 'pdros')
|
||||
self.nodes[LEADER].register_netdata()
|
||||
|
||||
# 2. BR: SLAAC Server for prefix 2002::/64.
|
||||
self.nodes[BR].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[BR].get_state(), 'router')
|
||||
self.nodes[BR].add_prefix('2002::/64', 'paros')
|
||||
self.nodes[BR].register_netdata()
|
||||
@@ -103,19 +100,19 @@ class Cert_5_2_5_AddressQuery(unittest.TestCase):
|
||||
if i == BR:
|
||||
continue
|
||||
self.nodes[i].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[i].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
# 4. Bring up DUT_REED.
|
||||
self.nodes[DUT_REED].start()
|
||||
time.sleep(5)
|
||||
time.sleep(ROUTER_SELECTION_JITTER)
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(ROUTER_SELECTION_JITTER)
|
||||
|
||||
reed_messages = self.sniffer.get_messages_sent_by(DUT_REED)
|
||||
reed_messages = self.simulator.get_messages_sent_by(DUT_REED)
|
||||
|
||||
# Verify DUT_REED doesn't try to become router.
|
||||
msg = reed_messages.does_not_contain_coap_message()
|
||||
@@ -129,7 +126,7 @@ class Cert_5_2_5_AddressQuery(unittest.TestCase):
|
||||
mleid = self.nodes[DUT_REED].get_ip6_address(config.ADDRESS_TYPE.ML_EID)
|
||||
self.assertTrue(self.nodes[ED1].ping(mleid))
|
||||
|
||||
reed_messages = self.sniffer.get_messages_sent_by(DUT_REED)
|
||||
reed_messages = self.simulator.get_messages_sent_by(DUT_REED)
|
||||
msg = reed_messages.next_coap_message('0.02')
|
||||
command.check_address_notification(msg, self.nodes[DUT_REED], self.nodes[LEADER])
|
||||
|
||||
@@ -145,7 +142,7 @@ class Cert_5_2_5_AddressQuery(unittest.TestCase):
|
||||
raise "Error: Address is unexpected."
|
||||
self.assertTrue(self.nodes[ED1].ping(global_address))
|
||||
|
||||
reed_messages = self.sniffer.get_messages_sent_by(DUT_REED)
|
||||
reed_messages = self.simulator.get_messages_sent_by(DUT_REED)
|
||||
msg = reed_messages.next_coap_message('0.02')
|
||||
command.check_address_notification(msg, self.nodes[DUT_REED], self.nodes[LEADER])
|
||||
|
||||
|
||||
@@ -42,9 +42,11 @@ ROUTER24 = 24
|
||||
|
||||
class Cert_5_2_06_RouterDowngrade(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 25):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
self.nodes[i].set_panid()
|
||||
self.nodes[i].set_mode('rsdn')
|
||||
self.nodes[i].set_router_selection_jitter(1)
|
||||
@@ -52,44 +54,39 @@ class Cert_5_2_06_RouterDowngrade(unittest.TestCase):
|
||||
self.nodes[i].set_router_upgrade_threshold(32)
|
||||
self.nodes[i].set_router_downgrade_threshold(32)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1 Ensure topology is formed correctly without ROUTER24.
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 24):
|
||||
self.nodes[i].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[i].get_state(), 'router')
|
||||
|
||||
# This method flushes the message queue so calling this method again will return only the newly logged messages.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER1)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
|
||||
|
||||
# 2 ROUTER24: Attach to network.
|
||||
# All reference testbed devices have been configured with downgrade threshold as 32 except DUT_ROUTER1,
|
||||
# so we don't need to ensure ROUTER24 has a better link quality on posix.
|
||||
self.nodes[ROUTER24].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER24].get_state(), 'router')
|
||||
|
||||
# 3 DUT_ROUTER1:
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'child')
|
||||
|
||||
# Verify it sent a Parent Request and Child ID Request.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER1)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
|
||||
dut_messages.next_mle_message(mle.CommandType.PARENT_REQUEST)
|
||||
dut_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
|
||||
|
||||
|
||||
@@ -42,33 +42,30 @@ DUT_REED = 17
|
||||
|
||||
class Cert_5_2_7_REEDSynchronization(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 18):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
self.nodes[i].set_panid(0xface)
|
||||
self.nodes[i].set_mode('rsdn')
|
||||
self.nodes[i].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1. Ensure topology is formed correctly without DUT_ROUTER1.
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 17):
|
||||
self.nodes[i].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
for i in range(2, 17):
|
||||
self.assertEqual(self.nodes[i].get_state(), 'router')
|
||||
@@ -78,11 +75,11 @@ class Cert_5_2_7_REEDSynchronization(unittest.TestCase):
|
||||
self.nodes[DUT_REED].add_whitelist(self.nodes[DUT_ROUTER1].get_addr64(), config.RSSI['LINK_QULITY_1'])
|
||||
|
||||
self.nodes[DUT_REED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[DUT_REED].get_state(), 'child')
|
||||
|
||||
# The DUT_REED must not send a coap message here.
|
||||
reed_messages = self.sniffer.get_messages_sent_by(DUT_REED)
|
||||
reed_messages = self.simulator.get_messages_sent_by(DUT_REED)
|
||||
msg = reed_messages.does_not_contain_coap_message()
|
||||
assert msg is True, "Error: The DUT_REED sent an Address Solicit Request"
|
||||
|
||||
@@ -92,8 +89,8 @@ class Cert_5_2_7_REEDSynchronization(unittest.TestCase):
|
||||
command.check_link_request(msg)
|
||||
|
||||
# 4. DUT_ROUTER1: Verify sent a Link Accept to DUT_REED.
|
||||
time.sleep(30)
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER1)
|
||||
self.simulator.go(30)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
|
||||
flag_link_accept = False
|
||||
while True:
|
||||
msg = dut_messages.next_mle_message(mle.CommandType.LINK_ACCEPT, False)
|
||||
|
||||
@@ -39,9 +39,11 @@ DUT_ROUTER1 = 2
|
||||
|
||||
class Cert_5_3_1_LinkLocal(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -54,15 +56,16 @@ class Cert_5_3_1_LinkLocal(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[DUT_ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')
|
||||
|
||||
# 2 & 3
|
||||
|
||||
@@ -41,9 +41,11 @@ SED1 = 4
|
||||
|
||||
class Cert_5_3_2_RealmLocal(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i == SED1))
|
||||
self.nodes[i] = node.Node(i, (i == SED1), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -70,33 +72,28 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
|
||||
self.nodes[SED1].enable_whitelist()
|
||||
self.nodes[SED1].set_timeout(3)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[DUT_ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[DUT_ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
# 2 & 3
|
||||
@@ -106,31 +103,31 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
|
||||
|
||||
# 4 & 5
|
||||
self.assertTrue(self.nodes[LEADER].ping('ff03::1', num_responses=2, size=256))
|
||||
sed_messages = self.sniffer.get_messages_sent_by(SED1)
|
||||
sed_messages = self.simulator.get_messages_sent_by(SED1)
|
||||
self.assertFalse(sed_messages.contains_icmp_message())
|
||||
|
||||
self.assertTrue(self.nodes[LEADER].ping('ff03::1', num_responses=2))
|
||||
sed_messages = self.sniffer.get_messages_sent_by(SED1)
|
||||
sed_messages = self.simulator.get_messages_sent_by(SED1)
|
||||
self.assertFalse(sed_messages.contains_icmp_message())
|
||||
|
||||
# 6 & 7
|
||||
self.assertTrue(self.nodes[LEADER].ping('ff03::2', num_responses=2, size=256))
|
||||
sed_messages = self.sniffer.get_messages_sent_by(SED1)
|
||||
sed_messages = self.simulator.get_messages_sent_by(SED1)
|
||||
self.assertFalse(sed_messages.contains_icmp_message())
|
||||
|
||||
self.assertTrue(self.nodes[LEADER].ping('ff03::2', num_responses=2))
|
||||
sed_messages = self.sniffer.get_messages_sent_by(SED1)
|
||||
sed_messages = self.simulator.get_messages_sent_by(SED1)
|
||||
self.assertFalse(sed_messages.contains_icmp_message())
|
||||
|
||||
# 8
|
||||
self.assertTrue(self.nodes[LEADER].ping(config.REALM_LOCAL_All_THREAD_NODES_MULTICAST_ADDRESS, num_responses=3, size=256))
|
||||
time.sleep(2)
|
||||
sed_messages = self.sniffer.get_messages_sent_by(SED1)
|
||||
self.simulator.go(2)
|
||||
sed_messages = self.simulator.get_messages_sent_by(SED1)
|
||||
self.assertTrue(sed_messages.contains_icmp_message())
|
||||
|
||||
self.assertTrue(self.nodes[LEADER].ping(config.REALM_LOCAL_All_THREAD_NODES_MULTICAST_ADDRESS, num_responses=3))
|
||||
time.sleep(2)
|
||||
sed_messages = self.sniffer.get_messages_sent_by(SED1)
|
||||
self.simulator.go(2)
|
||||
sed_messages = self.simulator.get_messages_sent_by(SED1)
|
||||
self.assertTrue(sed_messages.contains_icmp_message())
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -43,9 +43,11 @@ MED1_TIMEOUT = 3
|
||||
|
||||
class Cert_5_3_3_AddressQuery(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i == MED1))
|
||||
self.nodes[i] = node.Node(i, (i == MED1), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid()
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -81,28 +83,23 @@ class Cert_5_3_3_AddressQuery(unittest.TestCase):
|
||||
self.nodes[MED1].set_timeout(MED1_TIMEOUT)
|
||||
self.nodes[MED1].enable_whitelist()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
self.nodes[DUT_ROUTER2].start()
|
||||
self.nodes[ROUTER3].start()
|
||||
self.nodes[MED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[DUT_ROUTER2].get_state(), 'router')
|
||||
@@ -112,42 +109,42 @@ class Cert_5_3_3_AddressQuery(unittest.TestCase):
|
||||
|
||||
# 2
|
||||
# Flush the message queue to avoid possible impact on follow-up verification.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
|
||||
router3_mleid = self.nodes[ROUTER3].get_ip6_address(config.ADDRESS_TYPE.ML_EID)
|
||||
self.assertTrue(self.nodes[MED1].ping(router3_mleid))
|
||||
|
||||
# Verify DUT_ROUTER2 sent an Address Query Request to the Realm local address.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
msg = dut_messages.next_coap_message('0.02', '/a/aq')
|
||||
command.check_address_query(msg, self.nodes[DUT_ROUTER2], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
|
||||
|
||||
# 3
|
||||
# Wait the finish of address resolution traffic triggerred by previous ping.
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
# Flush the message queue to avoid possible impact on follow-up verification.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
|
||||
med1_mleid = self.nodes[MED1].get_ip6_address(config.ADDRESS_TYPE.ML_EID)
|
||||
self.assertTrue(self.nodes[ROUTER1].ping(med1_mleid))
|
||||
|
||||
# Verify DUT_ROUTER2 responded with an Address Notification.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
msg = dut_messages.next_coap_message('0.02', '/a/an')
|
||||
command.check_address_notification(msg, self.nodes[DUT_ROUTER2], self.nodes[ROUTER1])
|
||||
|
||||
# 4
|
||||
# Wait the finish of address resolution traffic triggerred by previous ping.
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
# Flush the message queue to avoid possible impact on follow-up verification.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
|
||||
self.assertTrue(self.nodes[MED1].ping(router3_mleid))
|
||||
|
||||
# Verify DUT_ROUTER2 didn't send an Address Query Request.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
msg = dut_messages.next_coap_message('0.02', '/a/aq', False)
|
||||
assert msg is None, "The Address Query Request is not expected."
|
||||
|
||||
@@ -156,30 +153,30 @@ class Cert_5_3_3_AddressQuery(unittest.TestCase):
|
||||
|
||||
# Wait for the Leader to expire its Router ID.
|
||||
# MAX_NEIGHBOR_AGE + INFINITE_COST_TIMEOUT + ID_REUSE_DELAY + propagation time + transmission time ~ 580s.
|
||||
time.sleep(580)
|
||||
self.simulator.go(580)
|
||||
|
||||
# Flush the message queue to avoid possible impact on follow-up verification.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
|
||||
self.assertFalse(self.nodes[MED1].ping(router3_mleid))
|
||||
|
||||
# Verify DUT_ROUTER2 sent an Address Query Request to the Realm local address.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
msg = dut_messages.next_coap_message('0.02', '/a/aq')
|
||||
command.check_address_query(msg, self.nodes[DUT_ROUTER2], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
|
||||
|
||||
# 6
|
||||
self.nodes[MED1].stop()
|
||||
time.sleep(MED1_TIMEOUT)
|
||||
self.simulator.go(MED1_TIMEOUT)
|
||||
|
||||
# Flush the message queue to avoid possible impact on follow-up verification.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
|
||||
self.assertFalse(self.nodes[ROUTER1].ping(med1_mleid))
|
||||
self.assertFalse(self.nodes[ROUTER1].ping(med1_mleid))
|
||||
|
||||
# Verify DUT_ROUTER2 didn't respond with an Address Notification.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
msg = dut_messages.next_coap_message('0.02', '/a/an', False)
|
||||
assert msg is None, "The Address Notification is not expected."
|
||||
|
||||
|
||||
@@ -46,9 +46,11 @@ MTDS = [SED1, ED1, ED2, ED3, ED4]
|
||||
|
||||
class Cert_5_3_4_AddressMapCache(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,8):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -80,27 +82,22 @@ class Cert_5_3_4_AddressMapCache(unittest.TestCase):
|
||||
self.nodes[ED].add_whitelist(self.nodes[LEADER].get_addr64())
|
||||
self.nodes[ED].enable_whitelist()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[DUT_ROUTER1].start()
|
||||
for i in MTDS:
|
||||
self.nodes[i].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')
|
||||
|
||||
@@ -108,30 +105,30 @@ class Cert_5_3_4_AddressMapCache(unittest.TestCase):
|
||||
self.assertEqual(self.nodes[i].get_state(), 'child')
|
||||
|
||||
# This method flushes the message queue so calling this method again will return only the newly logged messages.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER1)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
|
||||
|
||||
# 2
|
||||
for ED in [ED1, ED2, ED3, ED4]:
|
||||
ed_mleid = self.nodes[ED].get_ip6_address(config.ADDRESS_TYPE.ML_EID)
|
||||
self.assertTrue(self.nodes[SED1].ping(ed_mleid))
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
# Verify DUT_ROUTER1 generated an Address Query Request to find each node's RLOC.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER1)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
|
||||
msg = dut_messages.next_coap_message('0.02', '/a/aq')
|
||||
command.check_address_query(msg, self.nodes[DUT_ROUTER1], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
|
||||
|
||||
# 3 & 4
|
||||
# This method flushes the message queue so calling this method again will return only the newly logged messages.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER1)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
|
||||
|
||||
for ED in [ED1, ED2, ED3, ED4]:
|
||||
ed_mleid = self.nodes[ED].get_ip6_address(config.ADDRESS_TYPE.ML_EID)
|
||||
self.assertTrue(self.nodes[SED1].ping(ed_mleid))
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
# Verify DUT_ROUTER1 didn't generate an Address Query Request.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER1)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
|
||||
msg = dut_messages.next_coap_message('0.02', '/a/aq', False)
|
||||
assert msg is None, "Error: The DUT sent an unexpected Address Query Request"
|
||||
|
||||
|
||||
@@ -41,9 +41,11 @@ ROUTER3 = 4
|
||||
|
||||
class Cert_5_3_5_RoutingLinkQuality(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -72,26 +74,21 @@ class Cert_5_3_5_RoutingLinkQuality(unittest.TestCase):
|
||||
self.nodes[ROUTER3].enable_whitelist()
|
||||
self.nodes[ROUTER3].set_router_selection_jitter(1)
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for router in range(DUT_ROUTER1, ROUTER3 + 1):
|
||||
self.nodes[router].start()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
for router in range(DUT_ROUTER1, ROUTER3 + 1):
|
||||
self.assertEqual(self.nodes[router].get_state(), 'router')
|
||||
@@ -102,38 +99,38 @@ class Cert_5_3_5_RoutingLinkQuality(unittest.TestCase):
|
||||
# Verify the ICMPv6 Echo Request took the least cost path.
|
||||
self.assertTrue(self.nodes[ROUTER3].ping(leader_rloc))
|
||||
path = [ROUTER3, DUT_ROUTER1, LEADER]
|
||||
command.check_icmp_path(self.sniffer, path, self.nodes)
|
||||
command.check_icmp_path(self.simulator, path, self.nodes)
|
||||
|
||||
# 4 & 5
|
||||
self.nodes[LEADER].add_whitelist(self.nodes[DUT_ROUTER1].get_addr64(), config.RSSI['LINK_QULITY_1'])
|
||||
self.nodes[DUT_ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64(), config.RSSI['LINK_QULITY_1'])
|
||||
time.sleep(70)
|
||||
self.simulator.go(70)
|
||||
|
||||
# Verify the ICMPv6 Echo Request took the longer path because it cost less.
|
||||
self.assertTrue(self.nodes[ROUTER3].ping(leader_rloc))
|
||||
path = [ROUTER3, DUT_ROUTER1, ROUTER2, LEADER]
|
||||
command.check_icmp_path(self.sniffer, path, self.nodes)
|
||||
command.check_icmp_path(self.simulator, path, self.nodes)
|
||||
|
||||
# 6 & 7
|
||||
self.nodes[LEADER].add_whitelist(self.nodes[DUT_ROUTER1].get_addr64(), config.RSSI['LINK_QULITY_2'])
|
||||
self.nodes[DUT_ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64(), config.RSSI['LINK_QULITY_2'])
|
||||
time.sleep(70)
|
||||
self.simulator.go(70)
|
||||
|
||||
# Verify the direct neighbor would be prioritized when there are two paths with the same cost.
|
||||
self.assertTrue(self.nodes[ROUTER3].ping(leader_rloc))
|
||||
path = [ROUTER3, DUT_ROUTER1, LEADER]
|
||||
command.check_icmp_path(self.sniffer, path, self.nodes)
|
||||
command.check_icmp_path(self.simulator, path, self.nodes)
|
||||
|
||||
# 8 & 9
|
||||
self.nodes[LEADER].add_whitelist(self.nodes[DUT_ROUTER1].get_addr64(), config.RSSI['LINK_QULITY_0'])
|
||||
self.nodes[DUT_ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64(), config.RSSI['LINK_QULITY_0'])
|
||||
time.sleep(70)
|
||||
self.simulator.go(70)
|
||||
|
||||
# Verify the ICMPv6 Echo Request took the longer path.
|
||||
leader_rloc = self.nodes[LEADER].get_ip6_address(config.ADDRESS_TYPE.RLOC)
|
||||
self.assertTrue(self.nodes[ROUTER3].ping(leader_rloc))
|
||||
path = [ROUTER3, DUT_ROUTER1, ROUTER2, LEADER]
|
||||
command.check_icmp_path(self.sniffer, path, self.nodes)
|
||||
command.check_icmp_path(self.simulator, path, self.nodes)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
@@ -41,9 +41,11 @@ ROUTER2 = 3
|
||||
|
||||
class Cert_5_3_6_RouterIdMask(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[DUT_LEADER].set_panid(0xface)
|
||||
self.nodes[DUT_LEADER].set_mode('rsdn')
|
||||
@@ -61,39 +63,34 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
|
||||
self.nodes[ROUTER2].set_mode('rsdn')
|
||||
self._setUpRouter2()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def _setUpRouter2(self):
|
||||
self.nodes[ROUTER2].add_whitelist(self.nodes[ROUTER1].get_addr64())
|
||||
self.nodes[ROUTER2].enable_whitelist()
|
||||
self.nodes[ROUTER2].set_router_selection_jitter(1)
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1
|
||||
self.nodes[DUT_LEADER].start()
|
||||
self.nodes[DUT_LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
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.
|
||||
time.sleep(config.MAX_ADVERTISEMENT_INTERVAL)
|
||||
self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)
|
||||
|
||||
# 2
|
||||
self.nodes[ROUTER2].reset()
|
||||
@@ -101,15 +98,15 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
|
||||
|
||||
# 3 & 4
|
||||
# Flush the message queue to avoid possible impact on follow-up verification.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
dut_messages = 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):
|
||||
time.sleep(30)
|
||||
self.simulator.go(30)
|
||||
print("%ss" %((i + 1) * 30))
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT, False)
|
||||
if msg == None:
|
||||
continue
|
||||
@@ -121,37 +118,37 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
|
||||
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)
|
||||
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.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(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)
|
||||
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].stop()
|
||||
self.nodes[ROUTER2].stop()
|
||||
self.nodes[ROUTER1].reset()
|
||||
self.nodes[ROUTER2].reset()
|
||||
|
||||
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)
|
||||
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)
|
||||
|
||||
time.sleep(config.INFINITE_COST_TIMEOUT + config.MAX_ADVERTISEMENT_INTERVAL)
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
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))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -38,9 +39,11 @@ ROUTER2 = 3
|
||||
|
||||
class Cert_5_3_6_RouterIdMask(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -64,24 +67,25 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER1].stop()
|
||||
self.nodes[ROUTER2].stop()
|
||||
|
||||
time.sleep(300)
|
||||
self.simulator.go(300)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
@@ -46,9 +46,11 @@ MTDS = [MED1, SED1, MED3]
|
||||
|
||||
class Cert_5_3_7_DuplicateAddress(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,7):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[DUT_LEADER].set_panid(0xface)
|
||||
self.nodes[DUT_LEADER].set_mode('rsdn')
|
||||
@@ -86,27 +88,22 @@ class Cert_5_3_7_DuplicateAddress(unittest.TestCase):
|
||||
self.nodes[MED3].add_whitelist(self.nodes[DUT_LEADER].get_addr64())
|
||||
self.nodes[MED3].enable_whitelist()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1
|
||||
self.nodes[DUT_LEADER].start()
|
||||
self.nodes[DUT_LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(ROUTER1, MED3 + 1):
|
||||
self.nodes[i].start()
|
||||
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
for i in [ROUTER1, ROUTER2]:
|
||||
self.assertEqual(self.nodes[i].get_state(), 'router')
|
||||
@@ -115,7 +112,7 @@ class Cert_5_3_7_DuplicateAddress(unittest.TestCase):
|
||||
self.assertEqual(self.nodes[i].get_state(), 'child')
|
||||
|
||||
# 2
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
command.check_mle_advertisement(msg)
|
||||
|
||||
@@ -126,23 +123,23 @@ class Cert_5_3_7_DuplicateAddress(unittest.TestCase):
|
||||
self.nodes[MED1].add_ipaddr('2001:2:0:1::1234')
|
||||
self.nodes[SED1].add_ipaddr('2001:2:0:1::1234')
|
||||
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
# 4
|
||||
# Flush the message queue to avoid possible impact on follow-up verification.
|
||||
self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
|
||||
self.nodes[MED3].ping('2001:2:0:1::1234')
|
||||
|
||||
# Verify DUT_LEADER sent an Address Query Request to the Realm local address.
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = dut_messages.next_coap_message('0.02', '/a/aq')
|
||||
command.check_address_query(msg, self.nodes[DUT_LEADER], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
|
||||
|
||||
# 5 & 6
|
||||
# Verify DUT_LEADER sent an Address Error Notification to the Realm local address.
|
||||
time.sleep(5)
|
||||
dut_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
self.simulator.go(5)
|
||||
dut_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = dut_messages.next_coap_message('0.02', '/a/ae')
|
||||
command.check_address_error_notification(msg, self.nodes[DUT_LEADER], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
|
||||
|
||||
|
||||
@@ -45,10 +45,11 @@ MTDS = [MED1, MED2]
|
||||
|
||||
class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[DUT_LEADER].set_panid(0xface)
|
||||
self.nodes[DUT_LEADER].set_mode('rsdn')
|
||||
@@ -69,24 +70,19 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
|
||||
self.nodes[i].add_whitelist(self.nodes[DUT_LEADER].get_addr64())
|
||||
self.nodes[i].enable_whitelist()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[DUT_LEADER].start()
|
||||
self.nodes[DUT_LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[BR].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[BR].get_state(), 'router')
|
||||
|
||||
# 1 BR: Configure BR to be a DHCPv6 server
|
||||
@@ -96,19 +92,19 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
|
||||
self.nodes[BR].register_netdata()
|
||||
|
||||
# Set lowpan context of sniffer
|
||||
self.sniffer.set_lowpan_context(1, '2001::/64')
|
||||
self.sniffer.set_lowpan_context(2, '2002::/64')
|
||||
self.sniffer.set_lowpan_context(3, '2003::/64')
|
||||
self.simulator.set_lowpan_context(1, '2001::/64')
|
||||
self.simulator.set_lowpan_context(2, '2002::/64')
|
||||
self.simulator.set_lowpan_context(3, '2003::/64')
|
||||
|
||||
# 2 DUT_LEADER: Verify LEADER sent an Advertisement
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
command.check_mle_advertisement(msg)
|
||||
|
||||
# 3 MED1, MED2: MED1 and MED2 attach to DUT_LEADER
|
||||
for i in MTDS:
|
||||
self.nodes[i].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[i].get_state(), 'child')
|
||||
|
||||
# 4 MED1: MED1 send an ICMPv6 Echo Request to the MED2 ML-EID
|
||||
@@ -117,15 +113,15 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
|
||||
self.assertTrue(self.nodes[MED1].ping(med2_ml_eid))
|
||||
|
||||
# Verify DUT_LEADER didn't generate an Address Query Request
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = leader_messages.next_coap_message('0.02', '/a/aq', False)
|
||||
assert msg is None, "Error: The DUT_LEADER sent an unexpected Address Query Request"
|
||||
|
||||
# Wait for sniffer got packets
|
||||
time.sleep(1)
|
||||
self.simulator.go(1)
|
||||
|
||||
# Verify MED2 sent an ICMPv6 Echo Reply
|
||||
med2_messages = self.sniffer.get_messages_sent_by(MED2)
|
||||
med2_messages = self.simulator.get_messages_sent_by(MED2)
|
||||
msg = med2_messages.get_icmp_message(ipv6.ICMP_ECHO_RESPONSE)
|
||||
assert msg is not None, "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1"
|
||||
|
||||
@@ -135,15 +131,15 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
|
||||
self.assertTrue(self.nodes[MED1].ping(addr))
|
||||
|
||||
# Verify DUT_LEADER didn't generate an Address Query Request
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = leader_messages.next_coap_message('0.02', '/a/aq', False)
|
||||
assert msg is None, "Error: The DUT_LEADER sent an unexpected Address Query Request"
|
||||
|
||||
# Wait for sniffer got packets
|
||||
time.sleep(1)
|
||||
self.simulator.go(1)
|
||||
|
||||
# Verify MED2 sent an ICMPv6 Echo Reply
|
||||
med2_messages = self.sniffer.get_messages_sent_by(MED2)
|
||||
med2_messages = self.simulator.get_messages_sent_by(MED2)
|
||||
msg = med2_messages.get_icmp_message(ipv6.ICMP_ECHO_RESPONSE)
|
||||
assert msg is not None, "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1"
|
||||
|
||||
@@ -153,15 +149,15 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
|
||||
self.assertTrue(self.nodes[MED1].ping(addr))
|
||||
|
||||
# Verify DUT_LEADER didn't generate an Address Query Request
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = leader_messages.next_coap_message('0.02', '/a/aq', False)
|
||||
assert msg is None, "Error: The DUT_LEADER sent an unexpected Address Query Request"
|
||||
|
||||
# Wait for sniffer got packets
|
||||
time.sleep(1)
|
||||
self.simulator.go(1)
|
||||
|
||||
# Verify MED2 sent an ICMPv6 Echo Reply
|
||||
med2_messages = self.sniffer.get_messages_sent_by(MED2)
|
||||
med2_messages = self.simulator.get_messages_sent_by(MED2)
|
||||
msg = med2_messages.get_icmp_message(ipv6.ICMP_ECHO_RESPONSE)
|
||||
assert msg is not None, "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1"
|
||||
|
||||
@@ -171,15 +167,15 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
|
||||
self.assertTrue(self.nodes[MED1].ping(addr))
|
||||
|
||||
# Verify DUT_LEADER didn't generate an Address Query Request
|
||||
leader_messages = self.sniffer.get_messages_sent_by(DUT_LEADER)
|
||||
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
|
||||
msg = leader_messages.next_coap_message('0.02', '/a/aq', False)
|
||||
assert msg is None, "Error: The DUT_LEADER sent an unexpected Address Query Request"
|
||||
|
||||
# Wait for sniffer got packets
|
||||
time.sleep(1)
|
||||
self.simulator.go(1)
|
||||
|
||||
# Verify MED2 sent an ICMPv6 Echo Reply
|
||||
med2_messages = self.sniffer.get_messages_sent_by(MED2)
|
||||
med2_messages = self.simulator.get_messages_sent_by(MED2)
|
||||
msg = med2_messages.get_icmp_message(ipv6.ICMP_ECHO_RESPONSE)
|
||||
assert msg is not None, "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1"
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -40,9 +41,11 @@ SED1 = 5
|
||||
|
||||
class Cert_5_3_09_AddressQuery(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i == SED1))
|
||||
self.nodes[i] = node.Node(i, (i == SED1), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -81,34 +84,36 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'pdros')
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:2::/64', 'pdro')
|
||||
self.nodes[LEADER].register_netdata()
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER3].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
# wait for sed got replied
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
addrs = self.nodes[ROUTER3].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
@@ -130,7 +135,7 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
|
||||
self.assertTrue(self.nodes[SED1].ping(addr))
|
||||
|
||||
self.nodes[ROUTER3].stop()
|
||||
time.sleep(300)
|
||||
self.simulator.go(300)
|
||||
|
||||
addrs = self.nodes[ROUTER3].get_addrs()
|
||||
for addr in addrs:
|
||||
@@ -138,7 +143,7 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
|
||||
self.assertFalse(self.nodes[SED1].ping(addr))
|
||||
|
||||
self.nodes[SED1].stop()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
addrs = self.nodes[SED1].get_addrs()
|
||||
for addr in addrs:
|
||||
|
||||
@@ -46,9 +46,11 @@ MED1 = 5
|
||||
|
||||
class Cert_5_3_10_AddressQuery(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1, 6):
|
||||
self.nodes[i] = node.Node(i, (i == MED1))
|
||||
self.nodes[i] = node.Node(i, (i == MED1), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -83,26 +85,21 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
|
||||
self.nodes[MED1].add_whitelist(self.nodes[DUT_ROUTER2].get_addr64())
|
||||
self.nodes[MED1].enable_whitelist()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer()
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
# 1 & 2
|
||||
# Build and verify the topology
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[BR].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[BR].get_state(), 'router')
|
||||
|
||||
# Configure two On-Mesh Prefixes on the BR
|
||||
@@ -111,19 +108,19 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
|
||||
self.nodes[BR].register_netdata()
|
||||
|
||||
# Set lowpan context of sniffer
|
||||
self.sniffer.set_lowpan_context(1, '2003::/64')
|
||||
self.sniffer.set_lowpan_context(2, '2004::/64')
|
||||
self.simulator.set_lowpan_context(1, '2003::/64')
|
||||
self.simulator.set_lowpan_context(2, '2004::/64')
|
||||
|
||||
self.nodes[DUT_ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[DUT_ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[MED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[MED1].get_state(), 'child')
|
||||
|
||||
# 3 MED1: MED1 sends an ICMPv6 Echo Request to Router1 using GUA 2003:: address
|
||||
@@ -132,10 +129,10 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
|
||||
self.assertTrue(self.nodes[MED1].ping(router1_addr))
|
||||
|
||||
# Wait for sniffer got Address Notification messages
|
||||
time.sleep(1)
|
||||
self.simulator.go(1)
|
||||
|
||||
# Verify DUT_ROUTER2 sent an Address Query Request
|
||||
dut_router2_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_router2_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
msg = dut_router2_messages.next_coap_message('0.02', '/a/aq')
|
||||
command.check_address_query(msg, self.nodes[DUT_ROUTER2], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
|
||||
|
||||
@@ -150,10 +147,10 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
|
||||
self.assertTrue(self.nodes[BR].ping(med1_addr))
|
||||
|
||||
# Wait for sniffer got Address Notification messages
|
||||
time.sleep(1)
|
||||
self.simulator.go(1)
|
||||
|
||||
# Verify DUT_ROUTER2 sent an Address Notification message
|
||||
dut_router2_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_router2_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
msg = dut_router2_messages.next_coap_message('0.02', '/a/an')
|
||||
command.check_address_notification(msg, self.nodes[DUT_ROUTER2], self.nodes[BR])
|
||||
|
||||
@@ -163,10 +160,10 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
|
||||
self.assertTrue(self.nodes[MED1].ping(addr))
|
||||
|
||||
# Wait for sniffer got ICMPv6 Echo Reply
|
||||
time.sleep(1)
|
||||
self.simulator.go(1)
|
||||
|
||||
# Verify DUT_ROUTER2 didn't generate an Address Query Request
|
||||
dut_router2_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_router2_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_router2_messages_temp = copy.deepcopy(dut_router2_messages)
|
||||
msg = dut_router2_messages.next_coap_message('0.02', '/a/aq', False)
|
||||
assert msg is None, "Error: The DUT_ROUTER2 sent an unexpected Address Query Request"
|
||||
@@ -179,7 +176,7 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
|
||||
# 6 DUT_ROUTER2: Power off ROUTER1 and wait 580 seconds to allow the LEADER to expire its Router ID
|
||||
router1_id = self.nodes[ROUTER1].get_router_id()
|
||||
self.nodes[ROUTER1].stop()
|
||||
time.sleep(580)
|
||||
self.simulator.go(580)
|
||||
|
||||
# Send an ICMPv6 Echo Request from MED1 to ROUTER1 GUA 2003:: address
|
||||
self.assertFalse(self.nodes[MED1].ping(router1_addr))
|
||||
@@ -188,20 +185,20 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
|
||||
command.check_router_id_cached(self.nodes[DUT_ROUTER2], router1_id, False)
|
||||
|
||||
# Verify DUT_ROUTER2 sent an Address Query Request
|
||||
dut_router2_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_router2_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
msg = dut_router2_messages.next_coap_message('0.02', '/a/aq')
|
||||
msg.assertSentToDestinationAddress(config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
|
||||
|
||||
# 7 MED1: Power off MED1 and wait to allow DUT_ROUTER2 to timeout the child
|
||||
self.nodes[MED1].stop()
|
||||
time.sleep(config.MLE_END_DEVICE_TIMEOUT)
|
||||
self.simulator.go(config.MLE_END_DEVICE_TIMEOUT)
|
||||
|
||||
# BR sends two ICMPv6 Echo Requests to MED1 GUA 2003:: address
|
||||
self.assertFalse(self.nodes[BR].ping(med1_addr))
|
||||
self.assertFalse(self.nodes[BR].ping(med1_addr))
|
||||
|
||||
# Verify DUT_ROUTER2 didn't generate an Address Notification message
|
||||
dut_router2_messages = self.sniffer.get_messages_sent_by(DUT_ROUTER2)
|
||||
dut_router2_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
|
||||
msg = dut_router2_messages.next_coap_message('0.02', '/a/an/', False)
|
||||
assert msg is None, "Error: The DUT_ROUTER2 sent an unexpected Address Notification message"
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -37,9 +38,11 @@ ROUTER = 2
|
||||
|
||||
class Cert_5_5_1_LeaderReset(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -59,24 +62,25 @@ class Cert_5_5_1_LeaderReset(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
rloc16 = self.nodes[LEADER].get_addr16()
|
||||
|
||||
self.nodes[LEADER].reset();
|
||||
self._setUpLeader()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[LEADER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[LEADER].get_addr16(), rloc16)
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -38,9 +39,11 @@ ED = 3
|
||||
|
||||
class Cert_5_5_2_LeaderReboot(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -67,27 +70,28 @@ class Cert_5_5_2_LeaderReboot(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].reset()
|
||||
self._setUpLeader()
|
||||
time.sleep(140)
|
||||
self.simulator.go(140)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'router')
|
||||
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -43,9 +44,11 @@ MTDS = [ED1, ED2, ED3]
|
||||
|
||||
class Cert_5_5_3_SplitMergeChildren(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,7):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -91,30 +94,31 @@ class Cert_5_5_3_SplitMergeChildren(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[ED2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED2].get_state(), 'child')
|
||||
|
||||
self.nodes[ED3].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED3].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].reset()
|
||||
@@ -123,15 +127,15 @@ class Cert_5_5_3_SplitMergeChildren(unittest.TestCase):
|
||||
self.nodes[ED1].add_whitelist(self.nodes[ROUTER1].get_addr64())
|
||||
self.nodes[ROUTER1].add_whitelist(self.nodes[ED1].get_addr64())
|
||||
|
||||
time.sleep(140)
|
||||
self.simulator.go(140)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'router')
|
||||
|
||||
time.sleep(30)
|
||||
self.simulator.go(30)
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
for addr in addrs:
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -40,9 +41,11 @@ ROUTER4 = 5
|
||||
|
||||
class Cert_5_5_4_SplitMergeRouters(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -84,34 +87,35 @@ class Cert_5_5_4_SplitMergeRouters(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER3].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER4].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER4].get_state(), 'router')
|
||||
|
||||
self.nodes[LEADER].reset()
|
||||
self._setUpLeader()
|
||||
time.sleep(150)
|
||||
self.simulator.go(150)
|
||||
|
||||
self.nodes[LEADER].start()
|
||||
time.sleep(50)
|
||||
self.simulator.go(50)
|
||||
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'router')
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ REED1 = 17
|
||||
|
||||
class Cert_5_5_5_SplitMergeREED(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,18):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -76,30 +79,31 @@ class Cert_5_5_5_SplitMergeREED(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(ROUTER2, ROUTER15+1):
|
||||
self.nodes[i].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[i].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[REED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[REED1].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER1].add_whitelist(self.nodes[REED1].get_addr64())
|
||||
self.nodes[REED1].add_whitelist(self.nodes[ROUTER1].get_addr64())
|
||||
|
||||
self.nodes[ROUTER3].stop()
|
||||
time.sleep(140)
|
||||
self.simulator.go(140)
|
||||
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'child')
|
||||
self.assertEqual(self.nodes[REED1].get_state(), 'router')
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER1 = 1
|
||||
@@ -39,9 +40,11 @@ ROUTER3 = 4
|
||||
|
||||
class Cert_5_5_7_SplitMergeThreeWay(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER1].set_panid(0xface)
|
||||
self.nodes[LEADER1].set_mode('rsdn')
|
||||
@@ -76,30 +79,31 @@ class Cert_5_5_7_SplitMergeThreeWay(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER1].start()
|
||||
self.nodes[LEADER1].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER1].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER3].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
|
||||
|
||||
self.nodes[LEADER1].reset()
|
||||
self._setUpLeader1()
|
||||
time.sleep(140)
|
||||
self.simulator.go(140)
|
||||
|
||||
self.nodes[LEADER1].start()
|
||||
time.sleep(30)
|
||||
self.simulator.go(30)
|
||||
|
||||
addrs = self.nodes[LEADER1].get_addrs()
|
||||
for addr in addrs:
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER1 = 1
|
||||
@@ -40,9 +41,11 @@ ED1 = 5
|
||||
|
||||
class Cert_5_5_8_SplitRoutersLostLeader(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i == ED1))
|
||||
self.nodes[i] = node.Node(i, (i == ED1), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER1].set_panid(0xface)
|
||||
self.nodes[LEADER1].set_mode('rsdn')
|
||||
@@ -88,23 +91,23 @@ class Cert_5_5_8_SplitRoutersLostLeader(unittest.TestCase):
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER1].start()
|
||||
self.nodes[LEADER1].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER1].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER3].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
@@ -114,10 +117,10 @@ class Cert_5_5_8_SplitRoutersLostLeader(unittest.TestCase):
|
||||
|
||||
self.nodes[ROUTER3].reset()
|
||||
self._setUpRouter3()
|
||||
time.sleep(140)
|
||||
self.simulator.go(140)
|
||||
|
||||
self.nodes[ROUTER3].start()
|
||||
time.sleep(60)
|
||||
self.simulator.go(60)
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
for addr in addrs:
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [ED1, SED1]
|
||||
|
||||
class Cert_5_6_1_NetworkDataLeaderAsBr(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,10 +76,11 @@ class Cert_5_6_1_NetworkDataLeaderAsBr(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
@@ -84,15 +88,15 @@ class Cert_5_6_1_NetworkDataLeaderAsBr(unittest.TestCase):
|
||||
self.nodes[LEADER].register_netdata()
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [ED1, SED1]
|
||||
|
||||
class Cert_5_6_2_NetworkDataRouterAsBr(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,14 +76,15 @@ class Cert_5_6_2_NetworkDataRouterAsBr(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
@@ -88,11 +92,11 @@ class Cert_5_6_2_NetworkDataRouterAsBr(unittest.TestCase):
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [ED1, SED1]
|
||||
|
||||
class Cert_5_6_3_NetworkDataRegisterAfterAttachLeader(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,29 +76,30 @@ class Cert_5_6_3_NetworkDataRegisterAfterAttachLeader(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:2::/64', 'paro')
|
||||
self.nodes[LEADER].register_netdata()
|
||||
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [ED1, SED1]
|
||||
|
||||
class Cert_5_6_4_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,29 +76,30 @@ class Cert_5_6_4_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:2::/64', 'paro')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [ED1, SED1]
|
||||
|
||||
class Cert_5_6_5_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,29 +76,30 @@ class Cert_5_6_5_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:2::/64', 'paro')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
@@ -114,7 +118,7 @@ class Cert_5_6_5_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:3::/64', 'pacs')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [ED1, SED1]
|
||||
|
||||
class Cert_5_6_6_NetworkDataExpiration(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,29 +76,30 @@ class Cert_5_6_6_NetworkDataExpiration(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:2::/64', 'paro')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
@@ -114,7 +118,7 @@ class Cert_5_6_6_NetworkDataExpiration(unittest.TestCase):
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:3::/64', 'pacs')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
@@ -134,7 +138,7 @@ class Cert_5_6_6_NetworkDataExpiration(unittest.TestCase):
|
||||
|
||||
self.nodes[ROUTER].remove_prefix('2001:2:0:3::/64')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
addrs = self.nodes[ED1].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -38,9 +39,11 @@ REED = 3
|
||||
|
||||
class Cert_5_6_7_NetworkDataRequestREED(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -64,18 +67,19 @@ class Cert_5_6_7_NetworkDataRequestREED(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[REED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[REED].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].remove_whitelist(self.nodes[REED].get_addr64())
|
||||
@@ -84,12 +88,12 @@ class Cert_5_6_7_NetworkDataRequestREED(unittest.TestCase):
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:3::/64', 'paros')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
|
||||
time.sleep(2)
|
||||
self.simulator.go(2)
|
||||
|
||||
self.nodes[LEADER].add_whitelist(self.nodes[REED].get_addr64())
|
||||
self.nodes[REED].add_whitelist(self.nodes[LEADER].get_addr64())
|
||||
|
||||
time.sleep(35)
|
||||
self.simulator.go(35)
|
||||
|
||||
addrs = self.nodes[REED].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:3' in addr[0:10] for addr in addrs))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -38,9 +39,11 @@ ED = 3
|
||||
|
||||
class Cert_5_6_8_ContextManagement(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -64,23 +67,24 @@ class Cert_5_6_8_ContextManagement(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
time.sleep(2)
|
||||
self.simulator.go(2)
|
||||
|
||||
addrs = self.nodes[LEADER].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
@@ -90,7 +94,7 @@ class Cert_5_6_8_ContextManagement(unittest.TestCase):
|
||||
|
||||
self.nodes[ROUTER].remove_prefix('2001:2:0:1::/64')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
addrs = self.nodes[LEADER].get_addrs()
|
||||
self.assertFalse(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
@@ -100,7 +104,7 @@ class Cert_5_6_8_ContextManagement(unittest.TestCase):
|
||||
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:2::/64', 'paros')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
addrs = self.nodes[LEADER].get_addrs()
|
||||
self.assertFalse(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
@@ -109,10 +113,10 @@ class Cert_5_6_8_ContextManagement(unittest.TestCase):
|
||||
if addr[0:3] == '200':
|
||||
self.assertTrue(self.nodes[ED].ping(addr))
|
||||
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:3::/64', 'paros')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
addrs = self.nodes[LEADER].get_addrs()
|
||||
self.assertFalse(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -42,9 +43,11 @@ MTDS = [ED, SED]
|
||||
|
||||
class Cert_5_6_9_NetworkDataForwarding(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -81,37 +84,38 @@ class Cert_5_6_9_NetworkDataForwarding(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[SED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros', 'med')
|
||||
self.nodes[LEADER].add_route('2001:2:0:2::/64', 'med')
|
||||
self.nodes[LEADER].register_netdata()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
self.nodes[ROUTER2].add_prefix('2001:2:0:1::/64', 'paros', 'low')
|
||||
self.nodes[ROUTER2].add_route('2001:2:0:2::/64', 'high')
|
||||
self.nodes[ROUTER2].register_netdata()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
self.assertFalse(self.nodes[SED].ping('2001:2:0:2::1'))
|
||||
|
||||
@@ -120,14 +124,14 @@ class Cert_5_6_9_NetworkDataForwarding(unittest.TestCase):
|
||||
self.nodes[ROUTER2].remove_prefix('2001:2:0:1::/64')
|
||||
self.nodes[ROUTER2].add_prefix('2001:2:0:1::/64', 'paros', 'high')
|
||||
self.nodes[ROUTER2].register_netdata()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
self.assertFalse(self.nodes[SED].ping('2007::1'))
|
||||
|
||||
self.nodes[ROUTER2].remove_prefix('2001:2:0:1::/64')
|
||||
self.nodes[ROUTER2].add_prefix('2001:2:0:1::/64', 'paros', 'med')
|
||||
self.nodes[ROUTER2].register_netdata()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
self.assertFalse(self.nodes[SED].ping('2007::1'))
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -37,9 +38,11 @@ ED = 2
|
||||
|
||||
class Cert_5_8_1_KeySynchronization(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -57,14 +60,15 @@ class Cert_5_8_1_KeySynchronization(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[LEADER].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -37,9 +38,11 @@ ROUTER = 2
|
||||
|
||||
class Cert_5_8_2_KeyIncrement(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -58,13 +61,15 @@ class Cert_5_8_2_KeyIncrement(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), "leader")
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), "router")
|
||||
|
||||
addrs = self.nodes[ROUTER].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -37,9 +38,11 @@ ROUTER = 2
|
||||
|
||||
class Cert_5_8_3_KeyIncrementRollOver(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -59,14 +62,15 @@ class Cert_5_8_3_KeyIncrementRollOver(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(4)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
addrs = self.nodes[ROUTER].get_addrs()
|
||||
|
||||
@@ -36,13 +36,14 @@ import node
|
||||
|
||||
LEADER = 1
|
||||
ED = 2
|
||||
SNIFFER = 3
|
||||
|
||||
class Cert_6_1_1_RouterAttach(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -54,28 +55,23 @@ class Cert_6_1_1_RouterAttach(unittest.TestCase):
|
||||
self.nodes[ED].add_whitelist(self.nodes[LEADER].get_addr64())
|
||||
self.nodes[ED].enable_whitelist()
|
||||
|
||||
self.sniffer = config.create_default_thread_sniffer(SNIFFER)
|
||||
self.sniffer.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.sniffer.stop()
|
||||
del self.sniffer
|
||||
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
leader_messages = self.sniffer.get_messages_sent_by(LEADER)
|
||||
ed_messages = self.sniffer.get_messages_sent_by(ED)
|
||||
leader_messages = self.simulator.get_messages_sent_by(LEADER)
|
||||
ed_messages = self.simulator.get_messages_sent_by(ED)
|
||||
|
||||
# 1 - leader
|
||||
msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -38,9 +39,11 @@ ED = 3
|
||||
|
||||
class Cert_6_1_2_REEDAttach(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -63,18 +66,19 @@ class Cert_6_1_2_REEDAttach(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[REED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[REED].get_state(), 'child')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
self.assertEqual(self.nodes[REED].get_state(), 'router')
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -40,9 +41,11 @@ ED = 5
|
||||
|
||||
class Cert_6_1_3_RouterAttachConnectivity(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -83,19 +86,20 @@ class Cert_6_1_3_RouterAttachConnectivity(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 5):
|
||||
self.nodes[i].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[i].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -40,9 +41,11 @@ ED = 5
|
||||
|
||||
class Cert_6_1_4_REEDAttachConnectivity(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -83,28 +86,29 @@ class Cert_6_1_4_REEDAttachConnectivity(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[REED0].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[REED0].get_state(), 'child')
|
||||
|
||||
self.nodes[REED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[REED1].get_state(), 'child')
|
||||
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
self.assertEqual(self.nodes[REED1].get_state(), 'router')
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -39,9 +40,11 @@ ED = 4
|
||||
|
||||
class Cert_6_1_5_RouterAttachLinkQuality(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,22 +76,23 @@ class Cert_6_1_5_RouterAttachLinkQuality(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -39,9 +40,11 @@ ED = 4
|
||||
|
||||
class Cert_6_1_6_REEDAttachLinkQuality(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,22 +76,23 @@ class Cert_6_1_6_REEDAttachLinkQuality(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[REED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[REED].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
self.assertEqual(self.nodes[REED].get_state(), 'router')
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -40,9 +41,11 @@ ROUTER3 = 5
|
||||
|
||||
class Cert_6_1_7_EDSynchronization(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -87,26 +90,27 @@ class Cert_6_1_7_EDSynchronization(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER3].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -38,9 +39,11 @@ ED = 3
|
||||
|
||||
class Cert_6_2_1_NewPartition(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -63,22 +66,23 @@ class Cert_6_2_1_NewPartition(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].stop()
|
||||
time.sleep(140)
|
||||
self.simulator.go(140)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -39,9 +40,11 @@ ED = 4
|
||||
|
||||
class Cert_6_2_2_NewPartition(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -74,26 +77,27 @@ class Cert_6_2_2_NewPartition(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].stop()
|
||||
time.sleep(140)
|
||||
self.simulator.go(140)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -38,9 +39,11 @@ ED = 3
|
||||
|
||||
class Cert_6_3_1_OrphanReattach(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -64,24 +67,25 @@ class Cert_6_3_1_OrphanReattach(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER].stop()
|
||||
self.nodes[LEADER].add_whitelist(self.nodes[ED].get_addr64())
|
||||
self.nodes[ED].add_whitelist(self.nodes[LEADER].get_addr64())
|
||||
time.sleep(20)
|
||||
self.simulator.go(20)
|
||||
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -37,9 +38,11 @@ ED = 2
|
||||
|
||||
class Cert_5_6_2_NetworkDataUpdate(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -56,19 +59,20 @@ class Cert_5_6_2_NetworkDataUpdate(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
self.nodes[LEADER].register_netdata()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
@@ -81,11 +85,11 @@ class Cert_5_6_2_NetworkDataUpdate(unittest.TestCase):
|
||||
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:2::/64', 'paros')
|
||||
self.nodes[LEADER].register_netdata()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[LEADER].add_whitelist(self.nodes[ED].get_addr64())
|
||||
self.nodes[ED].add_whitelist(self.nodes[LEADER].get_addr64())
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -37,9 +38,11 @@ ED = 2
|
||||
|
||||
class Cert_6_4_1_LinkLocal(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -55,14 +58,15 @@ class Cert_6_4_1_LinkLocal(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -38,9 +39,11 @@ ED = 3
|
||||
|
||||
class Cert_5_3_2_RealmLocal(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -63,18 +66,19 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -37,9 +38,11 @@ ED = 2
|
||||
|
||||
class Cert_6_5_1_ChildResetSynchronize(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -59,31 +62,32 @@ class Cert_6_5_1_ChildResetSynchronize(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[ED].reset()
|
||||
self._setUpEd()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[ED].set_timeout(100)
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[ED].reset()
|
||||
self._setUpEd()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.nodes[ED].set_timeout(100)
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -37,9 +38,11 @@ ED = 2
|
||||
|
||||
class Cert_6_5_2_ChildResetReattach(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -58,14 +61,15 @@ class Cert_6_5_2_ChildResetReattach(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].remove_whitelist(self.nodes[ED].get_addr64())
|
||||
@@ -73,12 +77,12 @@ class Cert_6_5_2_ChildResetReattach(unittest.TestCase):
|
||||
|
||||
self.nodes[ED].reset()
|
||||
self._setUpEd()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.nodes[ED].start()
|
||||
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.nodes[LEADER].add_whitelist(self.nodes[ED].get_addr64())
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -37,9 +38,11 @@ ED = 2
|
||||
|
||||
class Cert_6_6_1_KeyIncrement(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -57,13 +60,15 @@ class Cert_6_6_1_KeyIncrement(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), "leader")
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), "child")
|
||||
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -37,9 +38,11 @@ ED = 2
|
||||
|
||||
class Cert_6_6_2_KeyIncrement1(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i, (i == ED))
|
||||
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -58,14 +61,15 @@ class Cert_6_6_2_KeyIncrement1(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [SED1, ED1]
|
||||
|
||||
class Cert_7_1_1_BorderRouterAsLeader(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,10 +76,11 @@ class Cert_7_1_1_BorderRouterAsLeader(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
@@ -84,15 +88,15 @@ class Cert_7_1_1_BorderRouterAsLeader(unittest.TestCase):
|
||||
self.nodes[LEADER].register_netdata()
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[SED1].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [ED2, SED2]
|
||||
|
||||
class Cert_7_1_2_BorderRouterAsRouter(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,14 +76,15 @@ class Cert_7_1_2_BorderRouterAsRouter(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
@@ -88,11 +92,11 @@ class Cert_7_1_2_BorderRouterAsRouter(unittest.TestCase):
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
|
||||
self.nodes[ED2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED2].get_state(), 'child')
|
||||
|
||||
self.nodes[SED2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED2].get_state(), 'child')
|
||||
|
||||
addrs = self.nodes[ED2].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [SED1, ED1]
|
||||
|
||||
class Cert_7_1_3_BorderRouterAsLeader(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,28 +76,29 @@ class Cert_7_1_3_BorderRouterAsLeader(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:2::/64', 'paro')
|
||||
self.nodes[LEADER].register_netdata()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
addrs = self.nodes[SED1].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [SED2, ED2]
|
||||
|
||||
class Cert_7_1_4_BorderRouterAsRouter(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,28 +76,29 @@ class Cert_7_1_4_BorderRouterAsRouter(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED2].get_state(), 'child')
|
||||
|
||||
self.nodes[SED2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED2].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:2::/64', 'paro')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
addrs = self.nodes[ED2].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER = 1
|
||||
@@ -41,9 +42,11 @@ MTDS = [ED2, SED2]
|
||||
|
||||
class Cert_7_1_5_BorderRouterAsRouter(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -73,28 +76,29 @@ class Cert_7_1_5_BorderRouterAsRouter(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED2].get_state(), 'child')
|
||||
|
||||
self.nodes[SED2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED2].get_state(), 'child')
|
||||
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:2::/64', 'paro')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
addrs = self.nodes[ED2].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
@@ -112,7 +116,7 @@ class Cert_7_1_5_BorderRouterAsRouter(unittest.TestCase):
|
||||
|
||||
self.nodes[ROUTER].add_prefix('2001:2:0:3::/64', 'paros')
|
||||
self.nodes[ROUTER].register_netdata()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
addrs = self.nodes[ED2].get_addrs()
|
||||
self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
COMMISSIONER = 1
|
||||
@@ -37,9 +38,11 @@ JOINER = 2
|
||||
|
||||
class Cert_8_1_01_Commissioning(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_panid(0xface)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -53,23 +56,24 @@ class Cert_8_1_01_Commissioning(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[COMMISSIONER].interface_up()
|
||||
self.nodes[COMMISSIONER].thread_start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.nodes[COMMISSIONER].commissioner_add_joiner(self.nodes[JOINER].get_eui64(), 'OPENTHREAD')
|
||||
|
||||
self.nodes[JOINER].interface_up()
|
||||
self.nodes[JOINER].joiner_start('OPENTHREAD')
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertEqual(self.nodes[JOINER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
|
||||
|
||||
self.nodes[JOINER].thread_start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[JOINER].get_state(), 'router')
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
COMMISSIONER = 1
|
||||
@@ -37,6 +38,8 @@ JOINER = 2
|
||||
|
||||
class Cert_8_1_02_Commissioning(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
@@ -53,19 +56,20 @@ class Cert_8_1_02_Commissioning(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[COMMISSIONER].interface_up()
|
||||
self.nodes[COMMISSIONER].thread_start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.nodes[COMMISSIONER].commissioner_add_joiner(self.nodes[JOINER].get_eui64(), 'OPENTHREAD')
|
||||
|
||||
self.nodes[JOINER].interface_up()
|
||||
self.nodes[JOINER].joiner_start('DAERHTNEPO')
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertNotEqual(self.nodes[JOINER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
COMMISSIONER = 1
|
||||
@@ -38,6 +39,8 @@ JOINER = 3
|
||||
|
||||
class Cert_8_2_01_JoinerRouter(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i)
|
||||
@@ -62,31 +65,32 @@ class Cert_8_2_01_JoinerRouter(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[COMMISSIONER].interface_up()
|
||||
self.nodes[COMMISSIONER].thread_start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.nodes[COMMISSIONER].commissioner_add_joiner(self.nodes[JOINER_ROUTER].get_eui64(), 'OPENTHREAD')
|
||||
self.nodes[COMMISSIONER].commissioner_add_joiner(self.nodes[JOINER].get_eui64(), 'OPENTHREAD2')
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[COMMISSIONER].add_whitelist(self.nodes[JOINER_ROUTER].get_joiner_id())
|
||||
self.nodes[JOINER_ROUTER].add_whitelist(self.nodes[COMMISSIONER].get_addr64())
|
||||
|
||||
self.nodes[JOINER_ROUTER].interface_up()
|
||||
self.nodes[JOINER_ROUTER].joiner_start('OPENTHREAD')
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertEqual(self.nodes[JOINER_ROUTER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
|
||||
|
||||
self.nodes[COMMISSIONER].add_whitelist(self.nodes[JOINER_ROUTER].get_addr64())
|
||||
|
||||
self.nodes[JOINER_ROUTER].thread_start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[JOINER_ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[JOINER_ROUTER].add_whitelist(self.nodes[JOINER].get_joiner_id())
|
||||
@@ -94,13 +98,13 @@ class Cert_8_2_01_JoinerRouter(unittest.TestCase):
|
||||
|
||||
self.nodes[JOINER].interface_up()
|
||||
self.nodes[JOINER].joiner_start('OPENTHREAD2')
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertEqual(self.nodes[JOINER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
|
||||
|
||||
self.nodes[JOINER_ROUTER].add_whitelist(self.nodes[JOINER].get_addr64())
|
||||
|
||||
self.nodes[JOINER].thread_start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[JOINER].get_state(), 'router')
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
COMMISSIONER = 1
|
||||
@@ -38,9 +39,11 @@ JOINER = 3
|
||||
|
||||
class Cert_8_2_02_JoinerRouter(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_panid(0xface)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -62,31 +65,32 @@ class Cert_8_2_02_JoinerRouter(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[COMMISSIONER].interface_up()
|
||||
self.nodes[COMMISSIONER].thread_start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.nodes[COMMISSIONER].commissioner_add_joiner(self.nodes[JOINER_ROUTER].get_eui64(), 'OPENTHREAD')
|
||||
self.nodes[COMMISSIONER].commissioner_add_joiner(self.nodes[JOINER].get_eui64(), 'OPENTHREAD2')
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[COMMISSIONER].add_whitelist(self.nodes[JOINER_ROUTER].get_joiner_id())
|
||||
self.nodes[JOINER_ROUTER].add_whitelist(self.nodes[COMMISSIONER].get_addr64())
|
||||
|
||||
self.nodes[JOINER_ROUTER].interface_up()
|
||||
self.nodes[JOINER_ROUTER].joiner_start('OPENTHREAD')
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertEqual(self.nodes[JOINER_ROUTER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
|
||||
|
||||
self.nodes[COMMISSIONER].add_whitelist(self.nodes[JOINER_ROUTER].get_addr64())
|
||||
|
||||
self.nodes[JOINER_ROUTER].thread_start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[JOINER_ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[JOINER_ROUTER].add_whitelist(self.nodes[JOINER].get_joiner_id())
|
||||
@@ -94,7 +98,7 @@ class Cert_8_2_02_JoinerRouter(unittest.TestCase):
|
||||
|
||||
self.nodes[JOINER].interface_up()
|
||||
self.nodes[JOINER].joiner_start('2DAERHTNEPO')
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertNotEqual(self.nodes[JOINER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
COMMISSIONER = 1
|
||||
@@ -37,9 +38,11 @@ LEADER = 2
|
||||
|
||||
class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,3):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_active_dataset(10, panid=0xface, master_key='000102030405060708090a0b0c0d0e0f')
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -53,24 +56,25 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=101,
|
||||
channel_mask=0x001fffe0,
|
||||
extended_panid='000db70000000000',
|
||||
network_name='GRL')
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
|
||||
|
||||
# Step 6
|
||||
@@ -80,7 +84,7 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
channel_mask=0x001fffe0,
|
||||
extended_panid='000db70000000001',
|
||||
network_name='threadcert')
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
|
||||
|
||||
# Step 8
|
||||
@@ -90,7 +94,7 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
extended_panid='000db70000000000',
|
||||
mesh_local='fd00:0db7::',
|
||||
network_name='UL')
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
|
||||
|
||||
# Step 10
|
||||
@@ -101,7 +105,7 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
master_key='00112233445566778899aabbccddeeff',
|
||||
mesh_local='fd00:0db7::',
|
||||
network_name='UL')
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
|
||||
|
||||
# Step 12
|
||||
@@ -113,7 +117,7 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
mesh_local='fd00:0db7::',
|
||||
network_name='UL',
|
||||
panid=0xafce)
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
|
||||
|
||||
# Step 14
|
||||
@@ -123,7 +127,7 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
extended_panid='000db70000000000',
|
||||
network_name='UL',
|
||||
binary='0b02abcd')
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
|
||||
|
||||
# Step 16
|
||||
@@ -132,7 +136,7 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
channel_mask=0x001fffe0,
|
||||
extended_panid='000db70000000000',
|
||||
network_name='UL')
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
|
||||
|
||||
# Step 18
|
||||
@@ -142,7 +146,7 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
extended_panid='000db70000000000',
|
||||
network_name='UL',
|
||||
binary='0806113320440000')
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.assertEqual(self.nodes[LEADER].get_network_name(), 'UL')
|
||||
|
||||
# Step 20
|
||||
@@ -152,7 +156,7 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
extended_panid='000db70000000000',
|
||||
network_name='GRL',
|
||||
binary='8202aa55')
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
|
||||
|
||||
ipaddrs = self.nodes[COMMISSIONER].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
PANID_INIT = 0xface
|
||||
@@ -48,9 +49,11 @@ COMMISSIONER_PENDING_PANID = 0xafce
|
||||
|
||||
class Cert_9_2_7_DelayTimer(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_active_dataset(LEADER_ACTIVE_TIMESTAMP)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -78,26 +81,27 @@ class Cert_9_2_7_DelayTimer(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER].add_whitelist(self.nodes[ROUTER].get_addr64())
|
||||
self.nodes[ROUTER].add_whitelist(self.nodes[LEADER].get_addr64())
|
||||
|
||||
time.sleep(30)
|
||||
self.simulator.go(30)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
@@ -113,7 +117,7 @@ class Cert_9_2_7_DelayTimer(unittest.TestCase):
|
||||
delay_timer=10000,
|
||||
channel=COMMISSIONER_PENDING_CHANNEL,
|
||||
panid=COMMISSIONER_PENDING_PANID)
|
||||
time.sleep(40)
|
||||
self.simulator.go(40)
|
||||
self.assertEqual(self.nodes[LEADER].get_panid(), COMMISSIONER_PENDING_PANID)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_panid(), COMMISSIONER_PENDING_PANID)
|
||||
self.assertEqual(self.nodes[ROUTER].get_panid(), COMMISSIONER_PENDING_PANID)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
COMMISSIONER = 1
|
||||
@@ -49,9 +50,11 @@ MTDS = [ED, SED]
|
||||
|
||||
class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_active_dataset(LEADER_ACTIVE_TIMESTAMP, panid=PANID_INIT, channel=CHANNEL_INIT)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -103,40 +106,40 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
||||
self.nodes[ED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
|
||||
self.nodes[SED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED].get_state(), 'child')
|
||||
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=10,
|
||||
active_timestamp=70,
|
||||
delay_timer=60000,
|
||||
channel=COMMISSIONER_PENDING_CHANNEL,
|
||||
panid=COMMISSIONER_PENDING_PANID)
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[ROUTER].reset()
|
||||
self.nodes[ED].reset()
|
||||
self.nodes[SED].reset()
|
||||
|
||||
time.sleep(60)
|
||||
self.simulator.go(60)
|
||||
|
||||
self.assertEqual(self.nodes[LEADER].get_panid(), COMMISSIONER_PENDING_PANID)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_panid(), COMMISSIONER_PENDING_PANID)
|
||||
@@ -163,7 +166,7 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
|
||||
self.assertEqual(self.nodes[ED].get_channel(), CHANNEL_INIT)
|
||||
self.assertEqual(self.nodes[SED].get_channel(), CHANNEL_INIT)
|
||||
|
||||
time.sleep(10)
|
||||
self.simulator.go(10)
|
||||
|
||||
self.assertEqual(self.nodes[ROUTER].get_panid(), COMMISSIONER_PENDING_PANID)
|
||||
self.assertEqual(self.nodes[ED].get_panid(), COMMISSIONER_PENDING_PANID)
|
||||
@@ -173,7 +176,7 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
|
||||
self.assertEqual(self.nodes[ED].get_channel(), COMMISSIONER_PENDING_CHANNEL)
|
||||
self.assertEqual(self.nodes[SED].get_channel(), COMMISSIONER_PENDING_CHANNEL)
|
||||
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
ipaddrs = self.nodes[ROUTER].get_addrs()
|
||||
for ipaddr in ipaddrs:
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
CHANNEL_INIT = 19
|
||||
@@ -45,9 +46,11 @@ ROUTER2 = 4
|
||||
|
||||
class Cert_9_2_09_PendingPartition(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_active_dataset(10, channel=CHANNEL_INIT, panid=PANID_INIT)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -81,24 +84,25 @@ class Cert_9_2_09_PendingPartition(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=30,
|
||||
@@ -106,11 +110,11 @@ class Cert_9_2_09_PendingPartition(unittest.TestCase):
|
||||
delay_timer=500000,
|
||||
channel=20,
|
||||
panid=0xafce)
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[LEADER].remove_whitelist(self.nodes[ROUTER1].get_addr64())
|
||||
self.nodes[ROUTER1].remove_whitelist(self.nodes[LEADER].get_addr64())
|
||||
time.sleep(140)
|
||||
self.simulator.go(140)
|
||||
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'leader')
|
||||
@@ -120,11 +124,11 @@ class Cert_9_2_09_PendingPartition(unittest.TestCase):
|
||||
delay_timer=200000,
|
||||
channel=CHANNEL_FINAL,
|
||||
panid=PANID_FINAL)
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[LEADER].add_whitelist(self.nodes[ROUTER1].get_addr64())
|
||||
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64())
|
||||
time.sleep(200)
|
||||
self.simulator.go(200)
|
||||
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
CHANNEL_INIT = 19
|
||||
@@ -48,9 +49,11 @@ MTDS = [ED1, SED1]
|
||||
|
||||
class Cert_9_2_10_PendingPartition(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_active_dataset(15, channel=CHANNEL_INIT, panid=PANID_INIT)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -91,28 +94,29 @@ class Cert_9_2_10_PendingPartition(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=30,
|
||||
@@ -120,7 +124,7 @@ class Cert_9_2_10_PendingPartition(unittest.TestCase):
|
||||
delay_timer=150000,
|
||||
channel=CHANNEL_FINAL,
|
||||
panid=PANID_FINAL)
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
print(self.nodes[COMMISSIONER].get_channel())
|
||||
print(self.nodes[LEADER].get_channel())
|
||||
@@ -130,7 +134,7 @@ class Cert_9_2_10_PendingPartition(unittest.TestCase):
|
||||
|
||||
self.nodes[LEADER].remove_whitelist(self.nodes[ROUTER1].get_addr64())
|
||||
self.nodes[ROUTER1].remove_whitelist(self.nodes[LEADER].get_addr64())
|
||||
time.sleep(160)
|
||||
self.simulator.go(160)
|
||||
|
||||
print(self.nodes[COMMISSIONER].get_channel())
|
||||
print(self.nodes[LEADER].get_channel())
|
||||
@@ -152,7 +156,7 @@ class Cert_9_2_10_PendingPartition(unittest.TestCase):
|
||||
|
||||
self.nodes[LEADER].add_whitelist(self.nodes[ROUTER1].get_addr64())
|
||||
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64())
|
||||
time.sleep(60)
|
||||
self.simulator.go(60)
|
||||
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
KEY1 = '000102030405060708090a0b0c0d0e0f'
|
||||
@@ -48,9 +49,11 @@ MTDS = [ED1, SED1]
|
||||
|
||||
class Cert_9_2_11_MasterKey(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_active_dataset(10, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -92,35 +95,36 @@ class Cert_9_2_11_MasterKey(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=10,
|
||||
active_timestamp=70,
|
||||
delay_timer=10000,
|
||||
master_key=KEY2)
|
||||
time.sleep(310)
|
||||
self.simulator.go(310)
|
||||
|
||||
print(self.nodes[COMMISSIONER].get_masterkey())
|
||||
print(self.nodes[LEADER].get_masterkey())
|
||||
@@ -143,7 +147,7 @@ class Cert_9_2_11_MasterKey(unittest.TestCase):
|
||||
active_timestamp=30,
|
||||
delay_timer=10000,
|
||||
master_key=KEY1)
|
||||
time.sleep(310)
|
||||
self.simulator.go(310)
|
||||
|
||||
print(self.nodes[COMMISSIONER].get_masterkey())
|
||||
print(self.nodes[LEADER].get_masterkey())
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
LEADER1 = 1
|
||||
@@ -48,9 +49,11 @@ DATASET2_PANID = 0xafce
|
||||
|
||||
class Cert_9_2_12_Announce(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,6):
|
||||
self.nodes[i] = node.Node(i, (i == MED))
|
||||
self.nodes[i] = node.Node(i, (i == MED), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER1].set_active_dataset(DATASET1_TIMESTAMP, channel=DATASET1_CHANNEL, panid=DATASET1_PANID)
|
||||
self.nodes[LEADER1].set_mode('rsdn')
|
||||
@@ -88,16 +91,17 @@ class Cert_9_2_12_Announce(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER1].start()
|
||||
self.nodes[LEADER1].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER1].get_state(), 'leader')
|
||||
self.nodes[LEADER1].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[LEADER2].start()
|
||||
@@ -105,11 +109,11 @@ class Cert_9_2_12_Announce(unittest.TestCase):
|
||||
self.assertEqual(self.nodes[LEADER2].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[MED].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[MED].get_state(), 'child')
|
||||
|
||||
ipaddrs = self.nodes[ROUTER1].get_addrs()
|
||||
@@ -118,7 +122,7 @@ class Cert_9_2_12_Announce(unittest.TestCase):
|
||||
break
|
||||
|
||||
self.nodes[LEADER1].announce_begin(0x1000, 1, 1000, ipaddr)
|
||||
time.sleep(30)
|
||||
self.simulator.go(30)
|
||||
self.assertEqual(self.nodes[LEADER2].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[MED].get_state(), 'child')
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
COMMISSIONER = 1
|
||||
@@ -39,9 +40,11 @@ ED1 = 4
|
||||
|
||||
class Cert_9_2_13_EnergyScan(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i, (i == ED1))
|
||||
self.nodes[i] = node.Node(i, (i == ED1), simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_panid(0xface)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -71,24 +74,25 @@ class Cert_9_2_13_EnergyScan(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
ipaddrs = self.nodes[ROUTER1].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
COMMISSIONER = 1
|
||||
@@ -39,9 +40,11 @@ LEADER2 = 4
|
||||
|
||||
class Cert_9_2_14_PanIdQuery(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_panid(0xface)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -71,24 +74,25 @@ class Cert_9_2_14_PanIdQuery(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER1].start()
|
||||
self.nodes[LEADER1].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER1].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[LEADER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER2].get_state(), 'leader')
|
||||
|
||||
ipaddrs = self.nodes[ROUTER1].get_addrs()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
CHANNEL_INIT = 19
|
||||
@@ -44,9 +45,11 @@ ROUTER2 = 4
|
||||
|
||||
class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_active_dataset(15, channel=CHANNEL_INIT, panid=PANID_INIT)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -82,30 +85,31 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=10,
|
||||
active_timestamp=70,
|
||||
delay_timer=600000,
|
||||
mesh_local='fd00:0db9::')
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].reset()
|
||||
@@ -116,12 +120,12 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
|
||||
delay_timer=200000,
|
||||
mesh_local='fd00:0db7::',
|
||||
panid=PANID_FINAL)
|
||||
time.sleep(100)
|
||||
self.simulator.go(100)
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
time.sleep(100)
|
||||
self.simulator.go(100)
|
||||
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_panid(), PANID_FINAL)
|
||||
self.assertEqual(self.nodes[LEADER].get_panid(), PANID_FINAL)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
CHANNEL_INIT = 19
|
||||
@@ -45,9 +46,11 @@ ROUTER2 = 4
|
||||
|
||||
class Cert_9_2_16_ActivePendingPartition(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,5):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_active_dataset(1, channel=CHANNEL_INIT, panid=PANID_INIT)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -83,30 +86,31 @@ class Cert_9_2_16_ActivePendingPartition(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=10,
|
||||
active_timestamp=10,
|
||||
delay_timer=600000,
|
||||
mesh_local='fd00:0db9::')
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.nodes[ROUTER2].reset()
|
||||
@@ -117,14 +121,14 @@ class Cert_9_2_16_ActivePendingPartition(unittest.TestCase):
|
||||
delay_timer=200000,
|
||||
mesh_local='fd00:0db7::',
|
||||
panid=PANID_FINAL)
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=15,
|
||||
network_name='threadCert')
|
||||
time.sleep(100)
|
||||
self.simulator.go(100)
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_network_name(), NETWORK_NAME_FINAL)
|
||||
@@ -132,7 +136,7 @@ class Cert_9_2_16_ActivePendingPartition(unittest.TestCase):
|
||||
self.assertEqual(self.nodes[ROUTER1].get_network_name(), NETWORK_NAME_FINAL)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_network_name(), NETWORK_NAME_FINAL)
|
||||
|
||||
time.sleep(100)
|
||||
self.simulator.go(100)
|
||||
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_panid(), PANID_FINAL)
|
||||
self.assertEqual(self.nodes[LEADER].get_panid(), PANID_FINAL)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
CHANNEL1 = 11
|
||||
@@ -43,9 +44,11 @@ ED1 = 3
|
||||
|
||||
class Cert_9_2_17_Orphan(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i, (i == ED1))
|
||||
self.nodes[i] = node.Node(i, (i == ED1), simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER1].set_active_dataset(10, channel=CHANNEL1, panid=PANID_INIT, channel_mask=CHANNEL_MASK)
|
||||
self.nodes[LEADER1].set_mode('rsdn')
|
||||
@@ -69,10 +72,11 @@ class Cert_9_2_17_Orphan(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER1].start()
|
||||
self.nodes[LEADER1].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER1].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER2].start()
|
||||
@@ -80,13 +84,13 @@ class Cert_9_2_17_Orphan(unittest.TestCase):
|
||||
self.assertEqual(self.nodes[LEADER2].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER1].stop()
|
||||
self.nodes[LEADER2].add_whitelist(self.nodes[ED1].get_addr64())
|
||||
self.nodes[ED1].add_whitelist(self.nodes[LEADER2].get_addr64())
|
||||
time.sleep(20)
|
||||
self.simulator.go(20)
|
||||
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
self.assertEqual(self.nodes[ED1].get_channel(), CHANNEL2)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import time
|
||||
import unittest
|
||||
|
||||
import config
|
||||
import node
|
||||
|
||||
KEY1 = '00112233445566778899aabbccddeeff'
|
||||
@@ -49,9 +50,11 @@ MTDS = [ED1, SED1]
|
||||
|
||||
class Cert_9_2_18_RollBackActiveTimestamp(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,7):
|
||||
self.nodes[i] = node.Node(i, (i in MTDS))
|
||||
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
|
||||
|
||||
self.nodes[COMMISSIONER].set_active_dataset(1, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1)
|
||||
self.nodes[COMMISSIONER].set_mode('rsdn')
|
||||
@@ -104,43 +107,43 @@ class Cert_9_2_18_RollBackActiveTimestamp(unittest.TestCase):
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
time.sleep(3)
|
||||
self.simulator.go(3)
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
|
||||
self.nodes[ED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ED1].get_state(), 'child')
|
||||
|
||||
self.nodes[SED1].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[SED1].get_state(), 'child')
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=20000,
|
||||
network_name='GRL')
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=20,
|
||||
active_timestamp=20,
|
||||
delay_timer=20000,
|
||||
network_name='Shouldnotbe')
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
|
||||
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=20,
|
||||
active_timestamp=20,
|
||||
delay_timer=20000,
|
||||
network_name='MyHouse',
|
||||
master_key=KEY2)
|
||||
time.sleep(310)
|
||||
self.simulator.go(310)
|
||||
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_masterkey(), KEY2)
|
||||
self.assertEqual(self.nodes[LEADER].get_masterkey(), KEY2)
|
||||
@@ -150,7 +153,7 @@ class Cert_9_2_18_RollBackActiveTimestamp(unittest.TestCase):
|
||||
self.assertEqual(self.nodes[ROUTER2].get_masterkey(), KEY1)
|
||||
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'leader')
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -133,6 +133,7 @@ EXTRA_DIST = \
|
||||
network_layer.py \
|
||||
node.py \
|
||||
node_cli.py \
|
||||
simulator.py \
|
||||
sniffer.py \
|
||||
sniffer_transport.py \
|
||||
test_coap.py \
|
||||
|
||||
@@ -37,6 +37,7 @@ import mle
|
||||
import net_crypto
|
||||
import network_data
|
||||
import network_layer
|
||||
import simulator
|
||||
import sniffer
|
||||
|
||||
MESH_LOCAL_PREFIX = 'fdde:ad00:beef::/64'
|
||||
@@ -67,6 +68,8 @@ INFINITE_COST_TIMEOUT = 90
|
||||
MAX_ADVERTISEMENT_INTERVAL = 32
|
||||
MLE_END_DEVICE_TIMEOUT = 100
|
||||
|
||||
VIRTUAL_TIME = bool(os.getenv('VIRTUAL_TIME', False))
|
||||
|
||||
def create_default_network_data_prefix_sub_tlvs_factories():
|
||||
return {
|
||||
network_data.TlvType.HAS_ROUTE: network_data.HasRouteFactory(
|
||||
@@ -331,3 +334,9 @@ def create_default_thread_message_factory(master_key=DEFAULT_MASTER_KEY):
|
||||
|
||||
def create_default_thread_sniffer(nodeid=SNIFFER_ID):
|
||||
return sniffer.Sniffer(nodeid, create_default_thread_message_factory())
|
||||
|
||||
|
||||
def create_default_simulator():
|
||||
if VIRTUAL_TIME:
|
||||
return simulator.VirtualTime()
|
||||
return simulator.RealTime()
|
||||
|
||||
@@ -38,9 +38,11 @@ import unittest
|
||||
import config
|
||||
|
||||
class Node:
|
||||
def __init__(self, nodeid, is_mtd=False):
|
||||
def __init__(self, nodeid, is_mtd=False, simulator=None):
|
||||
self.simulator = simulator
|
||||
|
||||
if sys.platform != 'win32':
|
||||
self.interface = node_cli.otCli(nodeid, is_mtd)
|
||||
self.interface = node_cli.otCli(nodeid, is_mtd, simulator=simulator)
|
||||
else:
|
||||
self.interface = node_api.otApi(nodeid)
|
||||
|
||||
@@ -239,7 +241,7 @@ class Node:
|
||||
def scan(self):
|
||||
return self.interface.scan()
|
||||
|
||||
def ping(self, ipaddr, num_responses=1, size=None, timeout=5000):
|
||||
def ping(self, ipaddr, num_responses=1, size=None, timeout=5):
|
||||
return self.interface.ping(ipaddr, num_responses, size, timeout)
|
||||
|
||||
def reset(self):
|
||||
|
||||
@@ -35,12 +35,14 @@ import re
|
||||
import ipaddress
|
||||
|
||||
import config
|
||||
import simulator
|
||||
|
||||
class otCli:
|
||||
def __init__(self, nodeid, is_mtd):
|
||||
def __init__(self, nodeid, is_mtd, simulator=None):
|
||||
self.nodeid = nodeid
|
||||
self.verbose = int(float(os.getenv('VERBOSE', 0)))
|
||||
self.node_type = os.getenv('NODE_TYPE', 'sim')
|
||||
self.simulator = simulator
|
||||
|
||||
mode = os.environ.get('USE_MTD') is '1' and is_mtd and 'mtd' or 'ftd'
|
||||
|
||||
@@ -103,7 +105,10 @@ class otCli:
|
||||
|
||||
def send_command(self, cmd):
|
||||
print("%d: %s" % (self.nodeid, cmd))
|
||||
self.pexpect.sendline(cmd)
|
||||
self.pexpect.send(cmd + '\n')
|
||||
|
||||
if isinstance(self.simulator, simulator.VirtualTime):
|
||||
self.simulator.receive_events()
|
||||
|
||||
def get_commands(self):
|
||||
self.send_command('?')
|
||||
@@ -532,12 +537,26 @@ class otCli:
|
||||
def energy_scan(self, mask, count, period, scan_duration, ipaddr):
|
||||
cmd = 'commissioner energy ' + str(mask) + ' ' + str(count) + ' ' + str(period) + ' ' + str(scan_duration) + ' ' + ipaddr
|
||||
self.send_command(cmd)
|
||||
self.pexpect.expect('Energy:', timeout=8)
|
||||
|
||||
if isinstance(self.simulator, simulator.VirtualTime):
|
||||
self.simulator.go(8)
|
||||
timeout = 1
|
||||
else:
|
||||
timeout = 8
|
||||
|
||||
self.pexpect.expect('Energy:', timeout=timeout)
|
||||
|
||||
def panid_query(self, panid, mask, ipaddr):
|
||||
cmd = 'commissioner panid ' + str(panid) + ' ' + str(mask) + ' ' + ipaddr
|
||||
self.send_command(cmd)
|
||||
self.pexpect.expect('Conflict:', timeout=8)
|
||||
|
||||
if isinstance(self.simulator, simulator.VirtualTime):
|
||||
self.simulator.go(8)
|
||||
timeout = 1
|
||||
else:
|
||||
timeout = 8
|
||||
|
||||
self.pexpect.expect('Conflict:', timeout=timeout)
|
||||
|
||||
def scan(self):
|
||||
self.send_command('scan')
|
||||
@@ -553,13 +572,21 @@ class otCli:
|
||||
|
||||
return results
|
||||
|
||||
def ping(self, ipaddr, num_responses=1, size=None, timeout=5000):
|
||||
def ping(self, ipaddr, num_responses=1, size=None, timeout=5):
|
||||
cmd = 'ping ' + ipaddr
|
||||
if size != None:
|
||||
cmd += ' ' + str(size)
|
||||
|
||||
self.send_command(cmd)
|
||||
|
||||
try:
|
||||
self.pexpect.expect('Done', timeout=0.01)
|
||||
except pexpect.TIMEOUT:
|
||||
pass
|
||||
|
||||
if isinstance(self.simulator, simulator.VirtualTime):
|
||||
self.simulator.go(timeout)
|
||||
|
||||
result = True
|
||||
try:
|
||||
responders = {}
|
||||
@@ -575,6 +602,10 @@ class otCli:
|
||||
|
||||
def reset(self):
|
||||
self.send_command('reset')
|
||||
try:
|
||||
self.pexpect.expect('Done', timeout=0.01)
|
||||
except pexpect.TIMEOUT:
|
||||
pass
|
||||
|
||||
def set_router_selection_jitter(self, jitter):
|
||||
cmd = 'routerselectionjitter %d' % jitter
|
||||
|
||||
@@ -0,0 +1,240 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright (c) 2018, The OpenThread Authors.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# 3. Neither the name of the copyright holder nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
import bisect
|
||||
import cmd
|
||||
import os
|
||||
import socket
|
||||
import struct
|
||||
import time
|
||||
import sys
|
||||
|
||||
import io
|
||||
import config
|
||||
import message
|
||||
|
||||
class RealTime:
|
||||
|
||||
def __init__(self):
|
||||
self._sniffer = config.create_default_thread_sniffer()
|
||||
self._sniffer.start()
|
||||
|
||||
def set_lowpan_context(self, cid, prefix):
|
||||
self._sniffer.set_lowpan_context(cid, prefix)
|
||||
|
||||
def get_messages_sent_by(self, nodeid):
|
||||
return self._sniffer.get_messages_sent_by(nodeid)
|
||||
|
||||
def go(self, duration):
|
||||
time.sleep(duration)
|
||||
|
||||
class VirtualTime:
|
||||
|
||||
BASE_PORT = 9000
|
||||
MAX_NODES = 34
|
||||
PORT_OFFSET = int(os.getenv('PORT_OFFSET', "0"))
|
||||
|
||||
def __init__(self):
|
||||
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
|
||||
ip = '127.0.0.1'
|
||||
self.port = self.BASE_PORT + (self.PORT_OFFSET * self.MAX_NODES)
|
||||
self.sock.bind((ip, self.port))
|
||||
|
||||
self.devices = {}
|
||||
self.event_queue = []
|
||||
self.event_count = 0
|
||||
self.current_time = 0
|
||||
self.current_event = None;
|
||||
|
||||
self._message_factory = config.create_default_thread_message_factory()
|
||||
|
||||
def __del__(self):
|
||||
self.sock.close()
|
||||
|
||||
def _add_message(self, nodeid, message):
|
||||
addr = ('127.0.0.1', self.port + nodeid)
|
||||
|
||||
# Ignore any exceptions
|
||||
try:
|
||||
msg = self._message_factory.create(io.BytesIO(message))
|
||||
|
||||
if msg is not None:
|
||||
self.devices[addr]['msgs'].append(msg)
|
||||
|
||||
except Exception as e:
|
||||
# Just print the exception to the console
|
||||
print("EXCEPTION: %s" % e)
|
||||
pass
|
||||
|
||||
def set_lowpan_context(self, cid, prefix):
|
||||
self._message_factory.set_lowpan_context(cid, prefix)
|
||||
|
||||
def get_messages_sent_by(self, nodeid):
|
||||
""" Get sniffed messages.
|
||||
|
||||
Note! This method flushes the message queue so calling this method again will return only the newly logged messages.
|
||||
|
||||
Args:
|
||||
nodeid (int): node id
|
||||
|
||||
Returns:
|
||||
MessagesSet: a set with received messages.
|
||||
"""
|
||||
addr = ('127.0.0.1', self.port + nodeid)
|
||||
|
||||
messages = self.devices[addr]['msgs']
|
||||
self.devices[addr]['msgs'] = []
|
||||
|
||||
return message.MessagesSet(messages)
|
||||
|
||||
def receive_events(self):
|
||||
|
||||
if self.current_event is None:
|
||||
self.sock.setblocking(0)
|
||||
else:
|
||||
self.sock.setblocking(1)
|
||||
|
||||
while True:
|
||||
try:
|
||||
msg, addr = self.sock.recvfrom(1024)
|
||||
except socket.error:
|
||||
break
|
||||
|
||||
if addr not in self.devices:
|
||||
self.devices[addr] = {}
|
||||
self.devices[addr]['alarm'] = None
|
||||
self.devices[addr]['msgs'] = []
|
||||
self.devices[addr]['time'] = self.current_time
|
||||
#print "New device:", addr, self.devices
|
||||
|
||||
delay, type, datalen = struct.unpack('=QBH', msg[:11])
|
||||
data = msg[11:]
|
||||
|
||||
event_time = self.current_time + delay
|
||||
|
||||
if type == 0:
|
||||
# remove any existing alarm event for device
|
||||
try:
|
||||
self.event_queue.remove(self.devices[addr]['alarm'])
|
||||
#print "-- Remove\t", self.devices[addr]['alarm']
|
||||
self.devices[addr]['alarm'] = None
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# add alarm event to event queue
|
||||
event = (event_time, addr, type, datalen)
|
||||
#print "-- Enqueue\t", event, delay, self.current_time
|
||||
bisect.insort(self.event_queue, event)
|
||||
self.devices[addr]['alarm'] = event
|
||||
|
||||
if self.current_event is not None and self.current_event[1] == addr:
|
||||
#print "Done\t", self.current_event
|
||||
self.current_event = None
|
||||
return
|
||||
|
||||
elif type == 1:
|
||||
# add radio receive events event queue
|
||||
for device in self.devices:
|
||||
if device != addr:
|
||||
event = (event_time, device, type, datalen, data)
|
||||
#print "-- Enqueue\t", event
|
||||
bisect.insort(self.event_queue, event)
|
||||
|
||||
self._add_message(addr[1] - self.port, data)
|
||||
|
||||
# add radio transmit done events to event queue
|
||||
event = (event_time, addr, type, datalen, data)
|
||||
bisect.insort(self.event_queue, event)
|
||||
|
||||
def process_next_event(self):
|
||||
|
||||
if self.current_event != None:
|
||||
return
|
||||
|
||||
#print "Events", len(self.event_queue)
|
||||
count = 0
|
||||
for event in self.event_queue:
|
||||
#print count, event
|
||||
count += 1
|
||||
|
||||
# process next event
|
||||
try:
|
||||
event = self.event_queue.pop(0)
|
||||
except IndexError:
|
||||
return
|
||||
|
||||
#print "Pop\t", event
|
||||
|
||||
if len(event) == 4:
|
||||
event_time, addr, type, datalen = event
|
||||
else:
|
||||
event_time, addr, type, datalen, data = event
|
||||
|
||||
self.event_count += 1
|
||||
self.current_event = event
|
||||
|
||||
assert(event_time >= self.current_time)
|
||||
self.current_time = event_time
|
||||
|
||||
elapsed = event_time - self.devices[addr]['time']
|
||||
self.devices[addr]['time'] = event_time
|
||||
|
||||
message = struct.pack('=QBH', elapsed, type, datalen)
|
||||
|
||||
if type == 0:
|
||||
self.devices[addr]['alarm'] = None
|
||||
self.sock.sendto(message, addr)
|
||||
elif type == 1:
|
||||
message += data
|
||||
self.sock.sendto(message, addr)
|
||||
|
||||
def sync_devices(self):
|
||||
for addr in self.devices:
|
||||
elapsed = self.current_time - self.devices[addr]['time']
|
||||
self.devices[addr]['time'] = self.current_time
|
||||
message = struct.pack('=QBH', elapsed, 0, 0)
|
||||
self.sock.sendto(message, addr)
|
||||
|
||||
def go(self, duration):
|
||||
|
||||
duration = int(duration) * 1000000
|
||||
|
||||
start_time = self.current_time
|
||||
self.current_event = None
|
||||
|
||||
print "running for %d us" % duration
|
||||
|
||||
self.receive_events()
|
||||
|
||||
while (self.current_time - start_time) < duration:
|
||||
self.process_next_event()
|
||||
self.receive_events()
|
||||
|
||||
self.sync_devices()
|
||||
@@ -50,9 +50,11 @@ SRV_1_SERVER_DATA = 'qux'
|
||||
|
||||
class Test_Service(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.simulator = config.create_default_simulator()
|
||||
|
||||
self.nodes = {}
|
||||
for i in range(1,4):
|
||||
self.nodes[i] = node.Node(i)
|
||||
self.nodes[i] = node.Node(i, simulator=self.simulator)
|
||||
|
||||
self.nodes[LEADER].set_panid(0xface)
|
||||
self.nodes[LEADER].set_mode('rsdn')
|
||||
@@ -84,6 +86,7 @@ class Test_Service(unittest.TestCase):
|
||||
for node in list(self.nodes.values()):
|
||||
node.stop()
|
||||
del self.nodes
|
||||
del self.simulator
|
||||
|
||||
def hasAloc(self, node_id, service_id):
|
||||
for addr in self.nodes[node_id].get_ip6_address(config.ADDRESS_TYPE.ALOC):
|
||||
@@ -100,16 +103,16 @@ class Test_Service(unittest.TestCase):
|
||||
|
||||
def failToPingFromAll(self, addr):
|
||||
for node in list(self.nodes.values()):
|
||||
self.assertFalse(node.ping(addr, timeout=3000))
|
||||
self.assertFalse(node.ping(addr, timeout=3))
|
||||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.nodes[LEADER].set_state('leader')
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
self.nodes[ROUTER2].start()
|
||||
time.sleep(5)
|
||||
self.simulator.go(5)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
|
||||
|
||||
@@ -122,7 +125,7 @@ class Test_Service(unittest.TestCase):
|
||||
|
||||
self.nodes[ROUTER1].add_service(SRV_0_ENT_NUMBER, SRV_0_SERVICE_DATA, SRV_0_SERVER_DATA)
|
||||
self.nodes[ROUTER1].register_netdata()
|
||||
time.sleep(2)
|
||||
self.simulator.go(2)
|
||||
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_0_ID), False)
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_1_ID), False)
|
||||
@@ -136,7 +139,7 @@ class Test_Service(unittest.TestCase):
|
||||
|
||||
self.nodes[LEADER].add_service(SRV_0_ENT_NUMBER, SRV_0_SERVICE_DATA, SRV_0_SERVER_DATA)
|
||||
self.nodes[LEADER].register_netdata()
|
||||
time.sleep(2)
|
||||
self.simulator.go(2)
|
||||
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_0_ID), True)
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_1_ID), False)
|
||||
@@ -149,7 +152,7 @@ class Test_Service(unittest.TestCase):
|
||||
|
||||
self.nodes[ROUTER2].add_service(SRV_1_ENT_NUMBER, SRV_1_SERVICE_DATA, SRV_1_SERVER_DATA)
|
||||
self.nodes[ROUTER2].register_netdata()
|
||||
time.sleep(2)
|
||||
self.simulator.go(2)
|
||||
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_0_ID), True)
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_1_ID), False)
|
||||
@@ -164,7 +167,7 @@ class Test_Service(unittest.TestCase):
|
||||
|
||||
self.nodes[ROUTER1].remove_service(SRV_0_ENT_NUMBER, SRV_0_SERVICE_DATA)
|
||||
self.nodes[ROUTER1].register_netdata()
|
||||
time.sleep(2)
|
||||
self.simulator.go(2)
|
||||
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_0_ID), True)
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_1_ID), False)
|
||||
@@ -178,7 +181,7 @@ class Test_Service(unittest.TestCase):
|
||||
|
||||
self.nodes[LEADER].remove_service(SRV_0_ENT_NUMBER, SRV_0_SERVICE_DATA)
|
||||
self.nodes[LEADER].register_netdata()
|
||||
time.sleep(2)
|
||||
self.simulator.go(2)
|
||||
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_0_ID), False)
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_1_ID), False)
|
||||
@@ -192,7 +195,7 @@ class Test_Service(unittest.TestCase):
|
||||
|
||||
self.nodes[ROUTER2].remove_service(SRV_1_ENT_NUMBER, SRV_1_SERVICE_DATA)
|
||||
self.nodes[ROUTER2].register_netdata()
|
||||
time.sleep(2)
|
||||
self.simulator.go(2)
|
||||
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_0_ID), False)
|
||||
self.assertEqual(self.hasAloc(LEADER, SRV_1_ID), False)
|
||||
|
||||
Reference in New Issue
Block a user