[style] update python style to conform to PEP 8 (#3951)

With the exception of line length set to 119 vs. 79.

Add tests/ and tools/ to py-pretty-check.
This commit is contained in:
Jonathan Hui
2019-07-11 11:45:55 -04:00
committed by GitHub
parent a938ee2845
commit f924adcb60
341 changed files with 8702 additions and 4460 deletions
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,7 +39,6 @@ ROUTER = 2
class Cert_5_1_01_RouterAttach(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -60,9 +58,9 @@ class Cert_5_1_01_RouterAttach(unittest.TestCase):
self.nodes[ROUTER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -112,7 +110,9 @@ class Cert_5_1_01_RouterAttach(unittest.TestCase):
msg.assertMleMessageContainsTlv(mle.Version)
# 4 - Router
msg = router_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
msg = router_messages.next_mle_message(
mle.CommandType.CHILD_ID_REQUEST
)
msg.assertSentToNode(self.nodes[LEADER])
msg.assertMleMessageContainsTlv(mle.Response)
msg.assertMleMessageContainsTlv(mle.LinkLayerFrameCounter)
@@ -124,7 +124,9 @@ class Cert_5_1_01_RouterAttach(unittest.TestCase):
msg.assertMleMessageDoesNotContainTlv(mle.AddressRegistration)
# 5 - Leader
msg = leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
msg = leader_messages.next_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
)
msg.assertSentToNode(self.nodes[ROUTER])
msg.assertMleMessageContainsTlv(mle.SourceAddress)
msg.assertMleMessageContainsTlv(mle.LeaderData)
@@ -159,7 +161,9 @@ class Cert_5_1_01_RouterAttach(unittest.TestCase):
self.assertIn(mle.TlvType.LINK_MARGIN, tlv_request.tlvs)
# 9 - Leader
msg = leader_messages.next_mle_message(mle.CommandType.LINK_ACCEPT_AND_REQUEST)
msg = leader_messages.next_mle_message(
mle.CommandType.LINK_ACCEPT_AND_REQUEST
)
msg.assertMleMessageContainsTlv(mle.SourceAddress)
msg.assertMleMessageContainsTlv(mle.LeaderData)
msg.assertMleMessageContainsTlv(mle.Response)
@@ -181,5 +185,6 @@ 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()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -41,8 +40,8 @@ SED = 4
MTDS = [ED, SED]
class Cert_5_1_02_ChildAddressTimeout(unittest.TestCase):
class Cert_5_1_02_ChildAddressTimeout(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -76,9 +75,9 @@ class Cert_5_1_02_ChildAddressTimeout(unittest.TestCase):
self.nodes[SED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -41,7 +40,6 @@ ROUTER2 = 3
class Cert_5_1_03_RouterAddressReallocation(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -70,9 +68,9 @@ class Cert_5_1_03_RouterAddressReallocation(unittest.TestCase):
self.nodes[ROUTER2].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -125,7 +123,9 @@ class Cert_5_1_03_RouterAddressReallocation(unittest.TestCase):
router2_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
# Leader or Router1 can be parent of Router2
if leader_messages.contains_mle_message(mle.CommandType.CHILD_ID_RESPONSE):
if leader_messages.contains_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
):
leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
msg = router2_messages.next_coap_message("0.02")
@@ -133,8 +133,12 @@ class Cert_5_1_03_RouterAddressReallocation(unittest.TestCase):
msg = leader_messages.next_coap_message("2.04")
elif router1_messages.contains_mle_message(mle.CommandType.CHILD_ID_RESPONSE):
router1_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
elif router1_messages.contains_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
):
router1_messages.next_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
)
msg = router2_messages.next_coap_message("0.02")
msg.assertCoapMessageRequestUriPath("/a/as")
@@ -149,7 +153,9 @@ class Cert_5_1_03_RouterAddressReallocation(unittest.TestCase):
# 5 - Router1
# Router1 make two attempts to reconnect to its current Partition.
for _ in range(4):
msg = router1_messages.next_mle_message(mle.CommandType.PARENT_REQUEST)
msg = router1_messages.next_mle_message(
mle.CommandType.PARENT_REQUEST
)
msg.assertSentWithHopLimit(255)
msg.assertSentToDestinationAddress("ff02::2")
msg.assertMleMessageContainsTlv(mle.Mode)
@@ -175,7 +181,9 @@ class Cert_5_1_03_RouterAddressReallocation(unittest.TestCase):
self.assertEqual(0, scan_mask_tlv.end_device)
# 7 - Router1
msg = router1_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
msg = router1_messages.next_mle_message(
mle.CommandType.CHILD_ID_REQUEST
)
msg.assertSentToNode(self.nodes[ROUTER2])
msg.assertMleMessageContainsTlv(mle.Response)
msg.assertMleMessageContainsTlv(mle.LinkLayerFrameCounter)
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -41,7 +40,6 @@ ROUTER2 = 3
class Cert_5_1_04_RouterAddressReallocation(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -70,9 +68,9 @@ class Cert_5_1_04_RouterAddressReallocation(unittest.TestCase):
self.nodes[ROUTER2].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -124,7 +122,9 @@ class Cert_5_1_04_RouterAddressReallocation(unittest.TestCase):
router2_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
# Leader or Router1 can be parent of Router2
if leader_messages.contains_mle_message(mle.CommandType.CHILD_ID_RESPONSE):
if leader_messages.contains_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
):
leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
msg = router2_messages.next_coap_message("0.02")
@@ -132,8 +132,12 @@ class Cert_5_1_04_RouterAddressReallocation(unittest.TestCase):
msg = leader_messages.next_coap_message("2.04")
elif router1_messages.contains_mle_message(mle.CommandType.CHILD_ID_RESPONSE):
router1_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
elif router1_messages.contains_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
):
router1_messages.next_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
)
msg = router2_messages.next_coap_message("0.02")
msg.assertCoapMessageRequestUriPath("/a/as")
@@ -148,7 +152,9 @@ class Cert_5_1_04_RouterAddressReallocation(unittest.TestCase):
# 5 - Router1
# Router1 make two attempts to reconnect to its current Partition.
for _ in range(4):
msg = router1_messages.next_mle_message(mle.CommandType.PARENT_REQUEST)
msg = router1_messages.next_mle_message(
mle.CommandType.PARENT_REQUEST
)
msg.assertSentWithHopLimit(255)
msg.assertSentToDestinationAddress("ff02::2")
msg.assertMleMessageContainsTlv(mle.Mode)
@@ -178,7 +184,9 @@ class Cert_5_1_04_RouterAddressReallocation(unittest.TestCase):
router2_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
# 9 - Router1
msg = router1_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router1_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[ROUTER2])
msg.assertMleMessageContainsTlv(mle.SourceAddress)
msg.assertMleMessageContainsTlv(mle.LeaderData)
@@ -190,7 +198,9 @@ class Cert_5_1_04_RouterAddressReallocation(unittest.TestCase):
msg.assertMleMessageContainsTlv(mle.Connectivity)
msg.assertMleMessageContainsTlv(mle.Version)
msg = router1_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
msg = router1_messages.next_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
)
msg.assertSentToNode(self.nodes[ROUTER2])
msg.assertMleMessageContainsTlv(mle.SourceAddress)
msg.assertMleMessageContainsTlv(mle.LeaderData)
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,7 +39,6 @@ ROUTER1 = 2
class Cert_5_1_05_RouterAddressTimeout(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -63,9 +61,9 @@ class Cert_5_1_05_RouterAddressTimeout(unittest.TestCase):
self.nodes[ROUTER1].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -27,14 +27,12 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import command
from command import CheckType
import config
import mle
import network_layer
import node
LEADER = 1
@@ -42,7 +40,6 @@ ROUTER1 = 2
class Cert_5_1_06_RemoveRouterId(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -62,9 +59,9 @@ class Cert_5_1_06_RemoveRouterId(unittest.TestCase):
self.nodes[ROUTER1].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -107,10 +104,17 @@ class Cert_5_1_06_RemoveRouterId(unittest.TestCase):
msg = router1_messages.next_mle_message(mle.CommandType.PARENT_REQUEST)
command.check_parent_request(msg, is_first_request=True)
msg = router1_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[LEADER])
command.check_child_id_request(msg, tlv_request=CheckType.CONTAIN,
mle_frame_counter=CheckType.OPTIONAL, address_registration=CheckType.NOT_CONTAIN,
active_timestamp=CheckType.OPTIONAL, pending_timestamp=CheckType.OPTIONAL)
msg = router1_messages.next_mle_message(
mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[LEADER]
)
command.check_child_id_request(
msg,
tlv_request=CheckType.CONTAIN,
mle_frame_counter=CheckType.OPTIONAL,
address_registration=CheckType.NOT_CONTAIN,
active_timestamp=CheckType.OPTIONAL,
pending_timestamp=CheckType.OPTIONAL,
)
msg = router1_messages.next_coap_message(code="0.02")
command.check_address_solicit(msg, was_router=True)
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,6 +36,7 @@ LEADER = 1
ROUTER = 2
SED1 = 7
class Cert_5_1_07_MaxChildCount(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -69,9 +69,9 @@ class Cert_5_1_07_MaxChildCount(unittest.TestCase):
self.nodes[i].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -101,5 +101,6 @@ class Cert_5_1_07_MaxChildCount(unittest.TestCase):
self.assertTrue(self.nodes[LEADER].ping(addr, size=106))
break
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -42,7 +41,6 @@ ROUTER4 = 5
class Cert_5_1_08_RouterAttachConnectivity(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -87,9 +85,9 @@ class Cert_5_1_08_RouterAttachConnectivity(unittest.TestCase):
self.nodes[ROUTER4].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -137,14 +135,20 @@ class Cert_5_1_08_RouterAttachConnectivity(unittest.TestCase):
self.assertEqual(0, scan_mask_tlv.end_device)
# 3 - Router2, Router3
msg = router2_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router2_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[ROUTER4])
msg = router3_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router3_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[ROUTER4])
# 4 - Router4
msg = router4_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
msg = router4_messages.next_mle_message(
mle.CommandType.CHILD_ID_REQUEST
)
msg.assertSentToNode(self.nodes[ROUTER3])
msg.assertMleMessageContainsTlv(mle.Response)
msg.assertMleMessageContainsTlv(mle.LinkLayerFrameCounter)
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -42,7 +41,6 @@ ROUTER2 = 5
class Cert_5_1_09_REEDAttachConnectivity(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -87,9 +85,9 @@ class Cert_5_1_09_REEDAttachConnectivity(unittest.TestCase):
self.nodes[ROUTER2].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -156,10 +154,15 @@ class Cert_5_1_09_REEDAttachConnectivity(unittest.TestCase):
msg = reed1_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
connectivity_tlv_reed1 = msg.get_mle_message_tlv(mle.Connectivity)
self.assertGreater(connectivity_tlv_reed1.link_quality_3, connectivity_tlv_reed0.link_quality_3)
self.assertGreater(
connectivity_tlv_reed1.link_quality_3,
connectivity_tlv_reed0.link_quality_3,
)
# 6 - Router2
msg = router2_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
msg = router2_messages.next_mle_message(
mle.CommandType.CHILD_ID_REQUEST
)
msg.assertSentToNode(self.nodes[REED1])
msg.assertMleMessageContainsTlv(mle.Response)
msg.assertMleMessageContainsTlv(mle.LinkLayerFrameCounter)
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -41,7 +40,6 @@ ROUTER3 = 4
class Cert_5_1_10_RouterAttachLinkQuality(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -65,7 +63,9 @@ class Cert_5_1_10_RouterAttachLinkQuality(unittest.TestCase):
self.nodes[ROUTER2].set_panid(0xface)
self.nodes[ROUTER2].set_mode('rsdn')
self.nodes[ROUTER2].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER2].add_whitelist(self.nodes[ROUTER3].get_addr64(), rssi=-85)
self.nodes[ROUTER2].add_whitelist(
self.nodes[ROUTER3].get_addr64(), rssi=-85
)
self.nodes[ROUTER2].enable_whitelist()
self.nodes[ROUTER2].set_router_selection_jitter(1)
@@ -77,9 +77,9 @@ class Cert_5_1_10_RouterAttachLinkQuality(unittest.TestCase):
self.nodes[ROUTER3].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -142,14 +142,20 @@ class Cert_5_1_10_RouterAttachLinkQuality(unittest.TestCase):
msg.assertMleMessageContainsTlv(mle.Version)
# 4 - Router1, Router2
msg = router1_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router1_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[ROUTER3])
msg = router2_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router2_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[ROUTER3])
# 5 - Router3
msg = router3_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
msg = router3_messages.next_mle_message(
mle.CommandType.CHILD_ID_REQUEST
)
msg.assertSentToNode(self.nodes[ROUTER1])
msg.assertMleMessageContainsTlv(mle.Response)
msg.assertMleMessageContainsTlv(mle.LinkLayerFrameCounter)
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -41,7 +40,6 @@ ROUTER1 = 4
class Cert_5_1_11_REEDAttachLinkQuality(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -65,7 +63,9 @@ class Cert_5_1_11_REEDAttachLinkQuality(unittest.TestCase):
self.nodes[ROUTER2].set_panid(0xface)
self.nodes[ROUTER2].set_mode('rsdn')
self.nodes[ROUTER2].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER2].add_whitelist(self.nodes[ROUTER1].get_addr64(), rssi=-85)
self.nodes[ROUTER2].add_whitelist(
self.nodes[ROUTER1].get_addr64(), rssi=-85
)
self.nodes[ROUTER2].enable_whitelist()
self.nodes[ROUTER2].set_router_selection_jitter(1)
@@ -77,9 +77,9 @@ class Cert_5_1_11_REEDAttachLinkQuality(unittest.TestCase):
self.nodes[ROUTER1].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -141,7 +141,9 @@ class Cert_5_1_11_REEDAttachLinkQuality(unittest.TestCase):
self.assertEqual(0, scan_mask_tlv.end_device)
# 4 - Router2
msg = router2_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router2_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[ROUTER1])
# 5 - Router1
@@ -158,7 +160,9 @@ class Cert_5_1_11_REEDAttachLinkQuality(unittest.TestCase):
self.assertEqual(1, scan_mask_tlv.end_device)
# 6 - Router1
msg = router1_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
msg = router1_messages.next_mle_message(
mle.CommandType.CHILD_ID_REQUEST
)
msg.assertMleMessageContainsTlv(mle.LinkLayerFrameCounter)
msg.assertMleMessageContainsTlv(mle.Mode)
msg.assertMleMessageContainsTlv(mle.Response)
@@ -172,5 +176,6 @@ class Cert_5_1_11_REEDAttachLinkQuality(unittest.TestCase):
msg = reed_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
msg.assertSentToNode(self.nodes[ROUTER1])
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,7 +39,6 @@ ROUTER2 = 3
class Cert_5_1_12_NewRouterSync(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -67,17 +65,26 @@ class Cert_5_1_12_NewRouterSync(unittest.TestCase):
self.nodes[ROUTER2].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def verify_step_4(self, router1_messages, router2_messages, req_receiver, accept_receiver):
if router2_messages.contains_mle_message(mle.CommandType.LINK_REQUEST) and \
(router1_messages.contains_mle_message(mle.CommandType.LINK_ACCEPT) or
router1_messages.contains_mle_message(mle.CommandType.LINK_ACCEPT_AND_REQUEST)):
def verify_step_4(
self, router1_messages, router2_messages, req_receiver, accept_receiver
):
if router2_messages.contains_mle_message(
mle.CommandType.LINK_REQUEST
) and (
router1_messages.contains_mle_message(mle.CommandType.LINK_ACCEPT)
or router1_messages.contains_mle_message(
mle.CommandType.LINK_ACCEPT_AND_REQUEST
)
):
msg = router2_messages.next_mle_message(mle.CommandType.LINK_REQUEST)
msg = router2_messages.next_mle_message(
mle.CommandType.LINK_REQUEST
)
msg.assertSentToNode(self.nodes[req_receiver])
msg.assertMleMessageContainsTlv(mle.SourceAddress)
@@ -86,8 +93,10 @@ class Cert_5_1_12_NewRouterSync(unittest.TestCase):
msg.assertMleMessageContainsTlv(mle.Version)
msg.assertMleMessageContainsTlv(mle.TlvRequest)
msg = router1_messages.next_mle_message_of_one_of_command_types(mle.CommandType.LINK_ACCEPT_AND_REQUEST,
mle.CommandType.LINK_ACCEPT)
msg = router1_messages.next_mle_message_of_one_of_command_types(
mle.CommandType.LINK_ACCEPT_AND_REQUEST,
mle.CommandType.LINK_ACCEPT,
)
self.assertIsNotNone(msg)
msg.assertSentToNode(self.nodes[accept_receiver])
@@ -122,7 +131,7 @@ class Cert_5_1_12_NewRouterSync(unittest.TestCase):
self.simulator.go(10)
leader_messages = self.simulator.get_messages_sent_by(LEADER)
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)
@@ -139,13 +148,20 @@ class Cert_5_1_12_NewRouterSync(unittest.TestCase):
self.simulator.go(35)
leader_messages = self.simulator.get_messages_sent_by(LEADER)
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
self.verify_step_4(router2_messages, router1_messages, ROUTER2, ROUTER1))
self.assertTrue(
self.verify_step_4(
router1_messages, router2_messages, ROUTER1, ROUTER2
)
or self.verify_step_4(
router2_messages, router1_messages, ROUTER2, ROUTER1
)
)
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -39,7 +38,6 @@ ROUTER = 2
class Cert_5_1_13_RouterReset(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -62,9 +60,9 @@ class Cert_5_1_13_RouterReset(unittest.TestCase):
self.nodes[ROUTER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -105,8 +103,10 @@ class Cert_5_1_13_RouterReset(unittest.TestCase):
msg = leader_messages.next_coap_message("2.04")
router1_messages.next_mle_message(mle.CommandType.LINK_REQUEST)
msg = leader_messages.next_mle_message_of_one_of_command_types(mle.CommandType.LINK_ACCEPT_AND_REQUEST,
mle.CommandType.LINK_ACCEPT)
msg = leader_messages.next_mle_message_of_one_of_command_types(
mle.CommandType.LINK_ACCEPT_AND_REQUEST,
mle.CommandType.LINK_ACCEPT,
)
self.assertIsNotNone(msg)
# 2 - Router1 / Leader
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
@@ -35,14 +34,13 @@ import mle
import config
import command
import shutil
import os
LEADER = 1
DUT_ROUTER1 = 2
REED1 = 3
MED1 = 4
class Cert_5_2_01_REEDAttach(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -77,9 +75,9 @@ class Cert_5_2_01_REEDAttach(unittest.TestCase):
self.nodes[MED1].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -104,12 +102,16 @@ class Cert_5_2_01_REEDAttach(unittest.TestCase):
# 3 DUT_ROUTER1: Verify MLE Parent Response
router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
msg = router1_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router1_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[REED1])
command.check_parent_response(msg)
# 4 DUT_ROUTER1: Verify MLE Child ID Response
msg = router1_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
msg = router1_messages.next_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
)
msg.assertSentToNode(self.nodes[REED1])
command.check_child_id_response(msg)
@@ -123,26 +125,32 @@ class Cert_5_2_01_REEDAttach(unittest.TestCase):
# 7 REED1: Verify sending Address Solicit Request to DUT_ROUTER1
reed1_messages = self.simulator.get_messages_sent_by(REED1)
msg = reed1_messages.next_coap_message('0.02')
reed1_ipv6_address = msg.ipv6_packet.ipv6_header.source_address.compressed
msg.assertSentToNode(self.nodes[DUT_ROUTER1]);
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
# 8 DUT_ROUTER1: Verify forwarding REED1's Address Solicit Request to
# LEADER
router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
msg = router1_messages.next_coap_message('0.02')
msg.assertSentToNode(self.nodes[LEADER]);
msg.assertSentToNode(self.nodes[LEADER])
msg.assertCoapMessageRequestUriPath('/a/as')
# DUT_ROUTER1: Verify forwarding LEADER's Address Solicit Response to REED1
# DUT_ROUTER1: Verify forwarding LEADER's Address Solicit Response to
# REED1
msg = router1_messages.next_coap_message('2.04')
msg.assertSentToDestinationAddress(reed1_ipv6_address)
self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)
# 9 LEADER: Verify connectivity by sending an ICMPv6 Echo Request to REED1
# 9 LEADER: Verify connectivity by sending an ICMPv6 Echo Request to
# REED1
for addr in self.nodes[REED1].get_addrs():
if addr[0:4] != 'fe80':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
@@ -40,13 +39,16 @@ ROUTER_1 = 2
ROUTER_31 = 32
ROUTER_32 = 33
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, simulator=self.simulator)
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()
@@ -75,9 +77,9 @@ class Cert_5_2_3_LeaderReject2Hops(unittest.TestCase):
self.nodes[ROUTER_32].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -99,7 +101,8 @@ class Cert_5_2_3_LeaderReject2Hops(unittest.TestCase):
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.
# This method flushes the message queue so calling this method again
# will return only the newly logged messages.
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
msg = leader_messages.next_coap_message('2.04')
msg.assertCoapMessageContainsTlv(network_layer.Status)
@@ -123,7 +126,10 @@ class Cert_5_2_3_LeaderReject2Hops(unittest.TestCase):
msg.assertCoapMessageContainsTlv(network_layer.Status)
status_tlv = msg.get_coap_message_tlv(network_layer.Status)
self.assertEqual(network_layer.StatusValues.NO_ADDRESS_AVAILABLE, status_tlv.status)
self.assertEqual(
network_layer.StatusValues.NO_ADDRESS_AVAILABLE, status_tlv.status
)
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
@@ -45,6 +44,7 @@ REED_ADVERTISEMENT_INTERVAL = 570
REED_ADVERTISEMENT_MAX_JITTER = 60
ROUTER_SELECTION_JITTER = 1
class Cert_5_2_4_REEDUpgrade(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -79,9 +79,9 @@ class Cert_5_2_4_REEDUpgrade(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -115,7 +115,9 @@ class Cert_5_2_4_REEDUpgrade(unittest.TestCase):
msg.assertMleMessageDoesNotContainTlv(mle.Route64)
# 4 Wait for DUT_REED to send the second packet.
self.simulator.go(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.simulator.get_messages_sent_by(DUT_REED)
@@ -160,14 +162,19 @@ class Cert_5_2_4_REEDUpgrade(unittest.TestCase):
msg.assertSentToNode(self.nodes[ED])
msg.assertMleMessageContainsTlv(mle.Address16)
# 11 Verify connectivity by sending an ICMPv6 Echo Request to the Leader.
# 11 Verify connectivity by sending an ICMPv6 Echo Request to the
# Leader.
mleid = None
for addr in self.nodes[LEADER].get_addrs():
if addr.find(MESH_LOCAL_PREFIX) != -1 and addr.find(ROUTING_LACATOR) == -1:
if (
addr.find(MESH_LOCAL_PREFIX) != -1
and addr.find(ROUTING_LACATOR) == -1
):
mleid = addr
break
self.assertTrue(self.nodes[ED].ping(mleid))
if __name__ == '__main__':
unittest.main()
@@ -40,6 +40,7 @@ ED1 = 17
DUT_REED = 18
ROUTER_SELECTION_JITTER = 1
class Cert_5_2_5_AddressQuery(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -74,9 +75,9 @@ class Cert_5_2_5_AddressQuery(unittest.TestCase):
self.nodes[DUT_REED].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -123,8 +124,11 @@ class Cert_5_2_5_AddressQuery(unittest.TestCase):
self.nodes[DUT_REED].add_whitelist(self.nodes[BR].get_addr64())
self.nodes[BR].add_whitelist(self.nodes[DUT_REED].get_addr64())
# 6. Verify DUT_REED would send Address Notification when ping to its ML-EID.
mleid = self.nodes[DUT_REED].get_ip6_address(config.ADDRESS_TYPE.ML_EID)
# 6. Verify DUT_REED would send Address Notification when ping to its
# ML-EID.
mleid = self.nodes[DUT_REED].get_ip6_address(
config.ADDRESS_TYPE.ML_EID
)
self.assertTrue(self.nodes[ED1].ping(mleid))
# Wait for sniffer collecting packets
@@ -132,12 +136,17 @@ class Cert_5_2_5_AddressQuery(unittest.TestCase):
reed_messages = self.simulator.get_messages_sent_by(DUT_REED)
msg = reed_messages.next_coap_message('0.02', '/a/an')
command.check_address_notification(msg, self.nodes[DUT_REED], self.nodes[LEADER])
command.check_address_notification(
msg, self.nodes[DUT_REED], self.nodes[LEADER]
)
# 7 & 8. Verify DUT_REED would send Address Notification when ping to its 2001::EID and 2002::EID.
# 7 & 8. Verify DUT_REED would send Address Notification when ping to
# its 2001::EID and 2002::EID.
flag2001 = 0
flag2002 = 0
for global_address in self.nodes[DUT_REED].get_ip6_address(config.ADDRESS_TYPE.GLOBAL):
for global_address in self.nodes[DUT_REED].get_ip6_address(
config.ADDRESS_TYPE.GLOBAL
):
if global_address[0:4] == '2001':
flag2001 += 1
elif global_address[0:4] == '2002':
@@ -151,10 +160,13 @@ class Cert_5_2_5_AddressQuery(unittest.TestCase):
reed_messages = self.simulator.get_messages_sent_by(DUT_REED)
msg = reed_messages.next_coap_message('0.02', '/a/an')
command.check_address_notification(msg, self.nodes[DUT_REED], self.nodes[LEADER])
command.check_address_notification(
msg, self.nodes[DUT_REED], self.nodes[LEADER]
)
assert flag2001 == 1, "Error: Expecting address 2001::EID not appear."
assert flag2002 == 1, "Error: Expecting address 2002::EID not appear."
assert flag2001 == 1 , "Error: Expecting address 2001::EID not appear."
assert flag2002 == 1 , "Error: Expecting address 2002::EID not appear."
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
@@ -40,6 +39,7 @@ DUT_ROUTER1 = 2
ROUTER2 = 3
ROUTER24 = 24
class Cert_5_2_06_RouterDowngrade(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -55,9 +55,9 @@ class Cert_5_2_06_RouterDowngrade(unittest.TestCase):
self.nodes[i].set_router_downgrade_threshold(32)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -71,12 +71,14 @@ class Cert_5_2_06_RouterDowngrade(unittest.TestCase):
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.
# This method flushes the message queue so calling this method again
# will return only the newly logged messages.
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.
# so we don't need to ensure ROUTER24 has a better link quality on
# posix.
self.nodes[ROUTER24].start()
self.simulator.go(5)
self.assertEqual(self.nodes[ROUTER24].get_state(), 'router')
@@ -90,13 +92,17 @@ class Cert_5_2_06_RouterDowngrade(unittest.TestCase):
dut_messages.next_mle_message(mle.CommandType.PARENT_REQUEST)
dut_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST)
# Verify it sent an Address Release Message to the Leader when it attached as a child.
# Verify it sent an Address Release Message to the Leader when it
# attached as a child.
msg = dut_messages.next_coap_message('0.02')
command.check_address_release(msg, self.nodes[LEADER])
# 4 & 5
router1_rloc = self.nodes[DUT_ROUTER1].get_ip6_address(config.ADDRESS_TYPE.RLOC)
router1_rloc = self.nodes[DUT_ROUTER1].get_ip6_address(
config.ADDRESS_TYPE.RLOC
)
self.assertTrue(self.nodes[LEADER].ping(router1_rloc))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import ipv6
@@ -42,6 +41,7 @@ DUT_REED = 17
MLE_MIN_LINKS = 3
class Cert_5_2_7_REEDSynchronization(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -54,9 +54,9 @@ class Cert_5_2_7_REEDSynchronization(unittest.TestCase):
self.nodes[i].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -74,7 +74,9 @@ class Cert_5_2_7_REEDSynchronization(unittest.TestCase):
# 2. DUT_REED: Attach to network. Verify it didn't send an Address Solicit Request.
# Avoid DUT_REED attach to DUT_ROUTER1.
self.nodes[DUT_REED].add_whitelist(self.nodes[DUT_ROUTER1].get_addr64(), config.RSSI['LINK_QULITY_1'])
self.nodes[DUT_REED].add_whitelist(
self.nodes[DUT_ROUTER1].get_addr64(), config.RSSI['LINK_QULITY_1']
)
self.nodes[DUT_REED].start()
self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)
@@ -83,33 +85,49 @@ class Cert_5_2_7_REEDSynchronization(unittest.TestCase):
# The DUT_REED must not send a coap message here.
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"
assert (
msg is True
), "Error: The DUT_REED sent an Address Solicit Request"
# 3. DUT_REED: Verify sent a Link Request to at least 3 neighboring Routers.
# 3. DUT_REED: Verify sent a Link Request to at least 3 neighboring
# Routers.
for i in range(0, MLE_MIN_LINKS):
msg = reed_messages.next_mle_message(mle.CommandType.LINK_REQUEST)
command.check_link_request(msg, source_address = command.CheckType.CONTAIN, \
leader_data = command.CheckType.CONTAIN)
command.check_link_request(
msg,
source_address=command.CheckType.CONTAIN,
leader_data=command.CheckType.CONTAIN,
)
# 4. DUT_REED: Verify at least 3 Link Accept messages sent to DUT_REED.
self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)
link_accept_count = 0
destination_link_local = self.nodes[DUT_REED].get_ip6_address(config.ADDRESS_TYPE.LINK_LOCAL)
destination_link_local = self.nodes[DUT_REED].get_ip6_address(
config.ADDRESS_TYPE.LINK_LOCAL
)
for i in range(1, DUT_REED):
dut_messages = self.simulator.get_messages_sent_by(i)
while True:
msg = dut_messages.next_mle_message(mle.CommandType.LINK_ACCEPT, False)
if msg == None:
msg = dut_messages.next_mle_message(
mle.CommandType.LINK_ACCEPT, False
)
if msg is None:
break
if ipv6.ip_address(destination_link_local) == msg.ipv6_packet.ipv6_header.destination_address:
if (
ipv6.ip_address(destination_link_local)
== msg.ipv6_packet.ipv6_header.destination_address
):
command.check_link_accept(msg, self.nodes[DUT_REED])
link_accept_count += 1
break
assert (link_accept_count >= MLE_MIN_LINKS) is True, "Error: too few Link Accept sent to DUT_REED"
assert (
link_accept_count >= MLE_MIN_LINKS
) is True, "Error: too few Link Accept sent to DUT_REED"
if __name__ == '__main__':
unittest.main()
@@ -27,22 +27,21 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
import config
import command
LEADER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -53,9 +52,9 @@ class Cert_5_3_1_LinkLocal(unittest.TestCase):
self.nodes[DUT_ROUTER1].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -69,7 +68,9 @@ class Cert_5_3_1_LinkLocal(unittest.TestCase):
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')
# 2 & 3
link_local = self.nodes[DUT_ROUTER1].get_ip6_address(config.ADDRESS_TYPE.LINK_LOCAL)
link_local = self.nodes[DUT_ROUTER1].get_ip6_address(
config.ADDRESS_TYPE.LINK_LOCAL
)
self.assertTrue(self.nodes[LEADER].ping(link_local, size=256))
self.assertTrue(self.nodes[LEADER].ping(link_local))
@@ -82,7 +83,12 @@ class Cert_5_3_1_LinkLocal(unittest.TestCase):
self.assertTrue(self.nodes[LEADER].ping('ff02::2'))
# 8
self.assertTrue(self.nodes[LEADER].ping(config.LINK_LOCAL_All_THREAD_NODES_MULTICAST_ADDRESS))
self.assertTrue(
self.nodes[LEADER].ping(
config.LINK_LOCAL_All_THREAD_NODES_MULTICAST_ADDRESS
)
)
if __name__ == '__main__':
unittest.main()
@@ -27,24 +27,23 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
import config
import command
LEADER = 1
ROUTER1 = 2
DUT_ROUTER2 = 3
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i == SED1), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -73,9 +72,9 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
self.nodes[SED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -97,12 +96,16 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
self.assertEqual(self.nodes[SED1].get_state(), 'child')
# 2 & 3
mleid = self.nodes[DUT_ROUTER2].get_ip6_address(config.ADDRESS_TYPE.ML_EID)
mleid = self.nodes[DUT_ROUTER2].get_ip6_address(
config.ADDRESS_TYPE.ML_EID
)
self.assertTrue(self.nodes[LEADER].ping(mleid, size=256))
self.assertTrue(self.nodes[LEADER].ping(mleid))
# 4 & 5
self.assertTrue(self.nodes[LEADER].ping('ff03::1', num_responses=2, size=256))
self.assertTrue(
self.nodes[LEADER].ping('ff03::1', num_responses=2, size=256)
)
sed_messages = self.simulator.get_messages_sent_by(SED1)
self.assertFalse(sed_messages.contains_icmp_message())
@@ -111,7 +114,9 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
self.assertFalse(sed_messages.contains_icmp_message())
# 6 & 7
self.assertTrue(self.nodes[LEADER].ping('ff03::2', num_responses=2, size=256))
self.assertTrue(
self.nodes[LEADER].ping('ff03::2', num_responses=2, size=256)
)
sed_messages = self.simulator.get_messages_sent_by(SED1)
self.assertFalse(sed_messages.contains_icmp_message())
@@ -120,15 +125,27 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
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))
self.assertTrue(
self.nodes[LEADER].ping(
config.REALM_LOCAL_All_THREAD_NODES_MULTICAST_ADDRESS,
num_responses=3,
size=256,
)
)
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))
self.assertTrue(
self.nodes[LEADER].ping(
config.REALM_LOCAL_All_THREAD_NODES_MULTICAST_ADDRESS,
num_responses=3,
)
)
self.simulator.go(2)
sed_messages = self.simulator.get_messages_sent_by(SED1)
self.assertTrue(sed_messages.contains_icmp_message())
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
@@ -41,12 +40,13 @@ ROUTER3 = 4
MED1 = 5
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):
for i in range(1, 6):
self.nodes[i] = node.Node(i, (i == MED1), simulator=self.simulator)
self.nodes[LEADER].set_panid()
@@ -84,9 +84,9 @@ class Cert_5_3_3_AddressQuery(unittest.TestCase):
self.nodes[MED1].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -106,39 +106,54 @@ class Cert_5_3_3_AddressQuery(unittest.TestCase):
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
self.assertEqual(self.nodes[MED1].get_state(), 'child')
# 2
# Flush the message queue to avoid possible impact on follow-up verification.
# Flush the message queue to avoid possible impact on follow-up
# verification.
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
router3_mleid = self.nodes[ROUTER3].get_ip6_address(config.ADDRESS_TYPE.ML_EID)
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.
# Verify DUT_ROUTER2 sent an Address Query Request to the Realm local
# address.
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)
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.
# Wait the finish of address resolution traffic triggerred by previous
# ping.
self.simulator.go(5)
# Flush the message queue to avoid possible impact on follow-up verification.
# Flush the message queue to avoid possible impact on follow-up
# verification.
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
med1_mleid = self.nodes[MED1].get_ip6_address(config.ADDRESS_TYPE.ML_EID)
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.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])
command.check_address_notification(
msg, self.nodes[DUT_ROUTER2], self.nodes[ROUTER1]
)
# 4
# Wait the finish of address resolution traffic triggerred by previous ping.
# Wait the finish of address resolution traffic triggerred by previous
# ping.
self.simulator.go(5)
# Flush the message queue to avoid possible impact on follow-up verification.
# Flush the message queue to avoid possible impact on follow-up
# verification.
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
self.assertTrue(self.nodes[MED1].ping(router3_mleid))
@@ -152,25 +167,33 @@ class Cert_5_3_3_AddressQuery(unittest.TestCase):
# Power off ROUTER3 and wait for leader to expire its Router ID.
# In this topology, ROUTER3 has two neighbors (Leader and DUT_ROUTER2),
# so the wait time is (MAX_NEIGHBOR_AGE (100s) + worst propagation time (32s * 15) for bad routing +\
# INFINITE_COST_TIMEOUT (90s) + transmission time + extra redundancy), totally ~700s.
# INFINITE_COST_TIMEOUT (90s) + transmission time + extra redundancy),
# totally ~700s.
self.nodes[ROUTER3].stop()
self.simulator.go(700)
# Flush the message queue to avoid possible impact on follow-up verification.
# Flush the message queue to avoid possible impact on follow-up
# verification.
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.
# Verify DUT_ROUTER2 sent an Address Query Request to the Realm local
# address.
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)
command.check_address_query(
msg,
self.nodes[DUT_ROUTER2],
config.REALM_LOCAL_ALL_ROUTERS_ADDRESS,
)
# 6
self.nodes[MED1].stop()
self.simulator.go(MED1_TIMEOUT)
# Flush the message queue to avoid possible impact on follow-up verification.
# Flush the message queue to avoid possible impact on follow-up
# verification.
dut_messages = self.simulator.get_messages_sent_by(DUT_ROUTER2)
self.assertFalse(self.nodes[ROUTER1].ping(med1_mleid))
@@ -181,5 +204,6 @@ class Cert_5_3_3_AddressQuery(unittest.TestCase):
msg = dut_messages.next_coap_message('0.02', '/a/an', False)
assert msg is None, "The Address Notification is not expected."
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
@@ -44,12 +43,13 @@ ED4 = 7
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):
for i in range(1, 8):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -72,7 +72,8 @@ class Cert_5_3_4_AddressMapCache(unittest.TestCase):
self.nodes[SED1].set_mode('s')
self.nodes[SED1].add_whitelist(self.nodes[DUT_ROUTER1].get_addr64())
# Set the SED1's timeout in order to receive the icmp reply when keep alive with DUT_ROUTER.
# Set the SED1's timeout in order to receive the icmp reply when keep
# alive with DUT_ROUTER.
self.nodes[SED1].set_timeout(5)
self.nodes[SED1].enable_whitelist()
@@ -83,9 +84,9 @@ class Cert_5_3_4_AddressMapCache(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -104,33 +105,47 @@ class Cert_5_3_4_AddressMapCache(unittest.TestCase):
for i in MTDS:
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.
# This method flushes the message queue so calling this method again
# will return only the newly logged messages.
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)
ed_mleid = self.nodes[ED].get_ip6_address(
config.ADDRESS_TYPE.ML_EID
)
self.assertTrue(self.nodes[SED1].ping(ed_mleid))
self.simulator.go(5)
# Verify DUT_ROUTER1 generated an Address Query Request to find each node's RLOC.
# Verify DUT_ROUTER1 generated an Address Query Request to find
# each node's RLOC.
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)
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.
# This method flushes the message queue so calling this method again
# will return only the newly logged messages.
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)
ed_mleid = self.nodes[ED].get_ip6_address(
config.ADDRESS_TYPE.ML_EID
)
self.assertTrue(self.nodes[SED1].ping(ed_mleid))
self.simulator.go(5)
# Verify DUT_ROUTER1 didn't generate an Address Query Request.
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"
assert (
msg is None
), "Error: The DUT sent an unexpected Address Query Request"
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
@@ -39,12 +38,13 @@ DUT_ROUTER1 = 2
ROUTER2 = 3
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -75,9 +75,9 @@ class Cert_5_3_5_RoutingLinkQuality(unittest.TestCase):
self.nodes[ROUTER3].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -94,7 +94,9 @@ class Cert_5_3_5_RoutingLinkQuality(unittest.TestCase):
self.assertEqual(self.nodes[router].get_state(), 'router')
# 2 & 3
leader_rloc = self.nodes[LEADER].get_ip6_address(config.ADDRESS_TYPE.RLOC)
leader_rloc = self.nodes[LEADER].get_ip6_address(
config.ADDRESS_TYPE.RLOC
)
# Verify the ICMPv6 Echo Request took the least cost path.
self.assertTrue(self.nodes[ROUTER3].ping(leader_rloc))
@@ -102,35 +104,52 @@ class Cert_5_3_5_RoutingLinkQuality(unittest.TestCase):
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'])
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']
)
self.simulator.go(3 * config.MAX_ADVERTISEMENT_INTERVAL)
# Verify the ICMPv6 Echo Request took the longer path because it cost less.
# 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.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'])
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']
)
self.simulator.go(3 * config.MAX_ADVERTISEMENT_INTERVAL)
# Verify the direct neighbor would be prioritized when there are two paths with the same cost.
# 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.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'])
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']
)
self.simulator.go(3 * config.MAX_ADVERTISEMENT_INTERVAL)
# Verify the ICMPv6 Echo Request took the longer path.
leader_rloc = self.nodes[LEADER].get_ip6_address(config.ADDRESS_TYPE.RLOC)
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.simulator, path, self.nodes)
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
@@ -39,12 +38,13 @@ DUT_LEADER = 1
ROUTER1 = 2
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):
for i in range(1, 4):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[DUT_LEADER].set_panid(0xface)
@@ -69,9 +69,9 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
self.nodes[ROUTER2].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -89,7 +89,8 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
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.
# Wait DUT_LEADER to establish routing to ROUTER2 via ROUTER1's MLE
# advertisement.
self.simulator.go(config.MAX_ADVERTISEMENT_INTERVAL)
# 2
@@ -97,18 +98,22 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
self._setUpRouter2()
# 3 & 4
# Flush the message queue to avoid possible impact on follow-up verification.
dut_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
# Flush the message queue to avoid possible impact on follow-up
# verification.
self.simulator.get_messages_sent_by(DUT_LEADER)
# Verify the cost from DUT_LEADER to ROUTER2 goes to infinity in 12 mins.
# Verify the cost from DUT_LEADER to ROUTER2 goes to infinity in 12
# mins.
routing_cost = 1
for i in range(0, 24):
self.simulator.go(30)
print("%ss" %((i + 1) * 30))
print("%ss" % ((i + 1) * 30))
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
msg = leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT, False)
if msg == None:
msg = leader_messages.last_mle_message(
mle.CommandType.ADVERTISEMENT, False
)
if msg is None:
continue
self.assertTrue(command.check_id_set(msg, router2_id))
@@ -118,14 +123,17 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
break
self.assertTrue(routing_cost == 0)
self.simulator.go(config.INFINITE_COST_TIMEOUT + config.MAX_ADVERTISEMENT_INTERVAL)
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.simulator.get_messages_sent_by(DUT_LEADER)
# Flush the message queue to avoid possible impact on follow-up
# verification.
self.simulator.get_messages_sent_by(DUT_LEADER)
self.nodes[ROUTER2].start()
self.simulator.go(5)
@@ -142,16 +150,21 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
router1_id = self.nodes[ROUTER1].get_router_id()
router2_id = self.nodes[ROUTER2].get_router_id()
self.simulator.go(config.MAX_NEIGHBOR_AGE + config.MAX_ADVERTISEMENT_INTERVAL)
self.simulator.go(
config.MAX_NEIGHBOR_AGE + config.MAX_ADVERTISEMENT_INTERVAL
)
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
msg = leader_messages.last_mle_message(mle.CommandType.ADVERTISEMENT)
self.assertEqual(command.get_routing_cost(msg, router1_id), 0)
self.simulator.go(config.INFINITE_COST_TIMEOUT + config.MAX_ADVERTISEMENT_INTERVAL)
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))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,12 +36,13 @@ LEADER = 1
ROUTER1 = 2
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):
for i in range(1, 4):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -64,9 +64,9 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
self.nodes[ROUTER2].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -87,5 +87,6 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
self.simulator.go(300)
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
@@ -44,12 +43,13 @@ MED3 = 6
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):
for i in range(1, 7):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[DUT_LEADER].set_panid(0xface)
@@ -89,9 +89,9 @@ class Cert_5_3_7_DuplicateAddress(unittest.TestCase):
self.nodes[MED3].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -129,22 +129,30 @@ class Cert_5_3_7_DuplicateAddress(unittest.TestCase):
self.simulator.go(5)
# 4
# Flush the message queue to avoid possible impact on follow-up verification.
# Flush the message queue to avoid possible impact on follow-up
# verification.
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.
# Verify DUT_LEADER sent an Address Query Request to the Realm local
# address.
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)
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.
# Verify DUT_LEADER sent an Address Error Notification to the Realm
# local address.
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)
command.check_address_error_notification(
msg, self.nodes[DUT_LEADER], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS
)
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -43,6 +42,7 @@ MED2 = 4
MTDS = [MED1, MED2]
class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -71,9 +71,9 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
self.nodes[i].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -108,14 +108,18 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
self.assertEqual(self.nodes[i].get_state(), 'child')
# 4 MED1: MED1 send an ICMPv6 Echo Request to the MED2 ML-EID
med2_ml_eid = self.nodes[MED2].get_ip6_address(config.ADDRESS_TYPE.ML_EID)
self.assertTrue(med2_ml_eid != None)
med2_ml_eid = self.nodes[MED2].get_ip6_address(
config.ADDRESS_TYPE.ML_EID
)
self.assertTrue(med2_ml_eid is not None)
self.assertTrue(self.nodes[MED1].ping(med2_ml_eid))
# Verify DUT_LEADER didn't generate an Address Query Request
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"
assert (
msg is None
), "Error: The DUT_LEADER sent an unexpected Address Query Request"
# Wait for sniffer got packets
self.simulator.go(1)
@@ -123,7 +127,9 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
# Verify MED2 sent an ICMPv6 Echo Reply
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"
assert (
msg is not None
), "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1"
# 5 MED1: MED1 send an ICMPv6 Echo Request to the MED2 2001::GUA
addr = self.nodes[MED2].get_addr("2001::/64")
@@ -133,7 +139,9 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
# Verify DUT_LEADER didn't generate an Address Query Request
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"
assert (
msg is None
), "Error: The DUT_LEADER sent an unexpected Address Query Request"
# Wait for sniffer got packets
self.simulator.go(1)
@@ -141,7 +149,9 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
# Verify MED2 sent an ICMPv6 Echo Reply
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"
assert (
msg is not None
), "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1"
# 6 MED1: MED1 send an ICMPv6 Echo Request to the MED2 2002::GUA
addr = self.nodes[MED2].get_addr("2002::/64")
@@ -151,7 +161,9 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
# Verify DUT_LEADER didn't generate an Address Query Request
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"
assert (
msg is None
), "Error: The DUT_LEADER sent an unexpected Address Query Request"
# Wait for sniffer got packets
self.simulator.go(1)
@@ -159,7 +171,9 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
# Verify MED2 sent an ICMPv6 Echo Reply
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"
assert (
msg is not None
), "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1"
# 7 MED1: MED1 send an ICMPv6 Echo Request to the MED2 2003::GUA
addr = self.nodes[MED2].get_addr("2003::/64")
@@ -169,7 +183,9 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
# Verify DUT_LEADER didn't generate an Address Query Request
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"
assert (
msg is None
), "Error: The DUT_LEADER sent an unexpected Address Query Request"
# Wait for sniffer got packets
self.simulator.go(1)
@@ -177,7 +193,10 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
# Verify MED2 sent an ICMPv6 Echo Reply
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"
assert (
msg is not None
), "Error: The MED2 didn't send ICMPv6 Echo Reply to MED1"
if __name__ == '__main__':
unittest.main()
@@ -28,9 +28,7 @@
#
import copy
import time
import unittest
import ipaddress
import command
import config
@@ -43,12 +41,13 @@ DUT_ROUTER2 = 3
ROUTER3 = 4
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):
for i in range(1, 6):
self.nodes[i] = node.Node(i, (i == SED1), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -84,9 +83,9 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
self.nodes[SED1].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -95,7 +94,8 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
self.simulator.go(5)
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
# Configure the LEADER to be a DHCPv6 Border Router for prefixes 2001:: & 2002::
# Configure the LEADER to be a DHCPv6 Border Router for prefixes 2001::
# & 2002::
self.nodes[LEADER].add_prefix('2001::/64', 'pdros')
self.nodes[LEADER].add_prefix('2002::/64', 'pdro')
self.nodes[LEADER].register_netdata()
@@ -120,7 +120,8 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
self.simulator.go(5)
self.assertEqual(self.nodes[SED1].get_state(), 'child')
# 3 SED1: The SED1 sends an ICMPv6 Echo Request to ROUTER3 using GUA 2001:: address
# 3 SED1: The SED1 sends an ICMPv6 Echo Request to ROUTER3 using GUA
# 2001:: address
router3_addr = self.nodes[ROUTER3].get_addr("2001::/64")
self.assertTrue(router3_addr is not None)
self.assertTrue(self.nodes[SED1].ping(router3_addr))
@@ -128,15 +129,24 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
# Verify DUT_ROUTER2 sent an Address Query Request
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)
command.check_address_query(msg, self.nodes[DUT_ROUTER2], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
msg.assertSentToDestinationAddress(
config.REALM_LOCAL_ALL_ROUTERS_ADDRESS
)
command.check_address_query(
msg,
self.nodes[DUT_ROUTER2],
config.REALM_LOCAL_ALL_ROUTERS_ADDRESS,
)
# Verify the DUT_ROUTER2 forwarded the ICMPv6 Echo Request to ROUTER3
msg = dut_router2_messages.get_icmp_message(ipv6.ICMP_ECHO_REQUEST)
assert msg is not None, "Error: The DUT_ROUTER2 didn't forward ICMPv6 Echo Request to ROUTER3"
assert (
msg is not None
), "Error: The DUT_ROUTER2 didn't forward ICMPv6 Echo Request to ROUTER3"
msg.assertSentToNode(self.nodes[ROUTER3])
# 4 ROUTER1: ROUTER1 sends an ICMPv6 Echo Request to the SED1 using GUA 2001:: address
# 4 ROUTER1: ROUTER1 sends an ICMPv6 Echo Request to the SED1 using GUA
# 2001:: address
sed1_addr = self.nodes[SED1].get_addr("2001::/64")
self.assertTrue(sed1_addr is not None)
self.assertTrue(self.nodes[ROUTER1].ping(sed1_addr))
@@ -147,9 +157,12 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
# Verify DUT_ROUTER2 sent an Address Notification message
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[ROUTER1])
command.check_address_notification(
msg, self.nodes[DUT_ROUTER2], self.nodes[ROUTER1]
)
# 5 SED1: SED1 sends an ICMPv6 Echo Request to the ROUTER3 using GUA 2001:: address
# 5 SED1: SED1 sends an ICMPv6 Echo Request to the ROUTER3 using GUA
# 2001:: address
self.assertTrue(self.nodes[SED1].ping(router3_addr))
# Wait for sniffer got the ICMPv6 Echo Reply
@@ -159,14 +172,21 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
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"
assert (
msg is None
), "Error: The DUT_ROUTER2 sent an unexpected Address Query Request"
# Verify DUT_ROUTER2 forwarded the ICMPv6 Echo Reply to SED1
msg = dut_router2_messages_temp.get_icmp_message(ipv6.ICMP_ECHO_RESPONSE)
assert msg is not None, "Error: The DUT_ROUTER2 didn't forward ICMPv6 Echo Reply to SED1"
msg = dut_router2_messages_temp.get_icmp_message(
ipv6.ICMP_ECHO_RESPONSE
)
assert (
msg is not None
), "Error: The DUT_ROUTER2 didn't forward ICMPv6 Echo Reply to SED1"
msg.assertSentToNode(self.nodes[SED1])
# 6 DUT_ROUTER2: Power off ROUTER3 and wait 580s to alow LEADER to expire its Router ID
# 6 DUT_ROUTER2: Power off ROUTER3 and wait 580s to alow LEADER to
# expire its Router ID
self.nodes[ROUTER3].stop()
self.simulator.go(580)
@@ -176,9 +196,12 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
# Verify DUT_ROUTER2 sent an Address Query Request
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)
msg.assertSentToDestinationAddress(
config.REALM_LOCAL_ALL_ROUTERS_ADDRESS
)
# 7 SED1: Power off SED1 and wait to allow DUT_ROUTER2 to timeout the child
# 7 SED1: Power off SED1 and wait to allow DUT_ROUTER2 to timeout the
# child
self.nodes[SED1].stop()
self.simulator.go(5)
@@ -189,7 +212,10 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
# Verify DUT_ROUTER2 didn't generate an Address Notification message
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"
assert (
msg is None
), "Error: The DUT_ROUTER2 sent an unexpected Address Notification message"
if __name__ == '__main__':
unittest.main()
@@ -28,14 +28,11 @@
#
import copy
import ipaddress
import time
import unittest
import command
import config
import ipv6
import network_layer
import node
LEADER = 1
@@ -44,6 +41,7 @@ ROUTER1 = 3
DUT_ROUTER2 = 4
MED1 = 5
class Cert_5_3_10_AddressQuery(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
@@ -86,9 +84,9 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
self.nodes[MED1].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -123,7 +121,8 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
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
# 3 MED1: MED1 sends an ICMPv6 Echo Request to Router1 using GUA 2003::
# address
router1_addr = self.nodes[ROUTER1].get_addr("2003::/64")
self.assertTrue(router1_addr is not None)
self.assertTrue(self.nodes[MED1].ping(router1_addr))
@@ -134,14 +133,21 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
# Verify DUT_ROUTER2 sent an Address Query Request
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)
command.check_address_query(
msg,
self.nodes[DUT_ROUTER2],
config.REALM_LOCAL_ALL_ROUTERS_ADDRESS,
)
# Verify the DUT_ROUTER2 forwarded ICMPv6 Echo Request to ROUTER1
msg = dut_router2_messages.get_icmp_message(ipv6.ICMP_ECHO_REQUEST)
assert msg is not None, "Error: The DUT_ROUTER2 didn't forward ICMPv6 Echo Request to ROUTER1"
assert (
msg is not None
), "Error: The DUT_ROUTER2 didn't forward ICMPv6 Echo Request to ROUTER1"
msg.assertSentToNode(self.nodes[ROUTER1])
# 4 BR: BR sends an ICMPv6 Echo Request to MED1 using GUA 2003:: address
# 4 BR: BR sends an ICMPv6 Echo Request to MED1 using GUA 2003::
# address
med1_addr = self.nodes[MED1].get_addr("2003::/64")
self.assertTrue(med1_addr is not None)
self.assertTrue(self.nodes[BR].ping(med1_addr))
@@ -152,9 +158,12 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
# Verify DUT_ROUTER2 sent an Address Notification message
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])
command.check_address_notification(
msg, self.nodes[DUT_ROUTER2], self.nodes[BR]
)
# 5 MED1: MED1 sends an ICMPv6 Echo Request to ROUTER1 using GUA 2003:: address
# 5 MED1: MED1 sends an ICMPv6 Echo Request to ROUTER1 using GUA 2003::
# address
addr = self.nodes[ROUTER1].get_addr("2003::/64")
self.assertTrue(addr is not None)
self.assertTrue(self.nodes[MED1].ping(addr))
@@ -166,14 +175,21 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
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"
assert (
msg is None
), "Error: The DUT_ROUTER2 sent an unexpected Address Query Request"
# Verify DUT_ROUTER2 forwarded ICMPv6 Echo Reply to MED1
msg = dut_router2_messages_temp.get_icmp_message(ipv6.ICMP_ECHO_RESPONSE)
assert msg is not None, "Error: The DUT_ROUTER2 didn't forward ICMPv6 Echo Reply to MED1"
msg = dut_router2_messages_temp.get_icmp_message(
ipv6.ICMP_ECHO_RESPONSE
)
assert (
msg is not None
), "Error: The DUT_ROUTER2 didn't forward ICMPv6 Echo Reply to MED1"
msg.assertSentToNode(self.nodes[MED1])
# 6 DUT_ROUTER2: Power off ROUTER1 and wait 580 seconds to allow the LEADER to expire its Router ID
# 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()
self.simulator.go(580)
@@ -181,15 +197,21 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
# Send an ICMPv6 Echo Request from MED1 to ROUTER1 GUA 2003:: address
self.assertFalse(self.nodes[MED1].ping(router1_addr))
# Verify the DUT_ROUTER2 has removed all entries based on ROUTER1's Router ID
command.check_router_id_cached(self.nodes[DUT_ROUTER2], router1_id, False)
# Verify the DUT_ROUTER2 has removed all entries based on ROUTER1's
# Router ID
command.check_router_id_cached(
self.nodes[DUT_ROUTER2], router1_id, False
)
# Verify DUT_ROUTER2 sent an Address Query Request
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)
msg.assertSentToDestinationAddress(
config.REALM_LOCAL_ALL_ROUTERS_ADDRESS
)
# 7 MED1: Power off MED1 and wait to allow DUT_ROUTER2 to timeout the child
# 7 MED1: Power off MED1 and wait to allow DUT_ROUTER2 to timeout the
# child
self.nodes[MED1].stop()
self.simulator.go(config.MLE_END_DEVICE_TIMEOUT)
@@ -200,7 +222,10 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
# Verify DUT_ROUTER2 didn't generate an Address Notification message
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"
assert (
msg is None
), "Error: The DUT_ROUTER2 sent an unexpected Address Notification message"
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import command
@@ -38,13 +37,14 @@ LEADER = 1
DUT_ROUTER1 = 2
MED1 = 3
class Cert_5_3_11_AddressQueryTimeoutIntervals(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 == MED1), simulator = self.simulator)
self.nodes[i] = node.Node(i, (i == MED1), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
self.nodes[LEADER].set_mode('rsdn')
@@ -64,9 +64,9 @@ class Cert_5_3_11_AddressQueryTimeoutIntervals(unittest.TestCase):
self.nodes[MED1].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -83,7 +83,8 @@ class Cert_5_3_11_AddressQueryTimeoutIntervals(unittest.TestCase):
self.simulator.go(5)
self.assertEqual(self.nodes[MED1].get_state(), 'child')
# 2 MED1: MED1 sends an ICMPv6 Echo Request to a non-existent mesh-local address X
# 2 MED1: MED1 sends an ICMPv6 Echo Request to a non-existent
# mesh-local address X
X = "fdde:ad00:beef:0000:aa55:aa55:aa55:aa55"
self.assertFalse(self.nodes[MED1].ping(X))
@@ -92,9 +93,14 @@ class Cert_5_3_11_AddressQueryTimeoutIntervals(unittest.TestCase):
# Verify DUT_ROUTER1 sent an Address Query Request message
dut_router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
msg = dut_router1_messages.next_coap_message('0.02', '/a/aq')
command.check_address_query(msg, self.nodes[DUT_ROUTER1], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
command.check_address_query(
msg,
self.nodes[DUT_ROUTER1],
config.REALM_LOCAL_ALL_ROUTERS_ADDRESS,
)
# Verify DUT_ROUTER1 didn't receive an Address Query Notification message
# Verify DUT_ROUTER1 didn't receive an Address Query Notification
# message
dut_router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
msg = dut_router1_messages.next_coap_message('0.02', '/a/an', False)
self.assertTrue(msg is None)
@@ -117,7 +123,12 @@ class Cert_5_3_11_AddressQueryTimeoutIntervals(unittest.TestCase):
# Verify DUT_ROUTER1 sent an Address Query Request message
dut_router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
msg = dut_router1_messages.next_coap_message('0.02', '/a/aq')
command.check_address_query(msg, self.nodes[DUT_ROUTER1], config.REALM_LOCAL_ALL_ROUTERS_ADDRESS)
command.check_address_query(
msg,
self.nodes[DUT_ROUTER1],
config.REALM_LOCAL_ALL_ROUTERS_ADDRESS,
)
if __name__ == '__main__':
unittest.main()
@@ -28,7 +28,6 @@
#
import copy
import time
import unittest
import command
@@ -39,13 +38,14 @@ import node
DUT_LEADER = 1
DUT_ROUTER1 = 2
class Cert_5_5_1_LeaderReboot(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, simulator = self.simulator)
for i in range(1, 3):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[DUT_LEADER].set_panid(0xface)
self.nodes[DUT_LEADER].set_mode('rsdn')
@@ -53,18 +53,22 @@ class Cert_5_5_1_LeaderReboot(unittest.TestCase):
self.nodes[DUT_ROUTER1].set_panid(0xface)
self.nodes[DUT_ROUTER1].set_mode('rsdn')
self.nodes[DUT_ROUTER1].add_whitelist(self.nodes[DUT_LEADER].get_addr64())
self.nodes[DUT_ROUTER1].add_whitelist(
self.nodes[DUT_LEADER].get_addr64()
)
self.nodes[DUT_ROUTER1].enable_whitelist()
self.nodes[DUT_ROUTER1].set_router_selection_jitter(1)
def _setUpLeader(self):
self.nodes[DUT_LEADER].add_whitelist(self.nodes[DUT_ROUTER1].get_addr64())
self.nodes[DUT_LEADER].add_whitelist(
self.nodes[DUT_ROUTER1].get_addr64()
)
self.nodes[DUT_LEADER].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -77,7 +81,8 @@ class Cert_5_5_1_LeaderReboot(unittest.TestCase):
self.simulator.go(5)
self.assertEqual(self.nodes[DUT_ROUTER1].get_state(), 'router')
# 2 DUT_LEADER, DUT_ROUTER1: Verify both DUT_LEADER and DUT_ROUTER1 send MLE Advertisement message
# 2 DUT_LEADER, DUT_ROUTER1: Verify both DUT_LEADER and DUT_ROUTER1
# send MLE Advertisement message
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT)
command.check_mle_advertisement(msg)
@@ -87,10 +92,14 @@ class Cert_5_5_1_LeaderReboot(unittest.TestCase):
command.check_mle_advertisement(msg)
# Send a harness helper ping to the DUT
router1_rloc = self.nodes[DUT_ROUTER1].get_ip6_address(config.ADDRESS_TYPE.RLOC)
router1_rloc = self.nodes[DUT_ROUTER1].get_ip6_address(
config.ADDRESS_TYPE.RLOC
)
self.assertTrue(self.nodes[DUT_LEADER].ping(router1_rloc))
leader_rloc = self.nodes[DUT_LEADER].get_ip6_address(config.ADDRESS_TYPE.RLOC)
leader_rloc = self.nodes[DUT_LEADER].get_ip6_address(
config.ADDRESS_TYPE.RLOC
)
self.assertTrue(self.nodes[DUT_ROUTER1].ping(leader_rloc))
# 3 DUT_LEADER: Reset DUT_LEADER
@@ -107,7 +116,9 @@ class Cert_5_5_1_LeaderReboot(unittest.TestCase):
# Verify DUT_LEADER didn't send MLE Advertisement messages
leader_messages = self.simulator.get_messages_sent_by(DUT_LEADER)
msg = leader_messages.next_mle_message(mle.CommandType.ADVERTISEMENT, False)
msg = leader_messages.next_mle_message(
mle.CommandType.ADVERTISEMENT, False
)
self.assertTrue(msg is None)
self.nodes[DUT_LEADER].start()
@@ -122,30 +133,53 @@ class Cert_5_5_1_LeaderReboot(unittest.TestCase):
leader_messages_temp = copy.deepcopy(leader_messages)
msg = leader_messages.next_mle_message(mle.CommandType.LINK_REQUEST)
command.check_link_request(msg, tlv_request_address16 = command.CheckType.CONTAIN, \
tlv_request_route64 = command.CheckType.CONTAIN)
command.check_link_request(
msg,
tlv_request_address16=command.CheckType.CONTAIN,
tlv_request_route64=command.CheckType.CONTAIN,
)
# 5 DUT_ROUTER1: Verify DUT_ROUTER1 replied with Link Accept message
router1_messages = self.simulator.get_messages_sent_by(DUT_ROUTER1)
router1_messages_temp = copy.deepcopy(router1_messages)
msg = router1_messages.next_mle_message(mle.CommandType.LINK_ACCEPT)
if msg is not None:
command.check_link_accept(msg, self.nodes[DUT_LEADER], address16 = command.CheckType.CONTAIN, \
leader_data = command.CheckType.CONTAIN, route64 = command.CheckType.CONTAIN)
command.check_link_accept(
msg,
self.nodes[DUT_LEADER],
address16=command.CheckType.CONTAIN,
leader_data=command.CheckType.CONTAIN,
route64=command.CheckType.CONTAIN,
)
else:
msg = router1_messages_temp.next_mle_message(mle.CommandType.LINK_ACCEPT_AND_REQUEST)
self.assertTrue(msg is not None)
command.check_link_accept(msg, self.nodes[DUT_LEADER], address16 = command.CheckType.CONTAIN, \
leader_data = command.CheckType.CONTAIN, route64 = command.CheckType.CONTAIN, \
challenge = command.CheckType.CONTAIN)
msg = router1_messages_temp.next_mle_message(
mle.CommandType.LINK_ACCEPT_AND_REQUEST
)
self.assertTrue(msg is not None)
command.check_link_accept(
msg,
self.nodes[DUT_LEADER],
address16=command.CheckType.CONTAIN,
leader_data=command.CheckType.CONTAIN,
route64=command.CheckType.CONTAIN,
challenge=command.CheckType.CONTAIN,
)
# 6 DUT_LEADER: Verify DUT_LEADER didn't send a Parent Request message
msg = leader_messages_temp.next_mle_message(mle.CommandType.PARENT_REQUEST, False)
msg = leader_messages_temp.next_mle_message(
mle.CommandType.PARENT_REQUEST, False
)
self.assertTrue(msg is None)
# 7 ALL: Verify connectivity by sending an ICMPv6 Echo Request from DUT_LEADER to DUT_ROUTER1 link local address
router1_link_local_address = self.nodes[DUT_ROUTER1].get_ip6_address(config.ADDRESS_TYPE.LINK_LOCAL)
self.assertTrue(self.nodes[DUT_LEADER].ping(router1_link_local_address))
# 7 ALL: Verify connectivity by sending an ICMPv6 Echo Request from
# DUT_LEADER to DUT_ROUTER1 link local address
router1_link_local_address = self.nodes[DUT_ROUTER1].get_ip6_address(
config.ADDRESS_TYPE.LINK_LOCAL
)
self.assertTrue(
self.nodes[DUT_LEADER].ping(router1_link_local_address)
)
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,12 +36,13 @@ LEADER = 1
ROUTER = 2
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):
for i in range(1, 4):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -64,12 +64,12 @@ class Cert_5_5_2_LeaderReboot(unittest.TestCase):
def _setUpLeader(self):
self.nodes[LEADER].add_whitelist(self.nodes[ROUTER].get_addr64())
self.nodes[LEADER].enable_whitelist()
self.nodes[LEADER].set_router_selection_jitter(1)
self.nodes[LEADER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -98,5 +98,6 @@ class Cert_5_5_2_LeaderReboot(unittest.TestCase):
for addr in addrs:
self.assertTrue(self.nodes[ROUTER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -42,12 +41,13 @@ ED3 = 6
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):
for i in range(1, 7):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -91,9 +91,9 @@ class Cert_5_5_3_SplitMergeChildren(unittest.TestCase):
self.nodes[LEADER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -142,5 +142,6 @@ class Cert_5_5_3_SplitMergeChildren(unittest.TestCase):
if addr[0:4] != 'fe80':
self.assertTrue(self.nodes[ROUTER2].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -39,12 +38,13 @@ ROUTER2 = 3
ROUTER3 = 4
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):
for i in range(1, 6):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -81,12 +81,12 @@ class Cert_5_5_4_SplitMergeRouters(unittest.TestCase):
self.nodes[LEADER].add_whitelist(self.nodes[ROUTER1].get_addr64())
self.nodes[LEADER].add_whitelist(self.nodes[ROUTER2].get_addr64())
self.nodes[LEADER].enable_whitelist()
self.nodes[LEADER].set_router_selection_jitter(1)
self.nodes[LEADER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -124,5 +124,6 @@ class Cert_5_5_4_SplitMergeRouters(unittest.TestCase):
if addr[0:4] != 'fe80':
self.assertTrue(self.nodes[ROUTER3].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,21 +39,22 @@ ROUTER3 = 4
ROUTER15 = 16
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):
for i in range(1, 18):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
self.nodes[LEADER].set_mode('rsdn')
for i in range(ROUTER2, ROUTER15+1):
for i in range(ROUTER2, ROUTER15 + 1):
self.nodes[LEADER].add_whitelist(self.nodes[i].get_addr64())
self.nodes[LEADER].enable_whitelist()
for i in range(ROUTER2, ROUTER15+1):
for i in range(ROUTER2, ROUTER15 + 1):
self.nodes[i].set_panid(0xface)
self.nodes[i].set_mode('rsdn')
self.nodes[i].add_whitelist(self.nodes[LEADER].get_addr64())
@@ -76,9 +76,9 @@ class Cert_5_5_5_SplitMergeREED(unittest.TestCase):
self.nodes[REED1].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -86,7 +86,7 @@ class Cert_5_5_5_SplitMergeREED(unittest.TestCase):
self.simulator.go(5)
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
for i in range(ROUTER2, ROUTER15+1):
for i in range(ROUTER2, ROUTER15 + 1):
self.nodes[i].start()
self.simulator.go(5)
self.assertEqual(self.nodes[i].get_state(), 'router')
@@ -113,5 +113,6 @@ class Cert_5_5_5_SplitMergeREED(unittest.TestCase):
if addr[0:4] != 'fe80':
self.assertTrue(self.nodes[ROUTER1].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -38,12 +37,13 @@ ROUTER1 = 2
ROUTER2 = 3
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[LEADER1].set_panid(0xface)
@@ -76,9 +76,9 @@ class Cert_5_5_7_SplitMergeThreeWay(unittest.TestCase):
self.nodes[LEADER1].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -120,5 +120,6 @@ class Cert_5_5_7_SplitMergeThreeWay(unittest.TestCase):
if addr[0:4] != 'fe80':
self.assertTrue(self.nodes[ROUTER1].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -39,12 +38,13 @@ ROUTER2 = 3
ROUTER3 = 4
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):
for i in range(1, 6):
self.nodes[i] = node.Node(i, (i == ED1), simulator=self.simulator)
self.nodes[LEADER1].set_panid(0xface)
@@ -85,9 +85,9 @@ class Cert_5_5_8_SplitRoutersLostLeader(unittest.TestCase):
self.nodes[ROUTER3].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
def test(self):
self.nodes[LEADER1].start()
@@ -119,7 +119,7 @@ class Cert_5_5_8_SplitRoutersLostLeader(unittest.TestCase):
self._setUpRouter3()
self.simulator.go(140)
self.nodes[ROUTER3].start()
self.nodes[ROUTER3].start()
self.simulator.go(60)
addrs = self.nodes[ED1].get_addrs()
@@ -127,5 +127,6 @@ class Cert_5_5_8_SplitRoutersLostLeader(unittest.TestCase):
if addr[0:4] != 'fe80':
self.assertTrue(self.nodes[LEADER1].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,12 +39,13 @@ SED1 = 4
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -73,9 +73,9 @@ class Cert_5_6_1_NetworkDataLeaderAsBr(unittest.TestCase):
self.nodes[SED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -119,5 +119,6 @@ class Cert_5_6_1_NetworkDataLeaderAsBr(unittest.TestCase):
if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,12 +39,13 @@ SED1 = 4
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -73,9 +73,9 @@ class Cert_5_6_2_NetworkDataRouterAsBr(unittest.TestCase):
self.nodes[SED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -117,5 +117,6 @@ class Cert_5_6_2_NetworkDataRouterAsBr(unittest.TestCase):
if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,12 +39,13 @@ SED1 = 4
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -73,9 +73,9 @@ class Cert_5_6_3_NetworkDataRegisterAfterAttachLeader(unittest.TestCase):
self.nodes[SED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -119,5 +119,6 @@ class Cert_5_6_3_NetworkDataRegisterAfterAttachLeader(unittest.TestCase):
if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,12 +39,13 @@ SED1 = 4
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -73,9 +73,9 @@ class Cert_5_6_4_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
self.nodes[SED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -119,5 +119,6 @@ class Cert_5_6_4_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,12 +39,13 @@ SED1 = 4
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -73,9 +73,9 @@ class Cert_5_6_5_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
self.nodes[SED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -143,5 +143,6 @@ class Cert_5_6_5_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
if addr[0:3] == '200':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,12 +39,13 @@ SED1 = 4
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -73,9 +73,9 @@ class Cert_5_6_6_NetworkDataExpiration(unittest.TestCase):
self.nodes[SED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -165,5 +165,6 @@ class Cert_5_6_6_NetworkDataExpiration(unittest.TestCase):
self.nodes[ROUTER].stop()
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,12 +36,13 @@ LEADER = 1
ROUTER = 2
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):
for i in range(1, 4):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -64,9 +64,9 @@ class Cert_5_6_7_NetworkDataRequestREED(unittest.TestCase):
self.nodes[REED].set_router_upgrade_threshold(0)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -104,5 +104,6 @@ class Cert_5_6_7_NetworkDataRequestREED(unittest.TestCase):
if addr[0:10] == '2001:2:0:3':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,12 +36,13 @@ LEADER = 1
ROUTER = 2
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):
for i in range(1, 4):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -64,9 +64,9 @@ class Cert_5_6_8_ContextManagement(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -138,5 +138,6 @@ class Cert_5_6_8_ContextManagement(unittest.TestCase):
if addr[0:3] == '200':
self.assertTrue(self.nodes[ED].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -41,12 +40,13 @@ SED = 5
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):
for i in range(1, 6):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -81,9 +81,9 @@ class Cert_5_6_9_NetworkDataForwarding(unittest.TestCase):
self.nodes[SED].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -139,5 +139,6 @@ class Cert_5_6_9_NetworkDataForwarding(unittest.TestCase):
self.assertFalse(self.nodes[SED].ping('2007::1'))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,12 +35,13 @@ import node
LEADER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -57,9 +57,9 @@ class Cert_5_8_1_KeySynchronization(unittest.TestCase):
self.nodes[ED].set_key_switch_guardtime(0)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -84,5 +84,6 @@ class Cert_5_8_1_KeySynchronization(unittest.TestCase):
if 'ff:fe00' not in addr:
self.assertFalse(self.nodes[ED].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,12 +35,13 @@ import node
LEADER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -58,9 +58,9 @@ class Cert_5_8_2_KeyIncrement(unittest.TestCase):
self.nodes[ROUTER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -83,5 +83,6 @@ class Cert_5_8_2_KeyIncrement(unittest.TestCase):
for addr in addrs:
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,12 +35,13 @@ import node
LEADER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -59,9 +59,9 @@ class Cert_5_8_3_KeyIncrementRollOver(unittest.TestCase):
self.nodes[ROUTER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -84,5 +84,6 @@ class Cert_5_8_3_KeyIncrementRollOver(unittest.TestCase):
for addr in addrs:
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,12 +36,13 @@ import node
LEADER = 1
ED = 2
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -56,9 +56,9 @@ class Cert_6_1_1_RouterAttach(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -108,7 +108,9 @@ class Cert_6_1_1_RouterAttach(unittest.TestCase):
msg.assertMleMessageContainsOptionalTlv(mle.MleFrameCounter)
# 5 - leader
msg = leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
msg = leader_messages.next_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
)
msg.assertSentToNode(self.nodes[ED])
# 6 - leader
@@ -117,5 +119,6 @@ class Cert_6_1_1_RouterAttach(unittest.TestCase):
if addr[0:4] != 'fe80':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -41,12 +41,13 @@ LEADER = 1
REED = 2
MED = 3
class Cert_6_1_2_REEDAttach_MED(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
self.nodes = {}
for i in range(1,4):
for i in range(1, 4):
self.nodes[i] = node.Node(i, (i == MED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -68,9 +69,9 @@ class Cert_6_1_2_REEDAttach_MED(unittest.TestCase):
self.nodes[MED].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -98,18 +99,31 @@ class Cert_6_1_2_REEDAttach_MED(unittest.TestCase):
check_parent_request(msg, is_first_request=False)
# Step 6 - DUT sends Child ID Request
msg = med_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[REED])
check_child_id_request(msg, address_registration=CheckType.CONTAIN,
tlv_request=CheckType.CONTAIN, mle_frame_counter=CheckType.OPTIONAL,
route64=CheckType.OPTIONAL)
msg = med_messages.next_mle_message(
mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[REED]
)
check_child_id_request(
msg,
address_registration=CheckType.CONTAIN,
tlv_request=CheckType.CONTAIN,
mle_frame_counter=CheckType.OPTIONAL,
route64=CheckType.OPTIONAL,
)
# Wait additional DEFAULT_CHILD_TIMEOUT to ensure the keep-alive message (child update request from MED) happens.
# Wait additional DEFAULT_CHILD_TIMEOUT to ensure the keep-alive
# message (child update request from MED) happens.
self.simulator.go(config.DEFAULT_CHILD_TIMEOUT)
med_messages = self.simulator.get_messages_sent_by(MED)
# Step 8 - DUT sends Child Update messages
msg = med_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST)
check_child_update_request_from_child(msg, source_address=CheckType.CONTAIN, leader_data=CheckType.CONTAIN)
msg = med_messages.next_mle_message(
mle.CommandType.CHILD_UPDATE_REQUEST
)
check_child_update_request_from_child(
msg,
source_address=CheckType.CONTAIN,
leader_data=CheckType.CONTAIN,
)
# Step 10 - Leader sends ICMPv6 echo request, to DUT link local address
med_addrs = self.nodes[MED].get_addrs()
@@ -117,5 +131,6 @@ class Cert_6_1_2_REEDAttach_MED(unittest.TestCase):
if addr[0:4] == 'fe80':
self.assertTrue(self.nodes[REED].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -42,12 +42,13 @@ LEADER = 1
REED = 2
SED = 3
class Cert_6_1_2_REEDAttach_SED(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
self.nodes = {}
for i in range(1,4):
for i in range(1, 4):
self.nodes[i] = node.Node(i, (i == SED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -69,9 +70,9 @@ class Cert_6_1_2_REEDAttach_SED(unittest.TestCase):
self.nodes[SED].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -84,7 +85,7 @@ class Cert_6_1_2_REEDAttach_SED(unittest.TestCase):
self.assertEqual(self.nodes[REED].get_state(), 'child')
self.nodes[SED].start()
self.simulator.go(5)
self.simulator.go(5)
self.assertEqual(self.nodes[SED].get_state(), 'child')
self.assertEqual(self.nodes[REED].get_state(), 'router')
@@ -99,10 +100,16 @@ class Cert_6_1_2_REEDAttach_SED(unittest.TestCase):
check_parent_request(msg, is_first_request=False)
# Step 6 - DUT sends Child ID Request
msg = sed_messages.next_mle_message(mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[REED])
check_child_id_request(msg, address_registration=CheckType.CONTAIN,
tlv_request=CheckType.CONTAIN, mle_frame_counter=CheckType.OPTIONAL,
route64=CheckType.OPTIONAL)
msg = sed_messages.next_mle_message(
mle.CommandType.CHILD_ID_REQUEST, sent_to_node=self.nodes[REED]
)
check_child_id_request(
msg,
address_registration=CheckType.CONTAIN,
tlv_request=CheckType.CONTAIN,
mle_frame_counter=CheckType.OPTIONAL,
route64=CheckType.OPTIONAL,
)
# Wait DEFAULT_CHILD_TIMEOUT seconds,
# ensure SED has received the CHILD_ID_RESPONSE,
@@ -112,9 +119,14 @@ class Cert_6_1_2_REEDAttach_SED(unittest.TestCase):
# Step 11 - SED sends periodic 802.15.4 Data Request messages
msg = sed_messages.next_message()
self.assertEqual(False, msg.isMacAddressTypeLong()) # Extra check, keep-alive messages are of short types of mac address
self.assertEqual(
False, msg.isMacAddressTypeLong()
) # Extra check, keep-alive messages are of short types of mac address
self.assertEqual(msg.type, message.MessageType.COMMAND)
self.assertEqual(msg.mac_header.command_type, mac802154.MacHeader.CommandIdentifier.DATA_REQUEST)
self.assertEqual(
msg.mac_header.command_type,
mac802154.MacHeader.CommandIdentifier.DATA_REQUEST,
)
# Step 12 - REED sends ICMPv6 echo request, to DUT link local address
sed_addrs = self.nodes[SED].get_addrs()
@@ -122,5 +134,6 @@ class Cert_6_1_2_REEDAttach_SED(unittest.TestCase):
if addr[0:4] == 'fe80':
self.assertTrue(self.nodes[REED].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -39,12 +38,13 @@ ROUTER2 = 3
ROUTER3 = 4
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):
for i in range(1, 6):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -83,9 +83,9 @@ class Cert_6_1_3_RouterAttachConnectivity(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -111,5 +111,6 @@ class Cert_6_1_3_RouterAttachConnectivity(unittest.TestCase):
for addr in addrs:
self.assertTrue(self.nodes[ROUTER3].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -39,12 +38,13 @@ REED0 = 3
REED1 = 4
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):
for i in range(1, 6):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -83,9 +83,9 @@ class Cert_6_1_4_REEDAttachConnectivity(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -112,5 +112,6 @@ class Cert_6_1_4_REEDAttachConnectivity(unittest.TestCase):
self.assertEqual(self.nodes[ED].get_state(), 'child')
self.assertEqual(self.nodes[REED1].get_state(), 'router')
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -38,12 +37,13 @@ ROUTER1 = 2
ROUTER2 = 3
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -62,7 +62,9 @@ class Cert_6_1_5_RouterAttachLinkQuality(unittest.TestCase):
self.nodes[ROUTER2].set_panid(0xface)
self.nodes[ROUTER2].set_mode('rsdn')
self.nodes[ROUTER2].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER2].add_whitelist(self.nodes[ED].get_addr64(), rssi=-85)
self.nodes[ROUTER2].add_whitelist(
self.nodes[ED].get_addr64(), rssi=-85
)
self.nodes[ROUTER2].enable_whitelist()
self.nodes[ROUTER2].set_router_selection_jitter(1)
@@ -73,9 +75,9 @@ class Cert_6_1_5_RouterAttachLinkQuality(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -95,5 +97,6 @@ class Cert_6_1_5_RouterAttachLinkQuality(unittest.TestCase):
self.simulator.go(5)
self.assertEqual(self.nodes[ED].get_state(), 'child')
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -39,12 +38,13 @@ REED = 2
ROUTER2 = 3
ED = 4
class Cert_6_1_6_REEDAttachLinkQuality_ED(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
self.nodes = {}
for i in range(1,5):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -63,7 +63,9 @@ class Cert_6_1_6_REEDAttachLinkQuality_ED(unittest.TestCase):
self.nodes[ROUTER2].set_panid(0xface)
self.nodes[ROUTER2].set_mode('rsdn')
self.nodes[ROUTER2].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER2].add_whitelist(self.nodes[ED].get_addr64(), rssi=-85)
self.nodes[ROUTER2].add_whitelist(
self.nodes[ED].get_addr64(), rssi=-85
)
self.nodes[ROUTER2].enable_whitelist()
self.nodes[ROUTER2].set_router_selection_jitter(1)
@@ -74,9 +76,9 @@ class Cert_6_1_6_REEDAttachLinkQuality_ED(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -138,7 +140,9 @@ class Cert_6_1_6_REEDAttachLinkQuality_ED(unittest.TestCase):
self.assertEqual(0, scan_mask_tlv.end_device)
# 4 - Router2
msg = router2_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router2_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[ED])
# 5 - ED
@@ -155,7 +159,9 @@ class Cert_6_1_6_REEDAttachLinkQuality_ED(unittest.TestCase):
self.assertEqual(1, scan_mask_tlv.end_device)
# 6 - REED
msg = router2_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router2_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[ED])
msg = reed_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
@@ -176,5 +182,6 @@ class Cert_6_1_6_REEDAttachLinkQuality_ED(unittest.TestCase):
msg = reed_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
msg.assertSentToNode(self.nodes[ED])
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -39,12 +38,13 @@ REED = 2
ROUTER2 = 3
SED = 4
class Cert_6_1_6_REEDAttachLinkQuality_SED(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
self.nodes = {}
for i in range(1,5):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i == SED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -63,7 +63,9 @@ class Cert_6_1_6_REEDAttachLinkQuality_SED(unittest.TestCase):
self.nodes[ROUTER2].set_panid(0xface)
self.nodes[ROUTER2].set_mode('rsdn')
self.nodes[ROUTER2].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER2].add_whitelist(self.nodes[SED].get_addr64(), rssi=-85)
self.nodes[ROUTER2].add_whitelist(
self.nodes[SED].get_addr64(), rssi=-85
)
self.nodes[ROUTER2].enable_whitelist()
self.nodes[ROUTER2].set_router_selection_jitter(1)
@@ -75,9 +77,9 @@ class Cert_6_1_6_REEDAttachLinkQuality_SED(unittest.TestCase):
self.nodes[SED].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -139,7 +141,9 @@ class Cert_6_1_6_REEDAttachLinkQuality_SED(unittest.TestCase):
self.assertEqual(0, scan_mask_tlv.end_device)
# 4 - Router2
msg = router2_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router2_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[SED])
# 5 - SED
@@ -156,7 +160,9 @@ class Cert_6_1_6_REEDAttachLinkQuality_SED(unittest.TestCase):
self.assertEqual(1, scan_mask_tlv.end_device)
# 6 - REED
msg = router2_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
msg = router2_messages.next_mle_message(
mle.CommandType.PARENT_RESPONSE
)
msg.assertSentToNode(self.nodes[SED])
msg = reed_messages.next_mle_message(mle.CommandType.PARENT_RESPONSE)
@@ -177,5 +183,6 @@ class Cert_6_1_6_REEDAttachLinkQuality_SED(unittest.TestCase):
msg = reed_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
msg.assertSentToNode(self.nodes[SED])
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -39,12 +38,13 @@ ED = 3
ROUTER2 = 4
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):
for i in range(1, 6):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -87,9 +87,9 @@ class Cert_6_1_7_EDSynchronization(unittest.TestCase):
self.nodes[ROUTER3].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -113,5 +113,6 @@ class Cert_6_1_7_EDSynchronization(unittest.TestCase):
self.simulator.go(5)
self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,12 +36,13 @@ LEADER = 1
ROUTER1 = 2
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):
for i in range(1, 4):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -63,9 +63,9 @@ class Cert_6_2_1_NewPartition(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -90,5 +90,6 @@ class Cert_6_2_1_NewPartition(unittest.TestCase):
for addr in addrs:
self.assertTrue(self.nodes[ROUTER1].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -38,12 +37,13 @@ ROUTER1 = 2
ROUTER2 = 3
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -74,9 +74,9 @@ class Cert_6_2_2_NewPartition(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -106,5 +106,6 @@ class Cert_6_2_2_NewPartition(unittest.TestCase):
for addr in addrs:
self.assertTrue(self.nodes[ROUTER1].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,12 +36,13 @@ LEADER = 1
ROUTER = 2
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):
for i in range(1, 4):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -64,9 +64,9 @@ class Cert_6_3_1_OrphanReattach(unittest.TestCase):
self.nodes[ED].set_timeout(10)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -93,5 +93,6 @@ class Cert_6_3_1_OrphanReattach(unittest.TestCase):
for addr in addrs:
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,12 +35,13 @@ import node
LEADER = 1
ED = 2
class Cert_6_3_2_NetworkDataUpdate(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
self.nodes = {}
for i in range(1,3):
for i in range(1, 3):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -56,9 +56,9 @@ class Cert_6_3_2_NetworkDataUpdate(unittest.TestCase):
self.nodes[ED].set_timeout(10)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -106,5 +106,6 @@ class Cert_6_3_2_NetworkDataUpdate(unittest.TestCase):
if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,12 +35,13 @@ import node
LEADER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -55,9 +55,9 @@ class Cert_6_4_1_LinkLocal(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -78,5 +78,6 @@ class Cert_6_4_1_LinkLocal(unittest.TestCase):
self.assertTrue(self.nodes[LEADER].ping('ff02::1', size=256))
self.assertTrue(self.nodes[LEADER].ping('ff02::1'))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,12 +36,13 @@ LEADER = 1
ROUTER = 2
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -63,9 +63,9 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -87,11 +87,22 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
self.assertTrue(self.nodes[LEADER].ping(addr, size=256))
self.assertTrue(self.nodes[LEADER].ping(addr))
self.assertTrue(self.nodes[LEADER].ping('ff03::1', num_responses=2, size=256))
self.assertTrue(
self.nodes[LEADER].ping('ff03::1', num_responses=2, size=256)
)
self.assertTrue(self.nodes[LEADER].ping('ff03::1', num_responses=2))
self.assertTrue(self.nodes[LEADER].ping('ff33:0040:fdde:ad00:beef:0:0:1', num_responses=2, size=256))
self.assertTrue(self.nodes[LEADER].ping('ff33:0040:fdde:ad00:beef:0:0:1', num_responses=2))
self.assertTrue(
self.nodes[LEADER].ping(
'ff33:0040:fdde:ad00:beef:0:0:1', num_responses=2, size=256
)
)
self.assertTrue(
self.nodes[LEADER].ping(
'ff33:0040:fdde:ad00:beef:0:0:1', num_responses=2
)
)
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,12 +35,13 @@ import node
LEADER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -59,9 +59,9 @@ class Cert_6_5_1_ChildResetSynchronize(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -95,5 +95,6 @@ class Cert_6_5_1_ChildResetSynchronize(unittest.TestCase):
if addr[0:4] == 'fe80':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,12 +35,13 @@ import node
LEADER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -58,9 +58,9 @@ class Cert_6_5_2_ChildResetReattach(unittest.TestCase):
self.nodes[ED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -90,5 +90,6 @@ class Cert_6_5_2_ChildResetReattach(unittest.TestCase):
if addr[0:4] == 'fe80':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,12 +35,13 @@ import node
LEADER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -57,9 +57,9 @@ class Cert_6_6_1_KeyIncrement(unittest.TestCase):
self.nodes[ED].set_key_switch_guardtime(0)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -82,5 +82,6 @@ class Cert_6_6_1_KeyIncrement(unittest.TestCase):
for addr in addrs:
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,12 +35,13 @@ import node
LEADER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, (i == ED), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -58,9 +58,9 @@ class Cert_6_6_2_KeyIncrement1(unittest.TestCase):
self.nodes[ED].set_key_switch_guardtime(0)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -83,5 +83,6 @@ class Cert_6_6_2_KeyIncrement1(unittest.TestCase):
for addr in addrs:
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,18 +27,19 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import functools
import time
import unittest
from command import check_child_id_response, check_child_update_response, check_child_update_request_from_child, check_data_response
from command import (
check_child_id_response,
check_child_update_response,
check_child_update_request_from_child,
check_data_response,
)
from command import CheckType
from command import CommissioningDataCheck, NetworkDataCheck, PrefixesCheck, SinglePrefixCheck
from command import NetworkDataCheckType
from command import NetworkDataCheck, PrefixesCheck, SinglePrefixCheck
import config
import mle
import network_data
import node
LEADER = 1
@@ -48,12 +49,13 @@ MED1 = 4
MTDS = [SED1, MED1]
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -81,9 +83,9 @@ class Cert_7_1_1_BorderRouterAsLeader(unittest.TestCase):
self.nodes[MED1].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -134,49 +136,89 @@ class Cert_7_1_1_BorderRouterAsLeader(unittest.TestCase):
# Step 2 - DUT creates network data
msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE)
check_data_response(msg,
check_data_response(
msg,
network_data_check=NetworkDataCheck(
prefixes_check=PrefixesCheck(prefix_check_list=[ SinglePrefixCheck(prefix=b'2001000200000001'), SinglePrefixCheck(prefix=b'2001000200000002') ])
)
prefixes_check=PrefixesCheck(
prefix_check_list=[
SinglePrefixCheck(prefix=b'2001000200000001'),
SinglePrefixCheck(prefix=b'2001000200000002'),
]
)
),
)
# Step 4 - DUT sends a MLE Child ID Response to Router1
msg = leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
check_child_id_response(msg,
msg = leader_messages.next_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
)
check_child_id_response(
msg,
network_data_check=NetworkDataCheck(
prefixes_check=PrefixesCheck(prefix_cnt=2)
)
),
)
# Step 6 - DUT sends a MLE Child ID Response to SED1
msg = leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
check_child_id_response(msg,
msg = leader_messages.next_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
)
check_child_id_response(
msg,
network_data_check=NetworkDataCheck(
prefixes_check=PrefixesCheck(prefix_check_list=[ SinglePrefixCheck(border_router_16=0xFFFE) ])
)
prefixes_check=PrefixesCheck(
prefix_check_list=[
SinglePrefixCheck(border_router_16=0xfffe)
]
)
),
)
# For Step 10
msg_chd_upd_res_to_sed = leader_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_RESPONSE)
msg_chd_upd_res_to_sed = leader_messages.next_mle_message(
mle.CommandType.CHILD_UPDATE_RESPONSE
)
# Step 8 - DUT sends a MLE Child ID Response to MED1
msg = leader_messages.next_mle_message(mle.CommandType.CHILD_ID_RESPONSE)
check_child_id_response(msg,
msg = leader_messages.next_mle_message(
mle.CommandType.CHILD_ID_RESPONSE
)
check_child_id_response(
msg,
network_data_check=NetworkDataCheck(
prefixes_check=PrefixesCheck(prefix_cnt=2)
)
),
)
# Step 10 - DUT sends Child Update Response
msg_chd_upd_res_to_med = leader_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_RESPONSE)
msg = med1_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST)
check_child_update_request_from_child(msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1, 2])
msg_chd_upd_res_to_med = leader_messages.next_mle_message(
mle.CommandType.CHILD_UPDATE_RESPONSE
)
msg = med1_messages.next_mle_message(
mle.CommandType.CHILD_UPDATE_REQUEST
)
check_child_update_request_from_child(
msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1, 2]
)
check_child_update_response(msg_chd_upd_res_to_med, address_registration=CheckType.CONTAIN, CIDs=[1, 2])
check_child_update_response(
msg_chd_upd_res_to_med,
address_registration=CheckType.CONTAIN,
CIDs=[1, 2],
)
msg = sed1_messages.next_mle_message(
mle.CommandType.CHILD_UPDATE_REQUEST
)
check_child_update_request_from_child(
msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1]
)
check_child_update_response(
msg_chd_upd_res_to_sed,
address_registration=CheckType.CONTAIN,
CIDs=[1],
)
msg = sed1_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST)
check_child_update_request_from_child(msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1])
check_child_update_response(msg_chd_upd_res_to_sed, address_registration=CheckType.CONTAIN, CIDs=[1])
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,12 +39,13 @@ SED2 = 4
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -73,9 +73,9 @@ class Cert_7_1_2_BorderRouterAsRouter(unittest.TestCase):
self.nodes[SED2].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -117,5 +117,6 @@ class Cert_7_1_2_BorderRouterAsRouter(unittest.TestCase):
if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,17 +27,19 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
from command import check_child_update_request_from_child, check_child_update_request_from_parent, check_child_update_response, check_data_response
from command import (
check_child_update_request_from_child,
check_child_update_request_from_parent,
check_child_update_response,
check_data_response,
)
from command import CheckType
from command import NetworkDataCheck, PrefixesCheck, SinglePrefixCheck
from command import NetworkDataCheckType
import config
import mle
import network_data
import node
LEADER = 1
@@ -47,12 +49,13 @@ MED1 = 4
MTDS = [SED1, MED1]
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -80,9 +83,9 @@ class Cert_7_1_3_BorderRouterAsLeader(unittest.TestCase):
self.nodes[MED1].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -138,40 +141,74 @@ class Cert_7_1_3_BorderRouterAsLeader(unittest.TestCase):
# 3 - Leader
msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE)
check_data_response(msg,
check_data_response(
msg,
network_data_check=NetworkDataCheck(
prefixes_check=PrefixesCheck(prefix_check_list=[ SinglePrefixCheck(b'2001000200000001'), SinglePrefixCheck(b'2001000200000002')])
)
prefixes_check=PrefixesCheck(
prefix_check_list=[
SinglePrefixCheck(b'2001000200000001'),
SinglePrefixCheck(b'2001000200000002'),
]
)
),
)
# 4 - N/A
# Get addresses registered by MED1
msg = med1_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST)
check_child_update_request_from_child(msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1, 2])
msg = med1_messages.next_mle_message(
mle.CommandType.CHILD_UPDATE_REQUEST
)
check_child_update_request_from_child(
msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1, 2]
)
# 5 - Leader
# Make a copy of leader's messages to ensure that we don't miss messages to SED1
# Make a copy of leader's messages to ensure that we don't miss
# messages to SED1
leader_messages_copy = leader_messages.clone()
msg = leader_messages_copy.next_mle_message(mle.CommandType.CHILD_UPDATE_RESPONSE, sent_to_node=self.nodes[MED1])
check_child_update_response(msg, address_registration=CheckType.CONTAIN, CIDs=[1, 2])
msg = leader_messages_copy.next_mle_message(
mle.CommandType.CHILD_UPDATE_RESPONSE,
sent_to_node=self.nodes[MED1],
)
check_child_update_response(
msg, address_registration=CheckType.CONTAIN, CIDs=[1, 2]
)
# 6A & 6B - Leader
if config.LEADER_NOTIFY_SED_BY_CHILD_UPDATE_REQUEST:
msg = leader_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST, sent_to_node=self.nodes[SED1])
check_child_update_request_from_parent(msg,
leader_data=CheckType.CONTAIN, network_data=CheckType.CONTAIN, active_timestamp=CheckType.CONTAIN)
msg = leader_messages.next_mle_message(
mle.CommandType.CHILD_UPDATE_REQUEST,
sent_to_node=self.nodes[SED1],
)
check_child_update_request_from_parent(
msg,
leader_data=CheckType.CONTAIN,
network_data=CheckType.CONTAIN,
active_timestamp=CheckType.CONTAIN,
)
else:
msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE, sent_to_node=self.nodes[SED1])
check_data_response(msg, network_data_check=command.NetworkDataCheck())
msg = leader_messages.next_mle_message(
mle.CommandType.DATA_RESPONSE, sent_to_node=self.nodes[SED1]
)
check_data_response(msg, network_data_check=NetworkDataCheck())
# 7 - N/A
# Get addresses registered by SED1
msg = sed1_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_REQUEST)
check_child_update_request_from_child(msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1])
msg = sed1_messages.next_mle_message(
mle.CommandType.CHILD_UPDATE_REQUEST
)
check_child_update_request_from_child(
msg, address_registration=CheckType.CONTAIN, CIDs=[0, 1]
)
# 8 - Leader
msg = leader_messages.next_mle_message(mle.CommandType.CHILD_UPDATE_RESPONSE, sent_to_node=self.nodes[SED1])
check_child_update_response(msg, address_registration=CheckType.CONTAIN, CIDs=[1])
msg = leader_messages.next_mle_message(
mle.CommandType.CHILD_UPDATE_RESPONSE,
sent_to_node=self.nodes[SED1],
)
check_child_update_response(
msg, address_registration=CheckType.CONTAIN, CIDs=[1]
)
if __name__ == '__main__':
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,12 +39,13 @@ SED2 = 4
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -73,9 +73,9 @@ class Cert_7_1_4_BorderRouterAsRouter(unittest.TestCase):
self.nodes[SED2].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -118,5 +118,6 @@ class Cert_7_1_4_BorderRouterAsRouter(unittest.TestCase):
if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2':
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -40,12 +39,13 @@ SED2 = 4
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i in MTDS), simulator=self.simulator)
self.nodes[LEADER].set_panid(0xface)
@@ -73,9 +73,9 @@ class Cert_7_1_5_BorderRouterAsRouter(unittest.TestCase):
self.nodes[SED2].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -127,7 +127,11 @@ class Cert_7_1_5_BorderRouterAsRouter(unittest.TestCase):
self.assertTrue(any('2001:2:0:2' in addr[0:10] for addr in addrs))
self.assertTrue(any('2001:2:0:3' in addr[0:10] for addr in addrs))
for addr in addrs:
if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2' or addr[0:10] == '2001:2:0:3':
if (
addr[0:10] == '2001:2:0:1'
or addr[0:10] == '2001:2:0:2'
or addr[0:10] == '2001:2:0:3'
):
self.assertTrue(self.nodes[LEADER].ping(addr))
addrs = self.nodes[SED2].get_addrs()
@@ -135,8 +139,13 @@ class Cert_7_1_5_BorderRouterAsRouter(unittest.TestCase):
self.assertFalse(any('2001:2:0:2' in addr[0:10] for addr in addrs))
self.assertTrue(any('2001:2:0:3' in addr[0:10] for addr in addrs))
for addr in addrs:
if addr[0:10] == '2001:2:0:1' or addr[0:10] == '2001:2:0:2' or addr[0:10] == '2001:2:0:3':
if (
addr[0:10] == '2001:2:0:1'
or addr[0:10] == '2001:2:0:2'
or addr[0:10] == '2001:2:0:3'
):
self.assertTrue(self.nodes[LEADER].ping(addr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import command
@@ -41,26 +40,29 @@ from command import CheckType
COMMISSIONER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[COMMISSIONER].set_panid(0xface)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].set_masterkey('00112233445566778899aabbccddeeff')
self.nodes[COMMISSIONER].set_masterkey(
'00112233445566778899aabbccddeeff'
)
self.nodes[JOINER].set_mode('rsdn')
self.nodes[JOINER].set_masterkey('deadbeefdeadbeefdeadbeefdeadbeef')
self.nodes[JOINER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -70,67 +72,109 @@ class Cert_8_1_01_Commissioning(unittest.TestCase):
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
self.nodes[COMMISSIONER].commissioner_start()
self.simulator.go(3)
self.nodes[COMMISSIONER].commissioner_add_joiner(self.nodes[JOINER].get_eui64(), 'OPENTHREAD')
self.nodes[COMMISSIONER].commissioner_add_joiner(
self.nodes[JOINER].get_eui64(), 'OPENTHREAD'
)
self.nodes[JOINER].interface_up()
self.nodes[JOINER].joiner_start('OPENTHREAD')
self.simulator.go(10)
self.simulator.read_cert_messages_in_commissioning_log([COMMISSIONER,JOINER])
self.assertEqual(self.nodes[JOINER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
self.simulator.read_cert_messages_in_commissioning_log(
[COMMISSIONER, JOINER]
)
self.assertEqual(
self.nodes[JOINER].get_masterkey(),
self.nodes[COMMISSIONER].get_masterkey(),
)
joiner_messages = self.simulator.get_messages_sent_by(JOINER)
commissioner_messages = self.simulator.get_messages_sent_by(COMMISSIONER)
commissioner_messages = self.simulator.get_messages_sent_by(
COMMISSIONER
)
# 2 - N/A
# 3 - Joiner_1
msg = joiner_messages.next_mle_message(mle.CommandType.DISCOVERY_REQUEST)
msg = joiner_messages.next_mle_message(
mle.CommandType.DISCOVERY_REQUEST
)
command.check_discovery_request(msg)
request_src_addr = msg.mac_header.src_address
# 4 - Commissioner
msg = commissioner_messages.next_mle_message(mle.CommandType.DISCOVERY_RESPONSE)
command.check_discovery_response(msg, request_src_addr, steering_data=CheckType.CONTAIN)
udp_port_set_by_commissioner = command.get_joiner_udp_port_in_discovery_response(msg)
msg = commissioner_messages.next_mle_message(
mle.CommandType.DISCOVERY_RESPONSE
)
command.check_discovery_response(
msg, request_src_addr, steering_data=CheckType.CONTAIN
)
udp_port_set_by_commissioner = command.get_joiner_udp_port_in_discovery_response(
msg)
# 5.2 - Joiner_1
msg = joiner_messages.next_dtls_message(dtls.ContentType.HANDSHAKE, dtls.HandshakeType.CLIENT_HELLO)
msg = joiner_messages.next_dtls_message(
dtls.ContentType.HANDSHAKE, dtls.HandshakeType.CLIENT_HELLO
)
self.assertEqual(msg.get_dst_udp_port(), udp_port_set_by_commissioner)
# 5.3 - Commissioner
msg = commissioner_messages.next_dtls_message(dtls.ContentType.HANDSHAKE, dtls.HandshakeType.HELLO_VERIFY_REQUEST)
msg = commissioner_messages.next_dtls_message(
dtls.ContentType.HANDSHAKE, dtls.HandshakeType.HELLO_VERIFY_REQUEST
)
commissioner_cookie = msg.dtls.body.cookie
# 5.4 - Joiner_1
msg = joiner_messages.next_dtls_message(dtls.ContentType.HANDSHAKE, dtls.HandshakeType.CLIENT_HELLO)
msg = joiner_messages.next_dtls_message(
dtls.ContentType.HANDSHAKE, dtls.HandshakeType.CLIENT_HELLO
)
self.assertEqual(commissioner_cookie, msg.dtls.body.cookie)
self.assertEqual(msg.get_dst_udp_port(), udp_port_set_by_commissioner)
# 5.5 - Commissioner
commissioner_messages.next_dtls_message(dtls.ContentType.HANDSHAKE, dtls.HandshakeType.SERVER_HELLO)
commissioner_messages.next_dtls_message(dtls.ContentType.HANDSHAKE, dtls.HandshakeType.SERVER_KEY_EXCHANGE)
commissioner_messages.next_dtls_message(dtls.ContentType.HANDSHAKE, dtls.HandshakeType.SERVER_HELLO_DONE)
commissioner_messages.next_dtls_message(
dtls.ContentType.HANDSHAKE, dtls.HandshakeType.SERVER_HELLO
)
commissioner_messages.next_dtls_message(
dtls.ContentType.HANDSHAKE, dtls.HandshakeType.SERVER_KEY_EXCHANGE
)
commissioner_messages.next_dtls_message(
dtls.ContentType.HANDSHAKE, dtls.HandshakeType.SERVER_HELLO_DONE
)
# 5.6 - Joiner_1
msg = joiner_messages.next_dtls_message(dtls.ContentType.HANDSHAKE, dtls.HandshakeType.CLIENT_KEY_EXCHANGE)
msg = joiner_messages.next_dtls_message(
dtls.ContentType.HANDSHAKE, dtls.HandshakeType.CLIENT_KEY_EXCHANGE
)
self.assertEqual(msg.get_dst_udp_port(), udp_port_set_by_commissioner)
msg = joiner_messages.next_dtls_message(dtls.ContentType.CHANGE_CIPHER_SPEC)
msg = joiner_messages.next_dtls_message(
dtls.ContentType.CHANGE_CIPHER_SPEC
)
self.assertEqual(msg.get_dst_udp_port(), udp_port_set_by_commissioner)
# TODO(wgtdkp): It's required to verify DTLS FINISHED message here. Currently not handled as it is encrypted.
# TODO(wgtdkp): It's required to verify DTLS FINISHED message here.
# Currently not handled as it is encrypted.
# 5.7 - Commissioner
commissioner_messages.next_dtls_message(dtls.ContentType.CHANGE_CIPHER_SPEC)
commissioner_messages.next_dtls_message(
dtls.ContentType.CHANGE_CIPHER_SPEC
)
# TODO(wgtdkp): It's required to verify DTLS FINISHED message here. Currently not handled as it is encrypted.
# TODO(wgtdkp): It's required to verify DTLS FINISHED message here.
# Currently not handled as it is encrypted.
# 5.8,9,10,11
# - Joiner_1
command.check_joiner_commissioning_messages(joiner_messages.commissioning_messages)
command.check_joiner_commissioning_messages(
joiner_messages.commissioning_messages
)
# - Commissioner
command.check_commissioner_commissioning_messages(commissioner_messages.commissioning_messages)
command.check_commissioner_commissioning_messages(
commissioner_messages.commissioning_messages
)
# As commissioner is also joiner router
command.check_joiner_router_commissioning_messages(commissioner_messages.commissioning_messages)
command.check_joiner_router_commissioning_messages(
commissioner_messages.commissioning_messages
)
self.nodes[JOINER].thread_start()
self.simulator.go(5)
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,26 +35,29 @@ import node
COMMISSIONER = 1
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):
for i in range(1, 3):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[COMMISSIONER].set_panid(0xface)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].set_masterkey('deadbeefdeadbeefdeadbeefdeadbeef')
self.nodes[COMMISSIONER].set_masterkey(
'deadbeefdeadbeefdeadbeefdeadbeef'
)
self.nodes[JOINER].set_mode('rsdn')
self.nodes[JOINER].set_masterkey('00112233445566778899aabbccddeeff')
self.nodes[JOINER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -65,12 +67,18 @@ class Cert_8_1_02_Commissioning(unittest.TestCase):
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
self.nodes[COMMISSIONER].commissioner_start()
self.simulator.go(3)
self.nodes[COMMISSIONER].commissioner_add_joiner(self.nodes[JOINER].get_eui64(), 'OPENTHREAD')
self.nodes[COMMISSIONER].commissioner_add_joiner(
self.nodes[JOINER].get_eui64(), 'OPENTHREAD'
)
self.nodes[JOINER].interface_up()
self.nodes[JOINER].joiner_start('DAERHTNEPO')
self.simulator.go(10)
self.assertNotEqual(self.nodes[JOINER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
self.assertNotEqual(
self.nodes[JOINER].get_masterkey(),
self.nodes[COMMISSIONER].get_masterkey(),
)
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,22 +36,27 @@ COMMISSIONER = 1
JOINER_ROUTER = 2
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):
for i in range(1, 4):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[COMMISSIONER].set_panid(0xface)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].set_masterkey('deadbeefdeadbeefdeadbeefdeadbeef')
self.nodes[COMMISSIONER].set_masterkey(
'deadbeefdeadbeefdeadbeefdeadbeef'
)
self.nodes[COMMISSIONER].enable_whitelist()
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[JOINER_ROUTER].set_mode('rsdn')
self.nodes[JOINER_ROUTER].set_masterkey('00112233445566778899aabbccddeeff')
self.nodes[JOINER_ROUTER].set_masterkey(
'00112233445566778899aabbccddeeff'
)
self.nodes[JOINER_ROUTER].enable_whitelist()
self.nodes[JOINER_ROUTER].set_router_selection_jitter(1)
@@ -62,9 +66,9 @@ class Cert_8_2_01_JoinerRouter(unittest.TestCase):
self.nodes[JOINER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -75,37 +79,60 @@ class Cert_8_2_01_JoinerRouter(unittest.TestCase):
self.nodes[COMMISSIONER].commissioner_start()
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')
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'
)
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[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')
self.simulator.go(10)
self.assertEqual(self.nodes[JOINER_ROUTER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
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[COMMISSIONER].add_whitelist(
self.nodes[JOINER_ROUTER].get_addr64()
)
self.nodes[JOINER_ROUTER].thread_start()
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())
self.nodes[JOINER].add_whitelist(self.nodes[JOINER_ROUTER].get_addr64())
self.nodes[JOINER_ROUTER].add_whitelist(
self.nodes[JOINER].get_joiner_id()
)
self.nodes[JOINER].add_whitelist(
self.nodes[JOINER_ROUTER].get_addr64()
)
self.nodes[JOINER].interface_up()
self.nodes[JOINER].joiner_start('OPENTHREAD2')
self.simulator.go(10)
self.assertEqual(self.nodes[JOINER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
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_ROUTER].add_whitelist(
self.nodes[JOINER].get_addr64()
)
self.nodes[JOINER].thread_start()
self.simulator.go(5)
self.assertEqual(self.nodes[JOINER].get_state(), 'router')
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -37,22 +36,27 @@ COMMISSIONER = 1
JOINER_ROUTER = 2
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):
for i in range(1, 4):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[COMMISSIONER].set_panid(0xface)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].set_masterkey('deadbeefdeadbeefdeadbeefdeadbeef')
self.nodes[COMMISSIONER].set_masterkey(
'deadbeefdeadbeefdeadbeefdeadbeef'
)
self.nodes[COMMISSIONER].enable_whitelist()
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[JOINER_ROUTER].set_mode('rsdn')
self.nodes[JOINER_ROUTER].set_masterkey('00112233445566778899aabbccddeeff')
self.nodes[JOINER_ROUTER].set_masterkey(
'00112233445566778899aabbccddeeff'
)
self.nodes[JOINER_ROUTER].enable_whitelist()
self.nodes[JOINER_ROUTER].set_router_selection_jitter(1)
@@ -62,9 +66,9 @@ class Cert_8_2_02_JoinerRouter(unittest.TestCase):
self.nodes[JOINER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -75,31 +79,52 @@ class Cert_8_2_02_JoinerRouter(unittest.TestCase):
self.nodes[COMMISSIONER].commissioner_start()
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')
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'
)
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[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')
self.simulator.go(10)
self.assertEqual(self.nodes[JOINER_ROUTER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
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[COMMISSIONER].add_whitelist(
self.nodes[JOINER_ROUTER].get_addr64()
)
self.nodes[JOINER_ROUTER].thread_start()
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())
self.nodes[JOINER].add_whitelist(self.nodes[JOINER_ROUTER].get_addr64())
self.nodes[JOINER_ROUTER].add_whitelist(
self.nodes[JOINER].get_joiner_id()
)
self.nodes[JOINER].add_whitelist(
self.nodes[JOINER_ROUTER].get_addr64()
)
self.nodes[JOINER].interface_up()
self.nodes[JOINER].joiner_start('2DAERHTNEPO')
self.simulator.go(10)
self.assertNotEqual(self.nodes[JOINER].get_masterkey(), self.nodes[COMMISSIONER].get_masterkey())
self.assertNotEqual(
self.nodes[JOINER].get_masterkey(),
self.nodes[COMMISSIONER].get_masterkey(),
)
if __name__ == '__main__':
unittest.main()
@@ -30,8 +30,6 @@
from ipaddress import ip_address
import unittest
from mle import NetworkData
from network_data import CommissioningData
import command
import config
import mesh_cop
@@ -43,12 +41,11 @@ LEADER = 2
class Cert_9_2_02_MGMTCommissionerSet(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
self.nodes = {}
for i in range(1,3):
for i in range(1, 3):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[COMMISSIONER].set_panid(0xface)
@@ -64,9 +61,9 @@ class Cert_9_2_02_MGMTCommissionerSet(unittest.TestCase):
self.nodes[LEADER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -85,83 +82,142 @@ class Cert_9_2_02_MGMTCommissionerSet(unittest.TestCase):
# Commissioner start
self.nodes[COMMISSIONER].commissioner_start()
self.simulator.go(3)
self.simulator.get_messages_sent_by(COMMISSIONER) # Skip LEAD_PET.req
self.simulator.get_messages_sent_by(COMMISSIONER) # Skip LEAD_PET.req
# Get CommissionerSesssionId from LEAD_PET.rsp
leader_messages = self.simulator.get_messages_sent_by(LEADER)
msg = leader_messages.next_coap_message('2.04', assert_enabled=True)
commissioner_session_id_tlv = command.get_sub_tlv(msg.coap.payload, mesh_cop.CommissionerSessionId)
commissioner_session_id_tlv = command.get_sub_tlv(
msg.coap.payload, mesh_cop.CommissionerSessionId
)
# Step 2 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader
steering_data_tlv = mesh_cop.SteeringData(bytes([0xFF]))
self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs([steering_data_tlv])
# Step 2 - Harness instructs commissioner to send
# MGMT_COMMISSIONER_SET.req to Leader
steering_data_tlv = mesh_cop.SteeringData(bytes([0xff]))
self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs(
[steering_data_tlv]
)
self.simulator.go(5)
# Step 3 - Leader responds to MGMT_COMMISSIONER_SET.req with MGMT_COMMISSIONER_SET.rsp
# Step 3 - Leader responds to MGMT_COMMISSIONER_SET.req with
# MGMT_COMMISSIONER_SET.rsp
leader_messages = self.simulator.get_messages_sent_by(LEADER)
msg = leader_messages.next_coap_message('2.04')
command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]) # (mesh_cop.State(mesh_cop.MeshCopState.REJECT),) <- this a tuple, don't delete the comma
self.simulator.get_messages_sent_by(COMMISSIONER) # Skip LEAD_PET.req
# (mesh_cop.State(mesh_cop.MeshCopState.REJECT),) <- this a tuple, don't delete the comma
command.check_coap_message(
msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]
)
self.simulator.get_messages_sent_by(COMMISSIONER) # Skip LEAD_PET.req
# Step 4 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader
self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs([steering_data_tlv, commissioner_session_id_tlv])
# Step 4 - Harness instructs commissioner to send
# MGMT_COMMISSIONER_SET.req to Leader
self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs(
[steering_data_tlv, commissioner_session_id_tlv]
)
self.simulator.go(5)
commissioner_messages = self.simulator.get_messages_sent_by(COMMISSIONER)
commissioner_messages = self.simulator.get_messages_sent_by(
COMMISSIONER
)
msg = commissioner_messages.next_coap_message('0.02', uri_path='/c/cs')
rloc = ip_address(self.nodes[LEADER].get_addr_rloc())
leader_aloc = ip_address(self.nodes[LEADER].get_addr_leader_aloc())
command.check_coap_message(msg, [steering_data_tlv, commissioner_session_id_tlv], dest_addrs=[rloc, leader_aloc])
command.check_coap_message(
msg,
[steering_data_tlv, commissioner_session_id_tlv],
dest_addrs=[rloc, leader_aloc],
)
# Step 5 - Leader sends MGMT_COMMISSIONER_SET.rsp to commissioner
leader_messages = self.simulator.get_messages_sent_by(LEADER)
msg = leader_messages.next_coap_message('2.04')
command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.ACCEPT)])
command.check_coap_message(
msg, [mesh_cop.State(mesh_cop.MeshCopState.ACCEPT)]
)
# Step 6 - Leader sends a multicast MLE Data Response
msg = leader_messages.next_mle_message(mle.CommandType.DATA_RESPONSE)
command.check_data_response(msg, command.NetworkDataCheck(
commissioning_data_check=command.CommissioningDataCheck(stable=0, sub_tlv_type_list=[mesh_cop.CommissionerSessionId, mesh_cop.SteeringData, mesh_cop.BorderAgentLocator])))
command.check_data_response(
msg,
command.NetworkDataCheck(
commissioning_data_check=command.CommissioningDataCheck(
stable=0,
sub_tlv_type_list=[
mesh_cop.CommissionerSessionId,
mesh_cop.SteeringData,
mesh_cop.BorderAgentLocator,
],
)
),
)
# Step 7 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader
# Step 7 - Harness instructs commissioner to send
# MGMT_COMMISSIONER_SET.req to Leader
border_agent_locator_tlv = mesh_cop.BorderAgentLocator(0x0400)
self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs(
[commissioner_session_id_tlv, border_agent_locator_tlv])
[commissioner_session_id_tlv, border_agent_locator_tlv]
)
self.simulator.go(5)
# Step 8 - Leader responds to MGMT_COMMISSIONER_SET.req with MGMT_COMMISSIONER_SET.rsp
# Step 8 - Leader responds to MGMT_COMMISSIONER_SET.req with
# MGMT_COMMISSIONER_SET.rsp
leader_messages = self.simulator.get_messages_sent_by(LEADER)
msg = leader_messages.next_coap_message('2.04')
command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)])
command.check_coap_message(
msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]
)
# Step 9 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader
# Step 9 - Harness instructs commissioner to send
# MGMT_COMMISSIONER_SET.req to Leader
self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs(
[steering_data_tlv, commissioner_session_id_tlv, border_agent_locator_tlv])
[
steering_data_tlv,
commissioner_session_id_tlv,
border_agent_locator_tlv,
]
)
self.simulator.go(5)
# Step 10 - Leader responds to MGMT_COMMISSIONER_SET.req with MGMT_COMMISSIONER_SET.rsp
# Step 10 - Leader responds to MGMT_COMMISSIONER_SET.req with
# MGMT_COMMISSIONER_SET.rsp
leader_messages = self.simulator.get_messages_sent_by(LEADER)
msg = leader_messages.next_coap_message('2.04')
command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)])
command.check_coap_message(
msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]
)
# Step 11 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader
# Step 11 - Harness instructs commissioner to send
# MGMT_COMMISSIONER_SET.req to Leader
self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs(
[mesh_cop.CommissionerSessionId(0xFFFF), steering_data_tlv])
[mesh_cop.CommissionerSessionId(0xffff), steering_data_tlv]
)
self.simulator.go(5)
# Step 12 - Leader responds to MGMT_COMMISSIONER_SET.req with MGMT_COMMISSIONER_SET.rsp
# Step 12 - Leader responds to MGMT_COMMISSIONER_SET.req with
# MGMT_COMMISSIONER_SET.rsp
leader_messages = self.simulator.get_messages_sent_by(LEADER)
msg = leader_messages.next_coap_message('2.04')
command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)])
command.check_coap_message(
msg, [mesh_cop.State(mesh_cop.MeshCopState.REJECT)]
)
# Step 13 - Harness instructs commissioner to send MGMT_COMMISSIONER_SET.req to Leader
# Step 13 - Harness instructs commissioner to send
# MGMT_COMMISSIONER_SET.req to Leader
self.nodes[COMMISSIONER].commissioner_mgmtset_with_tlvs(
[commissioner_session_id_tlv, steering_data_tlv, mesh_cop.Channel(0x0, 0x0)])
[
commissioner_session_id_tlv,
steering_data_tlv,
mesh_cop.Channel(0x0, 0x0),
]
)
self.simulator.go(5)
# Step 14 - Leader responds to MGMT_COMMISSIONER_SET.req with MGMT_COMMISSIONER_SET.rsp
# Step 14 - Leader responds to MGMT_COMMISSIONER_SET.req with
# MGMT_COMMISSIONER_SET.rsp
leader_messages = self.simulator.get_messages_sent_by(LEADER)
msg = leader_messages.next_coap_message('2.04')
command.check_coap_message(msg, [mesh_cop.State(mesh_cop.MeshCopState.ACCEPT)])
command.check_coap_message(
msg, [mesh_cop.State(mesh_cop.MeshCopState.ACCEPT)]
)
# Step 15 - Send ICMPv6 Echo Request to Leader
leader_rloc = self.nodes[LEADER].get_addr_rloc()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -36,26 +35,31 @@ import node
COMMISSIONER = 1
LEADER = 2
class Cert_9_2_04_ActiveDataset(unittest.TestCase):
def setUp(self):
self.simulator = config.create_default_simulator()
self.nodes = {}
for i in range(1,3):
for i in range(1, 3):
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_active_dataset(
10, panid=0xface, master_key='000102030405060708090a0b0c0d0e0f'
)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[LEADER].set_active_dataset(10, panid=0xface, master_key='000102030405060708090a0b0c0d0e0f')
self.nodes[LEADER].set_active_dataset(
10, panid=0xface, master_key='000102030405060708090a0b0c0d0e0f'
)
self.nodes[LEADER].set_mode('rsdn')
self.nodes[LEADER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -70,92 +74,110 @@ class Cert_9_2_04_ActiveDataset(unittest.TestCase):
self.nodes[COMMISSIONER].commissioner_start()
self.simulator.go(3)
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=101,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
network_name='GRL')
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=101,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
network_name='GRL',
)
self.simulator.go(3)
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
# Step 6
# Attempt to set Channel TLV
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=102,
channel=18,
channel_mask=0x001fffe0,
extended_panid='000db70000000001',
network_name='threadcert')
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=102,
channel=18,
channel_mask=0x001fffe0,
extended_panid='000db70000000001',
network_name='threadcert',
)
self.simulator.go(3)
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
# Step 8
# Attempt to set Mesh Local Prefix TLV
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=103,
channel_mask=0x001ffee0,
extended_panid='000db70000000000',
mesh_local='fd00:0db7::',
network_name='UL')
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=103,
channel_mask=0x001ffee0,
extended_panid='000db70000000000',
mesh_local='fd00:0db7::',
network_name='UL',
)
self.simulator.go(3)
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
# Step 10
# Attempt to set Network Master Key TLV
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=104,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
master_key='00112233445566778899aabbccddeeff',
mesh_local='fd00:0db7::',
network_name='UL')
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=104,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
master_key='00112233445566778899aabbccddeeff',
mesh_local='fd00:0db7::',
network_name='UL',
)
self.simulator.go(3)
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
# Step 12
# Attempt to set PAN ID TLV
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=105,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
master_key='00112233445566778899aabbccddeeff',
mesh_local='fd00:0db7::',
network_name='UL',
panid=0xafce)
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=105,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
master_key='00112233445566778899aabbccddeeff',
mesh_local='fd00:0db7::',
network_name='UL',
panid=0xafce,
)
self.simulator.go(3)
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
# Step 14
# Invalid Commissioner Session ID
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=106,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
network_name='UL',
binary='0b02abcd')
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=106,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
network_name='UL',
binary='0b02abcd',
)
self.simulator.go(3)
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
# Step 16
# Old Active Timestamp
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=101,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
network_name='UL')
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=101,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
network_name='UL',
)
self.simulator.go(3)
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
# Step 18
# Unexpected Steering Data TLV
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=107,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
network_name='UL',
binary='0806113320440000')
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=107,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
network_name='UL',
binary='0806113320440000',
)
self.simulator.go(3)
self.assertEqual(self.nodes[LEADER].get_network_name(), 'UL')
# Step 20
# Undefined TLV
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=108,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
network_name='GRL',
binary='8202aa55')
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=108,
channel_mask=0x001fffe0,
extended_panid='000db70000000000',
network_name='GRL',
binary='8202aa55',
)
self.simulator.go(3)
self.assertEqual(self.nodes[LEADER].get_network_name(), 'GRL')
@@ -163,5 +185,6 @@ class Cert_9_2_04_ActiveDataset(unittest.TestCase):
for ipaddr in ipaddrs:
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -47,12 +46,13 @@ ROUTER_PENDING_ACTIVE_TIMESTAMP = 25
COMMISSIONER_PENDING_CHANNEL = 20
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):
for i in range(1, 4):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[COMMISSIONER].set_active_dataset(LEADER_ACTIVE_TIMESTAMP)
@@ -70,7 +70,9 @@ class Cert_9_2_7_DelayTimer(unittest.TestCase):
self.nodes[LEADER].set_router_selection_jitter(1)
self.nodes[ROUTER].set_active_dataset(ROUTER_ACTIVE_TIMESTAMP)
self.nodes[ROUTER].set_pending_dataset(ROUTER_PENDING_TIMESTAMP, ROUTER_PENDING_ACTIVE_TIMESTAMP)
self.nodes[ROUTER].set_pending_dataset(
ROUTER_PENDING_TIMESTAMP, ROUTER_PENDING_ACTIVE_TIMESTAMP
)
self.nodes[ROUTER].set_mode('rsdn')
self.nodes[ROUTER].set_panid(PANID_INIT)
self.nodes[ROUTER].set_partition_id(0x1)
@@ -78,9 +80,9 @@ class Cert_9_2_7_DelayTimer(unittest.TestCase):
self.nodes[ROUTER].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -112,19 +114,34 @@ class Cert_9_2_7_DelayTimer(unittest.TestCase):
break
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=40,
active_timestamp=80,
delay_timer=10000,
channel=COMMISSIONER_PENDING_CHANNEL,
panid=COMMISSIONER_PENDING_PANID)
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=40,
active_timestamp=80,
delay_timer=10000,
channel=COMMISSIONER_PENDING_CHANNEL,
panid=COMMISSIONER_PENDING_PANID,
)
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)
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
)
self.assertEqual(self.nodes[LEADER].get_channel(), COMMISSIONER_PENDING_CHANNEL)
self.assertEqual(self.nodes[COMMISSIONER].get_channel(), COMMISSIONER_PENDING_CHANNEL)
self.assertEqual(self.nodes[ROUTER].get_channel(), COMMISSIONER_PENDING_CHANNEL)
self.assertEqual(
self.nodes[LEADER].get_channel(), COMMISSIONER_PENDING_CHANNEL
)
self.assertEqual(
self.nodes[COMMISSIONER].get_channel(),
COMMISSIONER_PENDING_CHANNEL,
)
self.assertEqual(
self.nodes[ROUTER].get_channel(), COMMISSIONER_PENDING_CHANNEL
)
ipaddrs = self.nodes[ROUTER].get_addrs()
for ipaddr in ipaddrs:
@@ -132,5 +149,6 @@ class Cert_9_2_7_DelayTimer(unittest.TestCase):
break
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -48,21 +47,26 @@ COMMISSIONER_PENDING_PANID = 0xafce
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):
for i in range(1, 6):
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_active_dataset(
LEADER_ACTIVE_TIMESTAMP, panid=PANID_INIT, channel=CHANNEL_INIT
)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[COMMISSIONER].enable_whitelist()
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[LEADER].set_active_dataset(LEADER_ACTIVE_TIMESTAMP, panid=PANID_INIT, channel=CHANNEL_INIT)
self.nodes[LEADER].set_active_dataset(
LEADER_ACTIVE_TIMESTAMP, panid=PANID_INIT, channel=CHANNEL_INIT
)
self.nodes[LEADER].set_mode('rsdn')
self.nodes[LEADER].add_whitelist(self.nodes[COMMISSIONER].get_addr64())
self.nodes[LEADER].add_whitelist(self.nodes[ROUTER].get_addr64())
@@ -70,7 +74,9 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
self.nodes[LEADER].add_whitelist(self.nodes[SED].get_addr64())
self.nodes[LEADER].enable_whitelist()
self.nodes[ROUTER].set_active_dataset(LEADER_ACTIVE_TIMESTAMP, panid=PANID_INIT, channel=CHANNEL_INIT)
self.nodes[ROUTER].set_active_dataset(
LEADER_ACTIVE_TIMESTAMP, panid=PANID_INIT, channel=CHANNEL_INIT
)
self.nodes[ROUTER].set_mode('rsdn')
self._setUpRouter()
@@ -100,9 +106,9 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
self.nodes[SED].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
def test(self):
self.nodes[LEADER].start()
@@ -128,11 +134,13 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
self.nodes[COMMISSIONER].commissioner_start()
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)
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=10,
active_timestamp=70,
delay_timer=60000,
channel=COMMISSIONER_PENDING_CHANNEL,
panid=COMMISSIONER_PENDING_PANID,
)
self.simulator.go(5)
self.nodes[ROUTER].reset()
@@ -141,13 +149,23 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
self.simulator.go(60)
self.assertEqual(self.nodes[LEADER].get_panid(), COMMISSIONER_PENDING_PANID)
self.assertEqual(self.nodes[COMMISSIONER].get_panid(), COMMISSIONER_PENDING_PANID)
self.assertEqual(
self.nodes[LEADER].get_panid(), COMMISSIONER_PENDING_PANID
)
self.assertEqual(
self.nodes[COMMISSIONER].get_panid(), COMMISSIONER_PENDING_PANID
)
self.assertEqual(self.nodes[LEADER].get_channel(), COMMISSIONER_PENDING_CHANNEL)
self.assertEqual(self.nodes[COMMISSIONER].get_channel(), COMMISSIONER_PENDING_CHANNEL)
# reset the devices here again to simulate the fact that the devices were disabled the entire time
self.assertEqual(
self.nodes[LEADER].get_channel(), COMMISSIONER_PENDING_CHANNEL
)
self.assertEqual(
self.nodes[COMMISSIONER].get_channel(),
COMMISSIONER_PENDING_CHANNEL,
)
# reset the devices here again to simulate the fact that the devices
# were disabled the entire time
self.nodes[ROUTER].reset()
self._setUpRouter()
self.nodes[ROUTER].start()
@@ -168,13 +186,25 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
self.simulator.go(10)
self.assertEqual(self.nodes[ROUTER].get_panid(), COMMISSIONER_PENDING_PANID)
self.assertEqual(self.nodes[ED].get_panid(), COMMISSIONER_PENDING_PANID)
self.assertEqual(self.nodes[SED].get_panid(), COMMISSIONER_PENDING_PANID)
self.assertEqual(
self.nodes[ROUTER].get_panid(), COMMISSIONER_PENDING_PANID
)
self.assertEqual(
self.nodes[ED].get_panid(), COMMISSIONER_PENDING_PANID
)
self.assertEqual(
self.nodes[SED].get_panid(), COMMISSIONER_PENDING_PANID
)
self.assertEqual(self.nodes[ROUTER].get_channel(), COMMISSIONER_PENDING_CHANNEL)
self.assertEqual(self.nodes[ED].get_channel(), COMMISSIONER_PENDING_CHANNEL)
self.assertEqual(self.nodes[SED].get_channel(), COMMISSIONER_PENDING_CHANNEL)
self.assertEqual(
self.nodes[ROUTER].get_channel(), COMMISSIONER_PENDING_CHANNEL
)
self.assertEqual(
self.nodes[ED].get_channel(), COMMISSIONER_PENDING_CHANNEL
)
self.assertEqual(
self.nodes[SED].get_channel(), COMMISSIONER_PENDING_CHANNEL
)
self.simulator.go(5)
@@ -182,7 +212,7 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
for ipaddr in ipaddrs:
if ipaddr[0:4] != 'fe80':
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
ipaddrs = self.nodes[ED].get_addrs()
for ipaddr in ipaddrs:
if ipaddr[0:4] != 'fe80':
@@ -193,5 +223,6 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
if ipaddr[0:4] != 'fe80':
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -44,21 +43,26 @@ LEADER = 2
ROUTER1 = 3
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):
for i in range(1, 5):
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_active_dataset(
10, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[COMMISSIONER].enable_whitelist()
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[LEADER].set_active_dataset(10, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[LEADER].set_active_dataset(
10, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[LEADER].set_mode('rsdn')
self.nodes[LEADER].set_partition_id(0xffffffff)
self.nodes[LEADER].add_whitelist(self.nodes[COMMISSIONER].get_addr64())
@@ -66,14 +70,18 @@ class Cert_9_2_09_PendingPartition(unittest.TestCase):
self.nodes[LEADER].enable_whitelist()
self.nodes[LEADER].set_router_selection_jitter(1)
self.nodes[ROUTER1].set_active_dataset(10, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[ROUTER1].set_active_dataset(
10, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[ROUTER1].set_mode('rsdn')
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER1].add_whitelist(self.nodes[ROUTER2].get_addr64())
self.nodes[ROUTER1].enable_whitelist()
self.nodes[ROUTER1].set_router_selection_jitter(1)
self.nodes[ROUTER2].set_active_dataset(10, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[ROUTER2].set_active_dataset(
10, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[ROUTER2].set_mode('rsdn')
self.nodes[ROUTER2].add_whitelist(self.nodes[ROUTER1].get_addr64())
self.nodes[ROUTER2].enable_whitelist()
@@ -81,9 +89,9 @@ class Cert_9_2_09_PendingPartition(unittest.TestCase):
self.nodes[ROUTER2].set_network_id_timeout(100)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -105,11 +113,13 @@ class Cert_9_2_09_PendingPartition(unittest.TestCase):
self.simulator.go(5)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=30,
active_timestamp=210,
delay_timer=500000,
channel=20,
panid=0xafce)
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=30,
active_timestamp=210,
delay_timer=500000,
channel=20,
panid=0xafce,
)
self.simulator.go(5)
self.nodes[LEADER].remove_whitelist(self.nodes[ROUTER1].get_addr64())
@@ -119,11 +129,13 @@ class Cert_9_2_09_PendingPartition(unittest.TestCase):
self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
self.assertEqual(self.nodes[ROUTER2].get_state(), 'leader')
self.nodes[ROUTER2].send_mgmt_pending_set(pending_timestamp=50,
active_timestamp=410,
delay_timer=200000,
channel=CHANNEL_FINAL,
panid=PANID_FINAL)
self.nodes[ROUTER2].send_mgmt_pending_set(
pending_timestamp=50,
active_timestamp=410,
delay_timer=200000,
channel=CHANNEL_FINAL,
panid=PANID_FINAL,
)
self.simulator.go(5)
self.nodes[LEADER].add_whitelist(self.nodes[ROUTER1].get_addr64())
@@ -150,5 +162,6 @@ class Cert_9_2_09_PendingPartition(unittest.TestCase):
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -47,21 +46,26 @@ SED1 = 5
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):
for i in range(1, 6):
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_active_dataset(
15, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[COMMISSIONER].enable_whitelist()
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[LEADER].set_active_dataset(15, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[LEADER].set_active_dataset(
15, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[LEADER].set_mode('rsdn')
self.nodes[LEADER].set_partition_id(0xffffffff)
self.nodes[LEADER].add_whitelist(self.nodes[COMMISSIONER].get_addr64())
@@ -69,7 +73,9 @@ class Cert_9_2_10_PendingPartition(unittest.TestCase):
self.nodes[LEADER].enable_whitelist()
self.nodes[LEADER].set_router_selection_jitter(1)
self.nodes[ROUTER1].set_active_dataset(15, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[ROUTER1].set_active_dataset(
15, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[ROUTER1].set_mode('rsdn')
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER1].add_whitelist(self.nodes[ED1].get_addr64())
@@ -91,9 +97,9 @@ class Cert_9_2_10_PendingPartition(unittest.TestCase):
self.nodes[SED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -119,11 +125,13 @@ class Cert_9_2_10_PendingPartition(unittest.TestCase):
self.simulator.go(5)
self.assertEqual(self.nodes[SED1].get_state(), 'child')
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=30,
active_timestamp=165,
delay_timer=150000,
channel=CHANNEL_FINAL,
panid=PANID_FINAL)
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=30,
active_timestamp=165,
delay_timer=150000,
channel=CHANNEL_FINAL,
panid=PANID_FINAL,
)
self.simulator.go(5)
print(self.nodes[COMMISSIONER].get_channel())
@@ -171,5 +179,6 @@ class Cert_9_2_10_PendingPartition(unittest.TestCase):
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -47,28 +46,35 @@ SED1 = 5
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):
for i in range(1, 6):
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_active_dataset(
10, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1
)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[COMMISSIONER].enable_whitelist()
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[LEADER].set_active_dataset(10, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1)
self.nodes[LEADER].set_active_dataset(
10, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1
)
self.nodes[LEADER].set_mode('rsdn')
self.nodes[LEADER].add_whitelist(self.nodes[COMMISSIONER].get_addr64())
self.nodes[LEADER].add_whitelist(self.nodes[ROUTER1].get_addr64())
self.nodes[LEADER].enable_whitelist()
self.nodes[LEADER].set_router_selection_jitter(1)
self.nodes[ROUTER1].set_active_dataset(10, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1)
self.nodes[ROUTER1].set_active_dataset(
10, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1
)
self.nodes[ROUTER1].set_mode('rsdn')
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER1].add_whitelist(self.nodes[ED1].get_addr64())
@@ -92,9 +98,9 @@ class Cert_9_2_11_MasterKey(unittest.TestCase):
self.nodes[SED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -120,10 +126,12 @@ class Cert_9_2_11_MasterKey(unittest.TestCase):
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)
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=10,
active_timestamp=70,
delay_timer=10000,
master_key=KEY2,
)
self.simulator.go(310)
print(self.nodes[COMMISSIONER].get_masterkey())
@@ -143,10 +151,12 @@ class Cert_9_2_11_MasterKey(unittest.TestCase):
if ipaddr[0:4] != 'fe80':
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=20,
active_timestamp=30,
delay_timer=10000,
master_key=KEY1)
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=20,
active_timestamp=30,
delay_timer=10000,
master_key=KEY1,
)
self.simulator.go(310)
print(self.nodes[COMMISSIONER].get_masterkey())
@@ -166,5 +176,6 @@ class Cert_9_2_11_MasterKey(unittest.TestCase):
if ipaddr[0:4] != 'fe80':
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -47,34 +46,43 @@ DATASET2_TIMESTAMP = 10
DATASET2_CHANNEL = 12
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):
for i in range(1, 6):
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_active_dataset(
DATASET1_TIMESTAMP, channel=DATASET1_CHANNEL, panid=DATASET1_PANID
)
self.nodes[LEADER1].set_mode('rsdn')
self.nodes[LEADER1].add_whitelist(self.nodes[ROUTER1].get_addr64())
self.nodes[LEADER1].enable_whitelist()
self.nodes[ROUTER1].set_active_dataset(DATASET1_TIMESTAMP, channel=DATASET1_CHANNEL, panid=DATASET1_PANID)
self.nodes[ROUTER1].set_active_dataset(
DATASET1_TIMESTAMP, channel=DATASET1_CHANNEL, panid=DATASET1_PANID
)
self.nodes[ROUTER1].set_mode('rsdn')
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER1].get_addr64())
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER2].get_addr64())
self.nodes[ROUTER1].enable_whitelist()
self.nodes[ROUTER1].set_router_selection_jitter(1)
self.nodes[LEADER2].set_active_dataset(DATASET2_TIMESTAMP, channel=DATASET2_CHANNEL, panid=DATASET2_PANID)
self.nodes[LEADER2].set_active_dataset(
DATASET2_TIMESTAMP, channel=DATASET2_CHANNEL, panid=DATASET2_PANID
)
self.nodes[LEADER2].set_mode('rsdn')
self.nodes[LEADER2].add_whitelist(self.nodes[ROUTER1].get_addr64())
self.nodes[LEADER2].add_whitelist(self.nodes[ROUTER2].get_addr64())
self.nodes[LEADER2].enable_whitelist()
self.nodes[LEADER2].set_router_selection_jitter(1)
self.nodes[ROUTER2].set_active_dataset(DATASET2_TIMESTAMP, channel=DATASET2_CHANNEL, panid=DATASET2_PANID)
self.nodes[ROUTER2].set_active_dataset(
DATASET2_TIMESTAMP, channel=DATASET2_CHANNEL, panid=DATASET2_PANID
)
self.nodes[ROUTER2].set_mode('rsdn')
self.nodes[ROUTER2].add_whitelist(self.nodes[LEADER2].get_addr64())
self.nodes[ROUTER2].add_whitelist(self.nodes[MED].get_addr64())
@@ -88,9 +96,9 @@ class Cert_9_2_12_Announce(unittest.TestCase):
self.nodes[MED].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -132,5 +140,6 @@ class Cert_9_2_12_Announce(unittest.TestCase):
if ipaddr[0:4] != 'fe80':
self.assertTrue(self.nodes[LEADER1].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -38,12 +37,13 @@ LEADER = 2
ROUTER1 = 3
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, (i == ED1), simulator=self.simulator)
self.nodes[COMMISSIONER].set_panid(0xface)
@@ -71,9 +71,9 @@ class Cert_9_2_13_EnergyScan(unittest.TestCase):
self.nodes[ED1].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -101,7 +101,9 @@ class Cert_9_2_13_EnergyScan(unittest.TestCase):
break
self.assertTrue(self.nodes[COMMISSIONER].ping(ipaddr))
self.nodes[COMMISSIONER].energy_scan(0x50000, 0x02, 0x20, 0x3e8, ipaddr)
self.nodes[COMMISSIONER].energy_scan(
0x50000, 0x02, 0x20, 0x3E8, ipaddr
)
ipaddrs = self.nodes[ED1].get_addrs()
for ipaddr in ipaddrs:
@@ -109,11 +111,16 @@ class Cert_9_2_13_EnergyScan(unittest.TestCase):
break
self.assertTrue(self.nodes[COMMISSIONER].ping(ipaddr))
self.nodes[COMMISSIONER].energy_scan(0x50000, 0x02, 0x20, 0x3e8, ipaddr)
self.nodes[COMMISSIONER].energy_scan(
0x50000, 0x02, 0x20, 0x3E8, ipaddr
)
self.nodes[COMMISSIONER].energy_scan(0x50000, 0x02, 0x20, 0x3e8, 'ff33:0040:fdde:ad00:beef:0:0:1')
self.nodes[COMMISSIONER].energy_scan(
0x50000, 0x02, 0x20, 0x3E8, 'ff33:0040:fdde:ad00:beef:0:0:1'
)
self.assertTrue(self.nodes[COMMISSIONER].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -38,23 +37,28 @@ LEADER1 = 2
ROUTER1 = 3
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):
for i in range(1, 5):
self.nodes[i] = node.Node(i, simulator=self.simulator)
self.nodes[COMMISSIONER].set_panid(0xface)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].add_whitelist(self.nodes[LEADER1].get_addr64())
self.nodes[COMMISSIONER].add_whitelist(
self.nodes[LEADER1].get_addr64()
)
self.nodes[COMMISSIONER].enable_whitelist()
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[LEADER1].set_panid(0xface)
self.nodes[LEADER1].set_mode('rsdn')
self.nodes[LEADER1].add_whitelist(self.nodes[COMMISSIONER].get_addr64())
self.nodes[LEADER1].add_whitelist(
self.nodes[COMMISSIONER].get_addr64()
)
self.nodes[LEADER1].add_whitelist(self.nodes[ROUTER1].get_addr64())
self.nodes[LEADER1].enable_whitelist()
@@ -71,9 +75,9 @@ class Cert_9_2_14_PanIdQuery(unittest.TestCase):
self.nodes[LEADER2].enable_whitelist()
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -102,9 +106,12 @@ class Cert_9_2_14_PanIdQuery(unittest.TestCase):
self.nodes[COMMISSIONER].panid_query(0xdead, 0xffffffff, ipaddr)
self.nodes[COMMISSIONER].panid_query(0xdead, 0xffffffff, 'ff33:0040:fdde:ad00:beef:0:0:1')
self.nodes[COMMISSIONER].panid_query(
0xdead, 0xffffffff, 'ff33:0040:fdde:ad00:beef:0:0:1'
)
self.assertTrue(self.nodes[COMMISSIONER].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -43,21 +42,26 @@ LEADER = 2
ROUTER1 = 3
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):
for i in range(1, 5):
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_active_dataset(
15, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[COMMISSIONER].enable_whitelist()
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[LEADER].set_active_dataset(15, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[LEADER].set_active_dataset(
15, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[LEADER].set_mode('rsdn')
self.nodes[LEADER].set_partition_id(0xffffffff)
self.nodes[LEADER].add_whitelist(self.nodes[COMMISSIONER].get_addr64())
@@ -65,14 +69,18 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
self.nodes[LEADER].enable_whitelist()
self.nodes[LEADER].set_router_selection_jitter(1)
self.nodes[ROUTER1].set_active_dataset(15, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[ROUTER1].set_active_dataset(
15, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[ROUTER1].set_mode('rsdn')
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER1].add_whitelist(self.nodes[ROUTER2].get_addr64())
self.nodes[ROUTER1].enable_whitelist()
self.nodes[ROUTER1].set_router_selection_jitter(1)
self.nodes[ROUTER2].set_active_dataset(15, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[ROUTER2].set_active_dataset(
15, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[ROUTER2].set_mode('rsdn')
self._setUpRouter2()
@@ -82,9 +90,9 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
self.nodes[ROUTER2].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -102,10 +110,12 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
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::')
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=10,
active_timestamp=70,
delay_timer=600000,
mesh_local='fd00:0db9::',
)
self.simulator.go(5)
self.nodes[ROUTER2].start()
@@ -115,11 +125,13 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
self.nodes[ROUTER2].reset()
self._setUpRouter2()
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=20,
active_timestamp=80,
delay_timer=200000,
mesh_local='fd00:0db7::',
panid=PANID_FINAL)
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=20,
active_timestamp=80,
delay_timer=200000,
mesh_local='fd00:0db7::',
panid=PANID_FINAL,
)
self.simulator.go(100)
self.nodes[ROUTER2].start()
@@ -138,5 +150,6 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
break
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -44,21 +43,26 @@ LEADER = 2
ROUTER1 = 3
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):
for i in range(1, 5):
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_active_dataset(
1, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[COMMISSIONER].enable_whitelist()
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[LEADER].set_active_dataset(1, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[LEADER].set_active_dataset(
1, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[LEADER].set_mode('rsdn')
self.nodes[LEADER].set_partition_id(0xffffffff)
self.nodes[LEADER].add_whitelist(self.nodes[COMMISSIONER].get_addr64())
@@ -66,14 +70,18 @@ class Cert_9_2_16_ActivePendingPartition(unittest.TestCase):
self.nodes[LEADER].enable_whitelist()
self.nodes[LEADER].set_router_selection_jitter(1)
self.nodes[ROUTER1].set_active_dataset(1, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[ROUTER1].set_active_dataset(
1, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[ROUTER1].set_mode('rsdn')
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER1].add_whitelist(self.nodes[ROUTER2].get_addr64())
self.nodes[ROUTER1].enable_whitelist()
self.nodes[ROUTER1].set_router_selection_jitter(1)
self.nodes[ROUTER2].set_active_dataset(1, channel=CHANNEL_INIT, panid=PANID_INIT)
self.nodes[ROUTER2].set_active_dataset(
1, channel=CHANNEL_INIT, panid=PANID_INIT
)
self.nodes[ROUTER2].set_mode('rsdn')
self._setUpRouter2()
@@ -83,9 +91,9 @@ class Cert_9_2_16_ActivePendingPartition(unittest.TestCase):
self.nodes[ROUTER2].set_router_selection_jitter(1)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -103,10 +111,12 @@ class Cert_9_2_16_ActivePendingPartition(unittest.TestCase):
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::')
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=10,
active_timestamp=10,
delay_timer=600000,
mesh_local='fd00:0db9::',
)
self.simulator.go(5)
self.nodes[ROUTER2].start()
@@ -116,25 +126,36 @@ class Cert_9_2_16_ActivePendingPartition(unittest.TestCase):
self.nodes[ROUTER2].reset()
self._setUpRouter2()
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=20,
active_timestamp=20,
delay_timer=200000,
mesh_local='fd00:0db7::',
panid=PANID_FINAL)
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=20,
active_timestamp=20,
delay_timer=200000,
mesh_local='fd00:0db7::',
panid=PANID_FINAL,
)
self.simulator.go(5)
self.nodes[COMMISSIONER].send_mgmt_active_set(active_timestamp=15,
network_name='threadCert')
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=15, network_name='threadCert'
)
self.simulator.go(100)
self.nodes[ROUTER2].start()
self.simulator.go(5)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
self.assertEqual(self.nodes[COMMISSIONER].get_network_name(), NETWORK_NAME_FINAL)
self.assertEqual(self.nodes[LEADER].get_network_name(), NETWORK_NAME_FINAL)
self.assertEqual(self.nodes[ROUTER1].get_network_name(), NETWORK_NAME_FINAL)
self.assertEqual(self.nodes[ROUTER2].get_network_name(), NETWORK_NAME_FINAL)
self.assertEqual(
self.nodes[COMMISSIONER].get_network_name(), NETWORK_NAME_FINAL
)
self.assertEqual(
self.nodes[LEADER].get_network_name(), NETWORK_NAME_FINAL
)
self.assertEqual(
self.nodes[ROUTER1].get_network_name(), NETWORK_NAME_FINAL
)
self.assertEqual(
self.nodes[ROUTER2].get_network_name(), NETWORK_NAME_FINAL
)
self.simulator.go(100)
@@ -149,5 +170,6 @@ class Cert_9_2_16_ActivePendingPartition(unittest.TestCase):
break
self.assertTrue(self.nodes[LEADER].ping(ipaddr))
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -42,21 +41,26 @@ LEADER1 = 1
LEADER2 = 2
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):
for i in range(1, 4):
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_active_dataset(
10, channel=CHANNEL1, panid=PANID_INIT, channel_mask=CHANNEL_MASK
)
self.nodes[LEADER1].set_mode('rsdn')
self.nodes[LEADER1].add_whitelist(self.nodes[ED1].get_addr64())
self.nodes[LEADER1].enable_whitelist()
self.nodes[LEADER1].set_router_selection_jitter(1)
self.nodes[LEADER2].set_active_dataset(20, channel=CHANNEL2, panid=PANID_INIT, channel_mask=CHANNEL_MASK)
self.nodes[LEADER2].set_active_dataset(
20, channel=CHANNEL2, panid=PANID_INIT, channel_mask=CHANNEL_MASK
)
self.nodes[LEADER2].set_mode('rsdn')
self.nodes[LEADER2].enable_whitelist()
self.nodes[LEADER2].set_router_selection_jitter(1)
@@ -69,9 +73,9 @@ class Cert_9_2_17_Orphan(unittest.TestCase):
self.nodes[ED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
self.simulator.stop()
def test(self):
@@ -95,5 +99,6 @@ class Cert_9_2_17_Orphan(unittest.TestCase):
self.assertEqual(self.nodes[ED1].get_state(), 'child')
self.assertEqual(self.nodes[ED1].get_channel(), CHANNEL2)
if __name__ == '__main__':
unittest.main()
@@ -27,7 +27,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import config
@@ -48,21 +47,26 @@ SED1 = 6
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):
for i in range(1, 7):
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_active_dataset(
1, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1
)
self.nodes[COMMISSIONER].set_mode('rsdn')
self.nodes[COMMISSIONER].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[COMMISSIONER].enable_whitelist()
self.nodes[COMMISSIONER].set_router_selection_jitter(1)
self.nodes[LEADER].set_active_dataset(1, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1)
self.nodes[LEADER].set_active_dataset(
1, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1
)
self.nodes[LEADER].set_mode('rsdn')
self.nodes[LEADER].set_partition_id(0xffffffff)
self.nodes[LEADER].add_whitelist(self.nodes[COMMISSIONER].get_addr64())
@@ -70,7 +74,9 @@ class Cert_9_2_18_RollBackActiveTimestamp(unittest.TestCase):
self.nodes[LEADER].enable_whitelist()
self.nodes[LEADER].set_router_selection_jitter(1)
self.nodes[ROUTER1].set_active_dataset(1, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1)
self.nodes[ROUTER1].set_active_dataset(
1, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1
)
self.nodes[ROUTER1].set_mode('rsdn')
self.nodes[ROUTER1].add_whitelist(self.nodes[LEADER].get_addr64())
self.nodes[ROUTER1].add_whitelist(self.nodes[ROUTER2].get_addr64())
@@ -79,7 +85,9 @@ class Cert_9_2_18_RollBackActiveTimestamp(unittest.TestCase):
self.nodes[ROUTER1].enable_whitelist()
self.nodes[ROUTER1].set_router_selection_jitter(1)
self.nodes[ROUTER2].set_active_dataset(1, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1)
self.nodes[ROUTER2].set_active_dataset(
1, channel=CHANNEL_INIT, panid=PANID_INIT, master_key=KEY1
)
self.nodes[ROUTER2].set_mode('rsdn')
self.nodes[ROUTER2].add_whitelist(self.nodes[ROUTER1].get_addr64())
self.nodes[ROUTER2].enable_whitelist()
@@ -101,9 +109,9 @@ class Cert_9_2_18_RollBackActiveTimestamp(unittest.TestCase):
self.nodes[SED1].set_timeout(config.DEFAULT_CHILD_TIMEOUT)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
def test(self):
self.nodes[LEADER].start()
@@ -128,21 +136,26 @@ class Cert_9_2_18_RollBackActiveTimestamp(unittest.TestCase):
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')
self.nodes[COMMISSIONER].send_mgmt_active_set(
active_timestamp=20000, network_name='GRL'
)
self.simulator.go(5)
self.nodes[COMMISSIONER].send_mgmt_pending_set(pending_timestamp=20,
active_timestamp=20,
delay_timer=20000,
network_name='Shouldnotbe')
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=20,
active_timestamp=20,
delay_timer=20000,
network_name='Shouldnotbe',
)
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)
self.nodes[COMMISSIONER].send_mgmt_pending_set(
pending_timestamp=20,
active_timestamp=20,
delay_timer=20000,
network_name='MyHouse',
master_key=KEY2,
)
self.simulator.go(310)
self.assertEqual(self.nodes[COMMISSIONER].get_masterkey(), KEY2)
@@ -156,5 +169,6 @@ class Cert_9_2_18_RollBackActiveTimestamp(unittest.TestCase):
self.simulator.go(5)
self.assertEqual(self.nodes[ROUTER2].get_state(), 'leader')
if __name__ == '__main__':
unittest.main()
+5 -4
View File
@@ -27,22 +27,22 @@
# POSSIBILITY OF SUCH DAMAGE.
#
import time
import unittest
import node
LEADER = 1
class Cert_Cli(unittest.TestCase):
def setUp(self):
self.nodes = {}
self.nodes[LEADER] = node.Node(LEADER)
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
def test(self):
commands = self.nodes[LEADER].get_commands()
@@ -51,5 +51,6 @@ class Cert_Cli(unittest.TestCase):
self.nodes[LEADER].send_command(command + ' -h')
self.nodes[LEADER].pexpect.expect('Done')
if __name__ == '__main__':
unittest.main()
+6 -4
View File
@@ -35,10 +35,11 @@ import node
LEADER = 1
ROUTER = 2
class Test_MacScan(unittest.TestCase):
def setUp(self):
self.nodes = {}
for i in range(1,3):
for i in range(1, 3):
self.nodes[i] = node.Node(i)
self.nodes[LEADER].set_panid(0xface)
@@ -56,9 +57,9 @@ class Test_MacScan(unittest.TestCase):
self.nodes[ROUTER].set_network_name('OpenThread')
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
node.destroy()
for n in list(self.nodes.values()):
n.stop()
n.destroy()
def test(self):
self.nodes[LEADER].start()
@@ -72,5 +73,6 @@ class Test_MacScan(unittest.TestCase):
results = self.nodes[LEADER].scan()
self.assertEqual(len(results), 16)
if __name__ == '__main__':
unittest.main()
-1
View File
@@ -26,4 +26,3 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+91 -28
View File
@@ -78,7 +78,7 @@ class CoapOptionHeader(object):
@property
def is_payload_marker(self):
return self.delta == 0xf and self.length == 0xf
return self.delta == 0xF and self.length == 0xF
@classmethod
def _read_extended_value(cls, data, value):
@@ -94,8 +94,8 @@ class CoapOptionHeader(object):
def from_bytes(cls, data):
initial_byte = ord(data.read(1))
delta = (initial_byte >> 4) & 0xf
length = initial_byte & 0xf
delta = (initial_byte >> 4) & 0xF
length = initial_byte & 0xF
delta = cls._read_extended_value(data, delta)
length = cls._read_extended_value(data, length)
@@ -120,7 +120,9 @@ class CoapOption(object):
return self._value
def __repr__(self):
return "CoapOption(type={}, value={})".format(self.type, hexlify(self.value))
return "CoapOption(type={}, value={})".format(
self.type, hexlify(self.value)
)
class CoapOptionsFactory(object):
@@ -162,11 +164,11 @@ class CoapCode(object):
@property
def detail(self):
return self.code & 0x1f
return self.code & 0x1F
@classmethod
def from_class_and_detail(cls, _class, detail):
return cls(((_class & 0x7) << 5) | (detail & 0x1f))
return cls(((_class & 0x7) << 5) | (detail & 0x1F))
@classmethod
def from_dotted(cls, dotted_str):
@@ -179,7 +181,9 @@ class CoapCode(object):
@property
def dotted(self):
return ".".join(["{:01d}".format(self._class), "{:02d}".format(self.detail)])
return ".".join(
["{:01d}".format(self._class), "{:02d}".format(self.detail)]
)
def __eq__(self, other):
if isinstance(other, int):
@@ -192,7 +196,9 @@ class CoapCode(object):
return self.code == other.code
else:
raise TypeError("Could not compare {} and {}".format(type(self), type(other)))
raise TypeError(
"Could not compare {} and {}".format(type(self), type(other))
)
def __repr__(self):
return self.dotted
@@ -202,7 +208,17 @@ class CoapMessage(object):
""" Class representing CoAP message. """
def __init__(self, version, _type, code, message_id, token, options, payload, uri_path=None):
def __init__(
self,
version,
_type,
code,
message_id,
token,
options,
payload,
uri_path=None,
):
self._version = version
self._type = _type
self._code = code
@@ -250,9 +266,17 @@ class CoapMessage(object):
def __repr__(self):
options_str = ", ".join([repr(opt) for opt in self.options])
return "CoapMessage(version={}, type={}, code={}, message_id={}, token={}, options=[{}], payload={}, uri-path='{}')".format(
self.version, CoapMessageType.name[self.type], self.code, self.message_id, hexlify(self.token),
options_str, self.payload, self.uri_path)
return ("CoapMessage(version={}, type={}, code={}, message_id={}, token={}, options=[{}], payload={},",
"uri-path='{}')").format(
self.version,
CoapMessageType.name[self.type],
self.code,
self.message_id,
hexlify(self.token),
options_str,
self.payload,
self.uri_path,
)
class CoapMessageProxy(object):
@@ -264,11 +288,19 @@ class CoapMessageProxy(object):
to get URI path to get proper payload parser.
"""
def __init__(self, coap_message, message_info, mid_to_uri_path_binder, uri_path_based_payload_factories):
def __init__(
self,
coap_message,
message_info,
mid_to_uri_path_binder,
uri_path_based_payload_factories,
):
self._coap_message = coap_message
self._message_info = message_info
self._mid_to_uri_path_binder = mid_to_uri_path_binder
self._uri_path_based_payload_factories = uri_path_based_payload_factories
self._uri_path_based_payload_factories = (
uri_path_based_payload_factories
)
@property
def version(self):
@@ -301,11 +333,15 @@ class CoapMessageProxy(object):
@property
def payload(self):
try:
binded_uri_path = self._mid_to_uri_path_binder.get_uri_path_for(self.message_id, self.token)
binded_uri_path = self._mid_to_uri_path_binder.get_uri_path_for(
self.message_id, self.token
)
factory = self._uri_path_based_payload_factories[binded_uri_path]
return factory.parse(io.BytesIO(self._coap_message.payload), self._message_info)
return factory.parse(
io.BytesIO(self._coap_message.payload), self._message_info
)
except RuntimeError:
return self._coap_message.payload
@@ -316,9 +352,10 @@ class CoapMessageProxy(object):
def __repr__(self):
options_str = ", ".join([repr(opt) for opt in self.options])
return "CoapMessageProxy(version={}, type={}, code={}, message_id={}, token={}, options=[{}], payload={}, uri-path='{}')".format(
self.version, self.type, self.code, self.message_id, hexlify(self.token),
options_str, self.payload, self.uri_path)
return ("CoapMessageProxy(version={}, type={}, code={}, message_id={}, token={}, options=[{}], payload={},",
"uri-path='{}')").format(
self.version, self.type, self.code, self.message_id, hexlify(self.token), options_str, self.payload,
self.uri_path, )
class CoapMessageIdToUriPathBinder:
@@ -335,17 +372,25 @@ class CoapMessageIdToUriPathBinder:
try:
return self._uri_path_binds[message_id][hexlify(token)]
except KeyError:
raise RuntimeError("Could not find URI PATH for message_id: {} and token: {}".format(
message_id, hexlify(token)))
raise RuntimeError(
"Could not find URI PATH for message_id: {} and token: {}".format(
message_id, hexlify(token)))
class CoapMessageFactory(object):
""" Factory that produces CoAP messages. """
def __init__(self, options_factory, uri_path_based_payload_factories, message_id_to_uri_path_binder):
def __init__(
self,
options_factory,
uri_path_based_payload_factories,
message_id_to_uri_path_binder,
):
self._options_factory = options_factory
self._uri_path_based_payload_factories = uri_path_based_payload_factories
self._uri_path_based_payload_factories = (
uri_path_based_payload_factories
)
self._mid_to_uri_path_binder = message_id_to_uri_path_binder
def _uri_path_from(self, options):
@@ -365,12 +410,14 @@ class CoapMessageFactory(object):
version = (initial_byte >> 6) & 0x3
_type = CoapMessageType((initial_byte >> 4) & 0x3)
token_length = initial_byte & 0xf
token_length = initial_byte & 0xF
return version, _type, token_length
def parse(self, data, message_info):
version, _type, token_length = self._parse_initial_byte(data, message_info)
version, _type, token_length = self._parse_initial_byte(
data, message_info
)
code = CoapCode(ord(data.read(1)))
message_id = struct.unpack(">H", data.read(2))[0]
@@ -380,8 +427,24 @@ class CoapMessageFactory(object):
uri_path = self._uri_path_from(options)
if uri_path is not None:
self._mid_to_uri_path_binder.add_uri_path_for(message_id, token, uri_path)
self._mid_to_uri_path_binder.add_uri_path_for(
message_id, token, uri_path
)
coap_message = CoapMessage(version, _type, code, message_id, token, options, data.read(), uri_path)
coap_message = CoapMessage(
version,
_type,
code,
message_id,
token,
options,
data.read(),
uri_path,
)
return CoapMessageProxy(coap_message, message_info, self._mid_to_uri_path_binder, self._uri_path_based_payload_factories)
return CoapMessageProxy(
coap_message,
message_info,
self._mid_to_uri_path_binder,
self._uri_path_based_payload_factories,
)
+364 -132
View File
@@ -38,36 +38,46 @@ import config
import mesh_cop
import mle
from collections import Counter
from enum import IntEnum
from network_data import Prefix, BorderRouter, LowpanId
class CheckType(IntEnum):
CONTAIN = 0
NOT_CONTAIN = 1
OPTIONAL = 2
class NetworkDataCheckType:
PREFIX_CNT = 1
PREFIX_CONTENT = 2
def check_address_query(command_msg, source_node, destination_address):
"""Verify source_node sent a properly formatted Address Query Request message to the destination_address.
"""
command_msg.assertCoapMessageContainsTlv(network_layer.TargetEid)
source_rloc = source_node.get_ip6_address(config.ADDRESS_TYPE.RLOC)
assert ipv6.ip_address(source_rloc) == command_msg.ipv6_packet.ipv6_header.source_address, \
"Error: The IPv6 source address is not the RLOC of the originator. The source node's rloc is: " \
+ str(ipv6.ip_address(source_rloc)) + ", but the source_address in command msg is: " \
+ str(command_msg.ipv6_packet.ipv6_header.source_address)
assert (
ipv6.ip_address(source_rloc)
== command_msg.ipv6_packet.ipv6_header.source_address
), (
"Error: The IPv6 source address is not the RLOC of the originator. The source node's rloc is: "
+ str(ipv6.ip_address(source_rloc))
+ ", but the source_address in command msg is: "
+ str(command_msg.ipv6_packet.ipv6_header.source_address)
)
if isinstance(destination_address, bytearray):
destination_address = bytes(destination_address)
elif isinstance(destination_address, str) and sys.version_info[0] == 2:
destination_address = destination_address.decode("utf-8")
assert ipv6.ip_address(destination_address) == command_msg.ipv6_packet.ipv6_header.destination_address, "Error: The IPv6 destination address is not expected."
assert (
ipv6.ip_address(destination_address)
== command_msg.ipv6_packet.ipv6_header.destination_address
), "Error: The IPv6 destination address is not expected."
def check_address_notification(command_msg, source_node, destination_node):
"""Verify source_node sent a properly formatted Address Notification command message to destination_node.
@@ -78,12 +88,23 @@ def check_address_notification(command_msg, source_node, destination_node):
command_msg.assertCoapMessageContainsTlv(network_layer.MlEid)
source_rloc = source_node.get_ip6_address(config.ADDRESS_TYPE.RLOC)
assert ipv6.ip_address(source_rloc) == command_msg.ipv6_packet.ipv6_header.source_address, "Error: The IPv6 source address is not the RLOC of the originator."
assert (
ipv6.ip_address(source_rloc)
== command_msg.ipv6_packet.ipv6_header.source_address
), "Error: The IPv6 source address is not the RLOC of the originator."
destination_rloc = destination_node.get_ip6_address(config.ADDRESS_TYPE.RLOC)
assert ipv6.ip_address(destination_rloc) == command_msg.ipv6_packet.ipv6_header.destination_address, "Error: The IPv6 destination address is not the RLOC of the destination."
destination_rloc = destination_node.get_ip6_address(
config.ADDRESS_TYPE.RLOC
)
assert (
ipv6.ip_address(destination_rloc)
== command_msg.ipv6_packet.ipv6_header.destination_address
), "Error: The IPv6 destination address is not the RLOC of the destination."
def check_address_error_notification(command_msg, source_node, destination_address):
def check_address_error_notification(
command_msg, source_node, destination_address
):
"""Verify source_node sent a properly formatted Address Error Notification command message to destination_address.
"""
command_msg.assertCoapMessageRequestUriPath('/a/ae')
@@ -91,20 +112,31 @@ def check_address_error_notification(command_msg, source_node, destination_addre
command_msg.assertCoapMessageContainsTlv(network_layer.MlEid)
source_rloc = source_node.get_ip6_address(config.ADDRESS_TYPE.RLOC)
assert ipv6.ip_address(source_rloc) == command_msg.ipv6_packet.ipv6_header.source_address, \
"Error: The IPv6 source address is not the RLOC of the originator. The source node's rloc is: " \
+ str(ipv6.ip_address(source_rloc)) + ", but the source_address in command msg is: " \
+ str(command_msg.ipv6_packet.ipv6_header.source_address)
assert (
ipv6.ip_address(source_rloc)
== command_msg.ipv6_packet.ipv6_header.source_address
), (
"Error: The IPv6 source address is not the RLOC of the originator. The source node's rloc is: "
+ str(ipv6.ip_address(source_rloc))
+ ", but the source_address in command msg is: "
+ str(command_msg.ipv6_packet.ipv6_header.source_address)
)
if isinstance(destination_address, bytearray):
destination_address = bytes(destination_address)
elif isinstance(destination_address, str) and sys.version_info[0] == 2:
destination_address = destination_address.decode("utf-8")
assert ipv6.ip_address(destination_address) == command_msg.ipv6_packet.ipv6_header.destination_address, \
"Error: The IPv6 destination address is not expected. The destination node's rloc is: " \
+ str(ipv6.ip_address(destination_address)) + ", but the destination_address in command msg is: " \
+ str(command_msg.ipv6_packet.ipv6_header.destination_address)
assert (
ipv6.ip_address(destination_address)
== command_msg.ipv6_packet.ipv6_header.destination_address
), (
"Error: The IPv6 destination address is not expected. The destination node's rloc is: "
+ str(ipv6.ip_address(destination_address))
+ ", but the destination_address in command msg is: "
+ str(command_msg.ipv6_packet.ipv6_header.destination_address)
)
def check_address_solicit(command_msg, was_router):
command_msg.assertCoapMessageRequestUriPath('/a/as')
@@ -115,6 +147,7 @@ def check_address_solicit(command_msg, was_router):
else:
command_msg.assertMleMessageDoesNotContainTlv(network_layer.Rloc16)
def check_address_release(command_msg, destination_node):
"""Verify the message is a properly formatted address release destined to the given node.
"""
@@ -122,8 +155,14 @@ def check_address_release(command_msg, destination_node):
command_msg.assertCoapMessageContainsTlv(network_layer.Rloc16)
command_msg.assertCoapMessageContainsTlv(network_layer.MacExtendedAddress)
destination_rloc = destination_node.get_ip6_address(config.ADDRESS_TYPE.RLOC)
assert ipv6.ip_address(destination_rloc) == command_msg.ipv6_packet.ipv6_header.destination_address, "Error: The destination is not RLOC address"
destination_rloc = destination_node.get_ip6_address(
config.ADDRESS_TYPE.RLOC
)
assert (
ipv6.ip_address(destination_rloc)
== command_msg.ipv6_packet.ipv6_header.destination_address
), "Error: The destination is not RLOC address"
def check_tlv_request_tlv(command_msg, check_type, tlv_id):
"""Verify if TLV Request TLV contains specified TLV ID
@@ -131,29 +170,44 @@ def check_tlv_request_tlv(command_msg, check_type, tlv_id):
tlv_request_tlv = command_msg.get_mle_message_tlv(mle.TlvRequest)
if check_type == CheckType.CONTAIN:
assert tlv_request_tlv is not None, "Error: The msg doesn't contain TLV Request TLV"
assert any(tlv_id == tlv for tlv in tlv_request_tlv.tlvs), "Error: The msg doesn't contain TLV Request TLV ID: {}".format(tlv_id)
assert (
tlv_request_tlv is not None
), "Error: The msg doesn't contain TLV Request TLV"
assert any(
tlv_id == tlv for tlv in tlv_request_tlv.tlvs
), "Error: The msg doesn't contain TLV Request TLV ID: {}".format(
tlv_id
)
elif check_type == CheckType.NOT_CONTAIN:
if tlv_request_tlv is not None:
assert any(tlv_id == tlv for tlv in tlv_request_tlv.tlvs) is False, "Error: The msg contains TLV Request TLV ID: {}".format(tlv_id)
assert (
any(tlv_id == tlv for tlv in tlv_request_tlv.tlvs) is False
), "Error: The msg contains TLV Request TLV ID: {}".format(tlv_id)
elif check_type == CheckType.OPTIONAL:
if tlv_request_tlv is not None:
if any(tlv_id == tlv for tlv in tlv_request_tlv.tlvs):
print("TLV Request TLV contains TLV ID: {}".format(tlv_id))
else:
print("TLV Request TLV doesn't contain TLV ID: {}".format(tlv_id))
print(
"TLV Request TLV doesn't contain TLV ID: {}".format(tlv_id)
)
else:
print("The msg doesn't contain TLV Request TLV")
else:
raise ValueError("Invalid check type")
def check_link_request(command_msg, source_address = CheckType.OPTIONAL, leader_data = CheckType.OPTIONAL, \
tlv_request_address16 = CheckType.OPTIONAL, tlv_request_route64 = CheckType.OPTIONAL, \
tlv_request_link_margin = CheckType.OPTIONAL):
def check_link_request(
command_msg,
source_address=CheckType.OPTIONAL,
leader_data=CheckType.OPTIONAL,
tlv_request_address16=CheckType.OPTIONAL,
tlv_request_route64=CheckType.OPTIONAL,
tlv_request_link_margin=CheckType.OPTIONAL,
):
"""Verify a properly formatted Link Request command message.
"""
command_msg.assertMleMessageContainsTlv(mle.Challenge)
@@ -162,14 +216,28 @@ def check_link_request(command_msg, source_address = CheckType.OPTIONAL, leader_
check_mle_optional_tlv(command_msg, source_address, mle.SourceAddress)
check_mle_optional_tlv(command_msg, leader_data, mle.LeaderData)
check_tlv_request_tlv(command_msg, tlv_request_address16, mle.TlvType.ADDRESS16)
check_tlv_request_tlv(command_msg, tlv_request_route64, mle.TlvType.ROUTE64)
check_tlv_request_tlv(command_msg, tlv_request_link_margin, mle.TlvType.LINK_MARGIN)
check_tlv_request_tlv(
command_msg, tlv_request_address16, mle.TlvType.ADDRESS16
)
check_tlv_request_tlv(
command_msg, tlv_request_route64, mle.TlvType.ROUTE64
)
check_tlv_request_tlv(
command_msg, tlv_request_link_margin, mle.TlvType.LINK_MARGIN
)
def check_link_accept(command_msg, destination_node, \
leader_data = CheckType.OPTIONAL, link_margin = CheckType.OPTIONAL, mle_frame_counter = CheckType.OPTIONAL, \
challenge = CheckType.OPTIONAL, address16 = CheckType.OPTIONAL, route64 = CheckType.OPTIONAL, \
tlv_request_link_margin = CheckType.OPTIONAL):
def check_link_accept(
command_msg,
destination_node,
leader_data=CheckType.OPTIONAL,
link_margin=CheckType.OPTIONAL,
mle_frame_counter=CheckType.OPTIONAL,
challenge=CheckType.OPTIONAL,
address16=CheckType.OPTIONAL,
route64=CheckType.OPTIONAL,
tlv_request_link_margin=CheckType.OPTIONAL,
):
"""verify a properly formatted link accept command message.
"""
command_msg.assertMleMessageContainsTlv(mle.LinkLayerFrameCounter)
@@ -184,13 +252,20 @@ def check_link_accept(command_msg, destination_node, \
check_mle_optional_tlv(command_msg, address16, mle.Address16)
check_mle_optional_tlv(command_msg, route64, mle.Route64)
check_tlv_request_tlv(command_msg, tlv_request_link_margin, mle.TlvType.LINK_MARGIN)
check_tlv_request_tlv(
command_msg, tlv_request_link_margin, mle.TlvType.LINK_MARGIN
)
destination_link_local = destination_node.get_ip6_address(config.ADDRESS_TYPE.LINK_LOCAL)
assert ipv6.ip_address(destination_link_local) == command_msg.ipv6_packet.ipv6_header.destination_address, \
"Error: The destination is unexpected"
destination_link_local = destination_node.get_ip6_address(
config.ADDRESS_TYPE.LINK_LOCAL
)
assert (
ipv6.ip_address(destination_link_local)
== command_msg.ipv6_packet.ipv6_header.destination_address
), "Error: The destination is unexpected"
def check_icmp_path(sniffer, path, nodes, icmp_type = ipv6.ICMP_ECHO_REQUEST):
def check_icmp_path(sniffer, path, nodes, icmp_type=ipv6.ICMP_ECHO_REQUEST):
"""Verify icmp message is forwarded along the path.
"""
len_path = len(path)
@@ -203,17 +278,21 @@ def check_icmp_path(sniffer, path, nodes, icmp_type = ipv6.ICMP_ECHO_REQUEST):
if i < len_path - 1:
next_node = nodes[path[i + 1]]
next_node_rloc16 = next_node.get_addr16()
assert next_node_rloc16 == node_icmp_msg.mac_header.dest_address.rloc, "Error: The path is unexpected."
assert (
next_node_rloc16 == node_icmp_msg.mac_header.dest_address.rloc
), "Error: The path is unexpected."
else:
return True
return False
def check_id_set(command_msg, router_id):
"""Check the command_msg's Route64 tlv to verify router_id is an active router.
"""
tlv = command_msg.assertMleMessageContainsTlv(mle.Route64)
return ((tlv.router_id_mask >> (63 - router_id)) & 1)
return (tlv.router_id_mask >> (63 - router_id)) & 1
def get_routing_cost(command_msg, router_id):
"""Check the command_msg's Route64 tlv to get the routing cost to router.
@@ -221,8 +300,9 @@ def get_routing_cost(command_msg, router_id):
tlv = command_msg.assertMleMessageContainsTlv(mle.Route64)
# Get router's mask pos
# Turn the number into binary string. Need to consider the preceding 0 omitted during conversion.
router_id_mask_str = bin(tlv.router_id_mask).replace('0b','')
# Turn the number into binary string. Need to consider the preceding 0
# omitted during conversion.
router_id_mask_str = bin(tlv.router_id_mask).replace('0b', '')
prefix_len = 64 - len(router_id_mask_str)
routing_entry_pos = 0
@@ -230,37 +310,47 @@ def get_routing_cost(command_msg, router_id):
if router_id_mask_str[i] == '1':
routing_entry_pos += 1
assert router_id_mask_str[router_id - prefix_len] == '1', "Error: The router isn't in the topology. \n" \
+ "route64 tlv is: %s. \nrouter_id is: %s. \nrouting_entry_pos is: %s. \nrouter_id_mask_str is: %s." \
%(tlv, router_id, routing_entry_pos, router_id_mask_str)
assert router_id_mask_str[router_id - prefix_len] == '1', \
(("Error: The router isn't in the topology. \n",
"route64 tlv is: %s. \nrouter_id is: %s. \nrouting_entry_pos is: %s. \nrouter_id_mask_str is: %s.") %
(tlv, router_id, routing_entry_pos, router_id_mask_str))
return tlv.link_quality_and_route_data[routing_entry_pos].route
def check_mle_optional_tlv(command_msg, type, tlv):
if (type == CheckType.CONTAIN):
if type == CheckType.CONTAIN:
command_msg.assertMleMessageContainsTlv(tlv)
elif (type == CheckType.NOT_CONTAIN):
elif type == CheckType.NOT_CONTAIN:
command_msg.assertMleMessageDoesNotContainTlv(tlv)
elif (type == CheckType.OPTIONAL):
elif type == CheckType.OPTIONAL:
command_msg.assertMleMessageContainsOptionalTlv(tlv)
else:
raise ValueError("Invalid check type")
def check_mle_advertisement(command_msg):
command_msg.assertSentWithHopLimit(255)
command_msg.assertSentToDestinationAddress(config.LINK_LOCAL_ALL_NODES_ADDRESS)
command_msg.assertSentToDestinationAddress(
config.LINK_LOCAL_ALL_NODES_ADDRESS
)
command_msg.assertMleMessageContainsTlv(mle.SourceAddress)
command_msg.assertMleMessageContainsTlv(mle.LeaderData)
command_msg.assertMleMessageContainsTlv(mle.Route64)
def check_parent_request(command_msg, is_first_request):
"""Verify a properly formatted Parent Request command message.
"""
if command_msg.mle.aux_sec_hdr.key_id_mode != 0x2:
raise ValueError("The Key Identifier Mode of the Security Control Field SHALL be set to 0x02")
raise ValueError(
"The Key Identifier Mode of the Security Control Field SHALL be set to 0x02"
)
command_msg.assertSentWithHopLimit(255)
command_msg.assertSentToDestinationAddress(config.LINK_LOCAL_ALL_ROUTERS_ADDRESS)
command_msg.assertSentToDestinationAddress(
config.LINK_LOCAL_ALL_ROUTERS_ADDRESS
)
command_msg.assertMleMessageContainsTlv(mle.Mode)
command_msg.assertMleMessageContainsTlv(mle.Challenge)
command_msg.assertMleMessageContainsTlv(mle.Version)
@@ -273,7 +363,8 @@ def check_parent_request(command_msg, is_first_request):
elif not scan_mask.end_device:
raise ValueError("Second parent request without E bit set")
def check_parent_response(command_msg, mle_frame_counter = CheckType.OPTIONAL):
def check_parent_response(command_msg, mle_frame_counter=CheckType.OPTIONAL):
"""Verify a properly formatted Parent Response command message.
"""
command_msg.assertMleMessageContainsTlv(mle.Challenge)
@@ -287,14 +378,22 @@ def check_parent_response(command_msg, mle_frame_counter = CheckType.OPTIONAL):
check_mle_optional_tlv(command_msg, mle_frame_counter, mle.MleFrameCounter)
def check_child_id_request(command_msg, tlv_request = CheckType.OPTIONAL, \
mle_frame_counter = CheckType.OPTIONAL, address_registration = CheckType.OPTIONAL, \
active_timestamp = CheckType.OPTIONAL, pending_timestamp = CheckType.OPTIONAL,
route64 = CheckType.OPTIONAL):
def check_child_id_request(
command_msg,
tlv_request=CheckType.OPTIONAL,
mle_frame_counter=CheckType.OPTIONAL,
address_registration=CheckType.OPTIONAL,
active_timestamp=CheckType.OPTIONAL,
pending_timestamp=CheckType.OPTIONAL,
route64=CheckType.OPTIONAL,
):
"""Verify a properly formatted Child Id Request command message.
"""
if command_msg.mle.aux_sec_hdr.key_id_mode != 0x2:
raise ValueError("The Key Identifier Mode of the Security Control Field SHALL be set to 0x02")
raise ValueError(
"The Key Identifier Mode of the Security Control Field SHALL be set to 0x02"
)
command_msg.assertMleMessageContainsTlv(mle.LinkLayerFrameCounter)
command_msg.assertMleMessageContainsTlv(mle.Mode)
@@ -304,19 +403,34 @@ def check_child_id_request(command_msg, tlv_request = CheckType.OPTIONAL, \
check_mle_optional_tlv(command_msg, tlv_request, mle.TlvRequest)
check_mle_optional_tlv(command_msg, mle_frame_counter, mle.MleFrameCounter)
check_mle_optional_tlv(command_msg, address_registration, mle.AddressRegistration)
check_mle_optional_tlv(
command_msg, address_registration, mle.AddressRegistration
)
check_mle_optional_tlv(command_msg, active_timestamp, mle.ActiveTimestamp)
check_mle_optional_tlv(command_msg, pending_timestamp, mle.PendingTimestamp)
check_mle_optional_tlv(
command_msg, pending_timestamp, mle.PendingTimestamp
)
check_mle_optional_tlv(command_msg, route64, mle.Route64)
check_tlv_request_tlv(command_msg, CheckType.CONTAIN, mle.TlvType.ADDRESS16)
check_tlv_request_tlv(command_msg, CheckType.CONTAIN, mle.TlvType.NETWORK_DATA)
check_tlv_request_tlv(
command_msg, CheckType.CONTAIN, mle.TlvType.ADDRESS16
)
check_tlv_request_tlv(
command_msg, CheckType.CONTAIN, mle.TlvType.NETWORK_DATA
)
def check_child_id_response(command_msg, route64 = CheckType.OPTIONAL, network_data = CheckType.OPTIONAL, \
address_registration = CheckType.OPTIONAL, active_timestamp = CheckType.OPTIONAL, \
pending_timestamp = CheckType.OPTIONAL, active_operational_dataset = CheckType.OPTIONAL, \
pending_operational_dataset = CheckType.OPTIONAL,
network_data_check = None):
def check_child_id_response(
command_msg,
route64=CheckType.OPTIONAL,
network_data=CheckType.OPTIONAL,
address_registration=CheckType.OPTIONAL,
active_timestamp=CheckType.OPTIONAL,
pending_timestamp=CheckType.OPTIONAL,
active_operational_dataset=CheckType.OPTIONAL,
pending_operational_dataset=CheckType.OPTIONAL,
network_data_check=None,
):
"""Verify a properly formatted Child Id Response command message.
"""
command_msg.assertMleMessageContainsTlv(mle.SourceAddress)
@@ -325,67 +439,105 @@ def check_child_id_response(command_msg, route64 = CheckType.OPTIONAL, network_d
check_mle_optional_tlv(command_msg, route64, mle.Route64)
check_mle_optional_tlv(command_msg, network_data, mle.NetworkData)
check_mle_optional_tlv(command_msg, address_registration, mle.AddressRegistration)
check_mle_optional_tlv(
command_msg, address_registration, mle.AddressRegistration
)
check_mle_optional_tlv(command_msg, active_timestamp, mle.ActiveTimestamp)
check_mle_optional_tlv(command_msg, pending_timestamp, mle.PendingTimestamp)
check_mle_optional_tlv(command_msg, active_operational_dataset, mle.ActiveOperationalDataset)
check_mle_optional_tlv(command_msg, pending_operational_dataset, mle.PendingOperationalDataset)
check_mle_optional_tlv(
command_msg, pending_timestamp, mle.PendingTimestamp
)
check_mle_optional_tlv(
command_msg, active_operational_dataset, mle.ActiveOperationalDataset
)
check_mle_optional_tlv(
command_msg, pending_operational_dataset, mle.PendingOperationalDataset
)
if network_data_check is not None:
network_data_tlv = command_msg.assertMleMessageContainsTlv(mle.NetworkData)
network_data_tlv = command_msg.assertMleMessageContainsTlv(
mle.NetworkData
)
network_data_check.check(network_data_tlv)
def check_prefix(prefix):
"""Verify if a prefix contains 6loWPAN sub-TLV and border router sub-TLV
"""
assert contains_tlv(prefix.sub_tlvs, network_data.BorderRouter), 'Prefix doesn\'t contain a border router sub-TLV!'
assert contains_tlv(prefix.sub_tlvs, network_data.LowpanId), 'Prefix doesn\'t contain a LowpanId sub-TLV!'
assert contains_tlv(
prefix.sub_tlvs, network_data.BorderRouter
), 'Prefix doesn\'t contain a border router sub-TLV!'
assert contains_tlv(
prefix.sub_tlvs, network_data.LowpanId
), 'Prefix doesn\'t contain a LowpanId sub-TLV!'
def check_child_update_request_from_child(command_msg, source_address=CheckType.OPTIONAL,
leader_data=CheckType.OPTIONAL, challenge=CheckType.OPTIONAL, time_out=CheckType.OPTIONAL,
address_registration=CheckType.OPTIONAL, tlv_request_tlv=CheckType.OPTIONAL,
active_timestamp=CheckType.OPTIONAL, CIDs=[]):
def check_child_update_request_from_child(
command_msg,
source_address=CheckType.OPTIONAL,
leader_data=CheckType.OPTIONAL,
challenge=CheckType.OPTIONAL,
time_out=CheckType.OPTIONAL,
address_registration=CheckType.OPTIONAL,
tlv_request_tlv=CheckType.OPTIONAL,
active_timestamp=CheckType.OPTIONAL,
CIDs=[],
):
command_msg.assertMleMessageContainsTlv(mle.Mode)
check_mle_optional_tlv(command_msg, source_address, mle.SourceAddress)
check_mle_optional_tlv(command_msg, leader_data, mle.LeaderData)
check_mle_optional_tlv(command_msg, challenge, mle.Challenge)
check_mle_optional_tlv(command_msg, time_out, mle.Timeout)
check_mle_optional_tlv(command_msg, address_registration, mle.AddressRegistration)
check_mle_optional_tlv(
command_msg, address_registration, mle.AddressRegistration
)
check_mle_optional_tlv(command_msg, tlv_request_tlv, mle.TlvRequest)
check_mle_optional_tlv(command_msg, active_timestamp, mle.ActiveTimestamp)
if (address_registration == CheckType.CONTAIN) and len(CIDs) > 0:
_check_address_registration(command_msg, CIDs)
def check_coap_optional_tlv(coap_msg, type, tlv):
if (type == CheckType.CONTAIN):
if type == CheckType.CONTAIN:
coap_msg.assertCoapMessageContainsTlv(tlv)
elif (type == CheckType.NOT_CONTAIN):
elif type == CheckType.NOT_CONTAIN:
coap_msg.assertCoapMessageDoesNotContainTlv(tlv)
elif (type == CheckType.OPTIONAL):
elif type == CheckType.OPTIONAL:
coap_msg.assertCoapMessageContainsOptionalTlv(tlv)
else:
raise ValueError("Invalid check type")
def check_router_id_cached(node, router_id, cached = True):
def check_router_id_cached(node, router_id, cached=True):
"""Verify if the node has cached any entries based on the router ID
"""
eidcaches = node.get_eidcaches()
if cached:
assert any(router_id == (int(rloc, 16) >> 10) for (_, rloc) in eidcaches)
assert any(
router_id == (int(rloc, 16) >> 10) for (_, rloc) in eidcaches
)
else:
assert any(router_id == (int(rloc, 16) >> 10) for (_, rloc) in eidcaches) is False
assert (
any(router_id == (int(rloc, 16) >> 10) for (_, rloc) in eidcaches)
is False
)
def contains_tlv(sub_tlvs, tlv_type):
"""Verify if a specific type of tlv is included in a sub-tlv list.
"""
return any(isinstance(sub_tlv, tlv_type) for sub_tlv in sub_tlvs)
def contains_tlvs(sub_tlvs, tlv_types):
"""Verify if all types of tlv in a list are included in a sub-tlv list.
"""
return all((any(isinstance(sub_tlv, tlv_type) for sub_tlv in sub_tlvs)) for tlv_type in tlv_types)
return all(
(any(isinstance(sub_tlv, tlv_type) for sub_tlv in sub_tlvs))
for tlv_type in tlv_types
)
def check_secure_mle_key_id_mode(command_msg, key_id_mode):
"""Verify if the mle command message sets the right key id mode.
@@ -393,7 +545,10 @@ def check_secure_mle_key_id_mode(command_msg, key_id_mode):
assert isinstance(command_msg.mle, mle.MleMessageSecured)
assert command_msg.mle.aux_sec_hdr.key_id_mode == key_id_mode
def check_data_response(command_msg, network_data_check=None, active_timestamp=CheckType.OPTIONAL):
def check_data_response(
command_msg, network_data_check=None, active_timestamp=CheckType.OPTIONAL
):
"""Verify a properly formatted Data Response command message.
"""
check_secure_mle_key_id_mode(command_msg, 0x02)
@@ -401,12 +556,20 @@ def check_data_response(command_msg, network_data_check=None, active_timestamp=C
command_msg.assertMleMessageContainsTlv(mle.LeaderData)
check_mle_optional_tlv(command_msg, active_timestamp, mle.ActiveTimestamp)
if network_data_check is not None:
network_data_tlv = command_msg.assertMleMessageContainsTlv(mle.NetworkData)
network_data_tlv = command_msg.assertMleMessageContainsTlv(
mle.NetworkData
)
network_data_check.check(network_data_tlv)
def check_child_update_request_from_parent(command_msg, leader_data=CheckType.OPTIONAL,
network_data=CheckType.OPTIONAL, challenge=CheckType.OPTIONAL,
tlv_request=CheckType.OPTIONAL, active_timestamp=CheckType.OPTIONAL):
def check_child_update_request_from_parent(
command_msg,
leader_data=CheckType.OPTIONAL,
network_data=CheckType.OPTIONAL,
challenge=CheckType.OPTIONAL,
tlv_request=CheckType.OPTIONAL,
active_timestamp=CheckType.OPTIONAL,
):
"""Verify a properly formatted Child Update Request(from parent) command message.
"""
check_secure_mle_key_id_mode(command_msg, 0x02)
@@ -418,10 +581,19 @@ def check_child_update_request_from_parent(command_msg, leader_data=CheckType.OP
check_mle_optional_tlv(command_msg, tlv_request, mle.TlvRequest)
check_mle_optional_tlv(command_msg, active_timestamp, mle.ActiveTimestamp)
def check_child_update_response(command_msg, timeout=CheckType.OPTIONAL,
address_registration=CheckType.OPTIONAL, address16=CheckType.OPTIONAL,
leader_data=CheckType.OPTIONAL, network_data=CheckType.OPTIONAL, response=CheckType.OPTIONAL,
link_layer_frame_counter=CheckType.OPTIONAL, mle_frame_counter=CheckType.OPTIONAL, CIDs=[]):
def check_child_update_response(
command_msg,
timeout=CheckType.OPTIONAL,
address_registration=CheckType.OPTIONAL,
address16=CheckType.OPTIONAL,
leader_data=CheckType.OPTIONAL,
network_data=CheckType.OPTIONAL,
response=CheckType.OPTIONAL,
link_layer_frame_counter=CheckType.OPTIONAL,
mle_frame_counter=CheckType.OPTIONAL,
CIDs=[],
):
"""Verify a properly formatted Child Update Response from parent
"""
check_secure_mle_key_id_mode(command_msg, 0x02)
@@ -429,37 +601,51 @@ def check_child_update_response(command_msg, timeout=CheckType.OPTIONAL,
command_msg.assertMleMessageContainsTlv(mle.SourceAddress)
command_msg.assertMleMessageContainsTlv(mle.Mode)
check_mle_optional_tlv(command_msg, timeout, mle.Timeout)
check_mle_optional_tlv(command_msg, address_registration, mle.AddressRegistration)
check_mle_optional_tlv(
command_msg, address_registration, mle.AddressRegistration
)
check_mle_optional_tlv(command_msg, address16, mle.Address16)
check_mle_optional_tlv(command_msg, leader_data, mle.LeaderData)
check_mle_optional_tlv(command_msg, network_data, mle.NetworkData)
check_mle_optional_tlv(command_msg, response, mle.Response)
check_mle_optional_tlv(command_msg, link_layer_frame_counter, mle.LinkLayerFrameCounter)
check_mle_optional_tlv(
command_msg, link_layer_frame_counter, mle.LinkLayerFrameCounter
)
check_mle_optional_tlv(command_msg, mle_frame_counter, mle.MleFrameCounter)
if (address_registration == CheckType.CONTAIN) and len(CIDs) > 0:
_check_address_registration(command_msg, CIDs)
def _check_address_registration(command_msg, CIDs=[]):
addresses = command_msg.assertMleMessageContainsTlv(mle.AddressRegistration).addresses
for cid in CIDs:
found = False
for address in addresses:
if isinstance(address, mle.AddressCompressed):
if cid == address.cid:
found = True
break
assert found, "AddressRegistration TLV doesn't have CID {} ".format(cid)
addresses = command_msg.assertMleMessageContainsTlv(
mle.AddressRegistration
).addresses
for cid in CIDs:
found = False
for address in addresses:
if isinstance(address, mle.AddressCompressed):
if cid == address.cid:
found = True
break
assert found, "AddressRegistration TLV doesn't have CID {} ".format(
cid
)
def get_sub_tlv(tlvs, tlv_type):
for sub_tlv in tlvs:
if isinstance(sub_tlv, tlv_type):
return sub_tlv
def check_address_registration_tlv(addr_reg_tlv, address_set):
"""Verify all addresses contained in address_set are contained in add_reg_tlv
"""
assert all(addr in addr_reg_tlv.addresses for addr in address_set), 'Some addresses are not included in AddressRegistration TLV'
assert all(
addr in addr_reg_tlv.addresses for addr in address_set
), 'Some addresses are not included in AddressRegistration TLV'
def assert_contains_tlv(tlvs, check_type, tlv_type):
"""Assert a tlv list contains specific tlv and return the first qualified.
@@ -476,39 +662,55 @@ def assert_contains_tlv(tlvs, check_type, tlv_type):
else:
raise ValueError("Invalid check type: {}".format(check_type))
def check_discovery_request(command_msg):
"""Verify a properly formatted Thread Discovery Request command message.
"""
assert not isinstance(command_msg.mle, mle.MleMessageSecured)
tlvs = command_msg.assertMleMessageContainsTlv(mle.ThreadDiscovery).tlvs
request = assert_contains_tlv(tlvs, CheckType.CONTAIN, mesh_cop.DiscoveryRequest)
request = assert_contains_tlv(
tlvs, CheckType.CONTAIN, mesh_cop.DiscoveryRequest
)
assert request.version == config.PROTOCOL_VERSION
def check_discovery_response(command_msg, request_src_addr, steering_data=CheckType.OPTIONAL):
def check_discovery_response(
command_msg, request_src_addr, steering_data=CheckType.OPTIONAL
):
"""Verify a properly formatted Thread Discovery Response command message.
"""
assert not isinstance(command_msg.mle, mle.MleMessageSecured)
assert command_msg.mac_header.src_address.type == common.MacAddressType.LONG
assert (
command_msg.mac_header.src_address.type == common.MacAddressType.LONG
)
assert command_msg.mac_header.dest_address == request_src_addr
tlvs = command_msg.assertMleMessageContainsTlv(mle.ThreadDiscovery).tlvs
response = assert_contains_tlv(tlvs, CheckType.CONTAIN, mesh_cop.DiscoveryResponse)
response = assert_contains_tlv(
tlvs, CheckType.CONTAIN, mesh_cop.DiscoveryResponse
)
assert response.version == config.PROTOCOL_VERSION
assert_contains_tlv(tlvs, CheckType.CONTAIN, mesh_cop.ExtendedPanid)
assert_contains_tlv(tlvs, CheckType.CONTAIN, mesh_cop.NetworkName)
assert_contains_tlv(tlvs, steering_data, mesh_cop.SteeringData)
assert_contains_tlv(tlvs, steering_data, mesh_cop.JoinerUdpPort)
check_type = CheckType.CONTAIN if response.native_flag else CheckType.OPTIONAL
check_type = (
CheckType.CONTAIN if response.native_flag else CheckType.OPTIONAL
)
assert_contains_tlv(tlvs, check_type, mesh_cop.CommissionerUdpPort)
def get_joiner_udp_port_in_discovery_response(command_msg):
"""Get the udp port specified in a DISCOVERY RESPONSE message
"""
tlvs = command_msg.assertMleMessageContainsTlv(mle.ThreadDiscovery).tlvs
udp_port_tlv = assert_contains_tlv(tlvs, CheckType.CONTAIN, mesh_cop.JoinerUdpPort)
udp_port_tlv = assert_contains_tlv(
tlvs, CheckType.CONTAIN, mesh_cop.JoinerUdpPort
)
return udp_port_tlv.udp_port
def check_joiner_commissioning_messages(commissioning_messages):
"""Verify COAP messages sent by joiner while commissioning process.
"""
@@ -516,21 +718,32 @@ def check_joiner_commissioning_messages(commissioning_messages):
assert len(commissioning_messages) >= 2
join_fin_req = commissioning_messages[0]
assert join_fin_req.type == mesh_cop.MeshCopMessageType.JOIN_FIN_REQ
assert_contains_tlv(join_fin_req.tlvs, CheckType.NOT_CONTAIN, mesh_cop.ProvisioningUrl)
assert_contains_tlv(
join_fin_req.tlvs, CheckType.NOT_CONTAIN, mesh_cop.ProvisioningUrl
)
join_ent_rsp = commissioning_messages[1]
assert join_ent_rsp.type == mesh_cop.MeshCopMessageType.JOIN_ENT_RSP
def check_commissioner_commissioning_messages(commissioning_messages):
"""Verify COAP messages sent by commissioner while commissioning process.
"""
assert any(msg.type == mesh_cop.MeshCopMessageType.JOIN_FIN_RSP for msg in commissioning_messages)
assert any(
msg.type == mesh_cop.MeshCopMessageType.JOIN_FIN_RSP
for msg in commissioning_messages
)
def check_joiner_router_commissioning_messages(commissioning_messages):
"""Verify COAP messages sent by joiner router while commissioning process.
"""
assert any(msg.type == mesh_cop.MeshCopMessageType.JOIN_ENT_NTF for msg in commissioning_messages)
assert any(
msg.type == mesh_cop.MeshCopMessageType.JOIN_ENT_NTF
for msg in commissioning_messages
)
return None
def check_payload_same(tp1, tp2):
"""Verfiy two payloads are totally the same.
A payload is a tuple of tlvs.
@@ -538,7 +751,10 @@ def check_payload_same(tp1, tp2):
assert len(tp1) == len(tp2)
for tlv in tp2:
peer_tlv = get_sub_tlv(tp1, type(tlv))
assert peer_tlv is not None and peer_tlv == tlv, 'peer_tlv:{}, tlv:{} type:{}'.format(peer_tlv, tlv, type(tlv))
assert (
peer_tlv is not None and peer_tlv == tlv
), 'peer_tlv:{}, tlv:{} type:{}'.format(peer_tlv, tlv, type(tlv))
def check_coap_message(msg, payloads, dest_addrs=None):
if dest_addrs is not None:
@@ -550,25 +766,30 @@ def check_coap_message(msg, payloads, dest_addrs=None):
assert found, 'Destination address incorrect'
check_payload_same(msg.coap.payload, payloads)
class SinglePrefixCheck:
class SinglePrefixCheck:
def __init__(self, prefix=None, border_router_16=None):
self._prefix = prefix
self._border_router_16 = border_router_16
def check(self, prefix_tlv):
border_router_tlv = assert_contains_tlv(prefix_tlv.sub_tlvs, CheckType.CONTAIN, network_data.BorderRouter)
lowpan_id_tlv = assert_contains_tlv(prefix_tlv.sub_tlvs, CheckType.CONTAIN, network_data.LowpanId)
border_router_tlv = assert_contains_tlv(
prefix_tlv.sub_tlvs, CheckType.CONTAIN, network_data.BorderRouter
)
assert_contains_tlv(
prefix_tlv.sub_tlvs, CheckType.CONTAIN, network_data.LowpanId
)
result = True
if self._prefix is not None:
result &= (self._prefix == binascii.hexlify(prefix_tlv.prefix))
result &= self._prefix == binascii.hexlify(prefix_tlv.prefix)
if self._border_router_16 is not None:
result &= (self._border_router_16 == border_router_tlv.border_router_16)
result &= (
self._border_router_16 == border_router_tlv.border_router_16
)
return result
class PrefixesCheck:
def __init__(self, prefix_cnt=0, prefix_check_list=[]):
self._prefix_cnt = prefix_cnt
self._prefix_check_list = prefix_check_list
@@ -576,7 +797,9 @@ class PrefixesCheck:
def check(self, prefix_tlvs):
# if prefix_cnt is given, then check count only
if self._prefix_cnt > 0:
assert len(prefix_tlvs) >= self._prefix_cnt, 'prefix count is less than expected'
assert (
len(prefix_tlvs) >= self._prefix_cnt
), 'prefix count is less than expected'
else:
for prefix_check in self._prefix_check_list:
found = False
@@ -588,28 +811,37 @@ class PrefixesCheck:
class CommissioningDataCheck:
def __init__(self, stable=None, sub_tlv_type_list=[]):
self._stable = stable
self._sub_tlv_type_list = sub_tlv_type_list
def check(self, commissioning_data_tlv):
if self._stable is not None:
assert self._stable == commissioning_data_tlv.stable, 'Commissioning Data stable flag is not correct'
assert contains_tlvs(commissioning_data_tlv.sub_tlvs, self._sub_tlv_type_list), 'Some sub tlvs are missing in Commissioning Data'
assert (
self._stable == commissioning_data_tlv.stable
), 'Commissioning Data stable flag is not correct'
assert contains_tlvs(
commissioning_data_tlv.sub_tlvs, self._sub_tlv_type_list
), 'Some sub tlvs are missing in Commissioning Data'
class NetworkDataCheck:
def __init__(self, prefixes_check=None, commissioning_data_check=None):
self._prefixes_check = prefixes_check
self._commissioning_data_check = commissioning_data_check
def check(self, network_data_tlv):
if self._prefixes_check is not None:
prefix_tlvs = [tlv for tlv in network_data_tlv.tlvs if isinstance(tlv, network_data.Prefix)]
prefix_tlvs = [
tlv
for tlv in network_data_tlv.tlvs
if isinstance(tlv, network_data.Prefix)
]
self._prefixes_check.check(prefix_tlvs)
if self._commissioning_data_check is not None:
commissioning_data_tlv = assert_contains_tlv(network_data_tlv.tlvs, CheckType.CONTAIN, network_data.CommissioningData)
commissioning_data_tlv = assert_contains_tlv(
network_data_tlv.tlvs,
CheckType.CONTAIN,
network_data.CommissioningData,
)
self._commissioning_data_check.check(commissioning_data_tlv)
+28 -10
View File
@@ -38,11 +38,14 @@ import ipaddress
def expect_the_same_class(self, other):
if not isinstance(other, self.__class__):
raise TypeError("Expected the same class. Got {} and {}".format(type(self), type(other)))
raise TypeError(
"Expected the same class. Got {} and {}".format(
type(self), type(other)
)
)
class MessageInfo(object):
def __init__(self):
self.aux_sec_hdr = None
self.aux_sec_hdr_bytes = None
@@ -110,7 +113,6 @@ class MacAddressType(IntEnum):
class MacAddress(object):
def __init__(self, mac_address, _type, big_endian=True):
if _type == MacAddressType.SHORT:
length = 2
@@ -137,16 +139,26 @@ class MacAddress(object):
def convert_to_iid(self):
if self._type == MacAddressType.SHORT:
return bytearray([0x00, 0x00, 0x00, 0xff, 0xfe, 0x00]) + self._mac_address[:2]
return (
bytearray([0x00, 0x00, 0x00, 0xff, 0xfe, 0x00])
+ self._mac_address[:2]
)
elif self._type == MacAddressType.LONG:
return bytearray([self._mac_address[0] ^ 0x02]) + self._mac_address[1:]
return (
bytearray([self._mac_address[0] ^ 0x02])
+ self._mac_address[1:]
)
else:
raise RuntimeError("Could not convert to IID. Invalid MAC address type: {}".format(self._type))
raise RuntimeError(
"Could not convert to IID. Invalid MAC address type: {}".format(
self._type))
@classmethod
def from_eui64(cls, eui64, big_endian=True):
if not isinstance(eui64, bytearray):
raise RuntimeError("Could not create MAC address from EUI64. Invalid data type: {}".format(type(eui64)))
raise RuntimeError(
"Could not create MAC address from EUI64. Invalid data type: {}".format(
type(eui64)))
return cls(eui64, MacAddressType.LONG)
@@ -157,12 +169,18 @@ class MacAddress(object):
elif isinstance(rloc16, bytearray):
mac_address = rloc16[:2]
else:
raise RuntimeError("Could not create MAC address from RLOC16. Invalid data type: {}".format(type(rloc16)))
raise RuntimeError(
"Could not create MAC address from RLOC16. Invalid data type: {}".format(
type(rloc16)))
return cls(mac_address, MacAddressType.SHORT)
def __eq__(self, other):
return (self.type == other.type) and (self.mac_address == other.mac_address)
return (self.type == other.type) and (
self.mac_address == other.mac_address
)
def __repr__(self):
return "MacAddress(mac_address=b'{}', type={})".format(hexlify(self.mac_address), MacAddressType(self._type))
return "MacAddress(mac_address=b'{}', type={})".format(
hexlify(self.mac_address), MacAddressType(self._type)
)
+95 -50
View File
@@ -46,7 +46,7 @@ import sniffer
MESH_LOCAL_PREFIX = 'fdde:ad00:beef::/64'
MESH_LOCAL_PREFIX_REGEX_PATTERN = '^fdde:ad00:beef:(0){0,4}:'
ROUTING_LOCATOR = '64/:0:ff:fe00:/16'
ROUTING_LOCATOR_REGEX_PATTERN = '.*:(0)?:0{0,2}ff:fe00:\w{1,4}$'
ROUTING_LOCATOR_REGEX_PATTERN = r'.*:(0)?:0{0,2}ff:fe00:\w{1,4}$'
LINK_LOCAL = 'fe80:/112'
LINK_LOCAL_REGEX_PATTERN = '^fe80:.*'
ALOC_FLAG_REGEX_PATTERN = '.*:fc..$'
@@ -56,11 +56,36 @@ REALM_LOCAL_ALL_ROUTERS_ADDRESS = 'ff03::2'
LINK_LOCAL_ALL_NODES_ADDRESS = 'ff02::1'
LINK_LOCAL_ALL_ROUTERS_ADDRESS = 'ff02::2'
DEFAULT_MASTER_KEY = bytearray([0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff])
DEFAULT_MASTER_KEY = bytearray(
[
0x00,
0x11,
0x22,
0x33,
0x44,
0x55,
0x66,
0x77,
0x88,
0x99,
0xaa,
0xbb,
0xcc,
0xdd,
0xee,
0xff,
]
)
ADDRESS_TYPE = Enum('ADDRESS_TYPE', ('LINK_LOCAL', 'GLOBAL', 'RLOC', 'ALOC', 'ML_EID'))
RSSI = {'LINK_QULITY_0': -100, 'LINK_QULITY_1': -95, 'LINK_QULITY_2': -85, 'LINK_QULITY_3': -65}
ADDRESS_TYPE = Enum(
'ADDRESS_TYPE', ('LINK_LOCAL', 'GLOBAL', 'RLOC', 'ALOC', 'ML_EID')
)
RSSI = {
'LINK_QULITY_0': -100,
'LINK_QULITY_1': -95,
'LINK_QULITY_2': -85,
'LINK_QULITY_3': -65,
}
SNIFFER_ID = int(os.getenv('SNIFFER_ID', 34))
PANID = 0xface
@@ -80,14 +105,16 @@ LEADER_NOTIFY_SED_BY_CHILD_UPDATE_REQUEST = True
PROTOCOL_VERSION = 2
def create_default_network_data_prefix_sub_tlvs_factories():
return {
network_data.TlvType.HAS_ROUTE: network_data.HasRouteFactory(
routes_factory=network_data.RoutesFactory(
route_factory=network_data.RouteFactory())
route_factory=network_data.RouteFactory()
)
),
network_data.TlvType.BORDER_ROUTER: network_data.BorderRouterFactory(),
network_data.TlvType.LOWPAN_ID: network_data.LowpanIdFactory()
network_data.TlvType.LOWPAN_ID: network_data.LowpanIdFactory(),
}
@@ -97,9 +124,7 @@ def create_default_network_data_prefix_sub_tlvs_factory():
def create_default_network_data_service_sub_tlvs_factories():
return {
network_data.TlvType.SERVER: network_data.ServerFactory()
}
return {network_data.TlvType.SERVER: network_data.ServerFactory()}
def create_default_network_data_service_sub_tlvs_factory():
@@ -138,7 +163,8 @@ def create_default_network_data_tlvs_factories():
def create_default_network_data_tlvs_factory():
return network_data.NetworkDataTlvsFactory(
sub_tlvs_factories=create_default_network_data_tlvs_factories())
sub_tlvs_factories=create_default_network_data_tlvs_factories()
)
def create_default_mle_tlv_route64_factory():
@@ -148,21 +174,27 @@ def create_default_mle_tlv_route64_factory():
def create_default_mle_tlv_network_data_factory():
return mle.NetworkDataFactory(
network_data_tlvs_factory=create_default_network_data_tlvs_factory())
network_data_tlvs_factory=create_default_network_data_tlvs_factory()
)
def create_default_mle_tlv_address_registration_factory():
return mle.AddressRegistrationFactory(
addr_compressed_factory=mle.AddressCompressedFactory(),
addr_full_factory=mle.AddressFullFactory())
addr_full_factory=mle.AddressFullFactory(),
)
def create_default_mle_tlv_thread_discovery_factory():
return mle.ThreadDiscoveryFactory(
thread_discovery_tlvs_factory=create_default_thread_discovery_tlvs_factory())
def create_default_thread_discovery_tlvs_factory():
return mesh_cop.ThreadDiscoveryTlvsFactory(
sub_tlvs_factories=create_default_thread_discovery_sub_tlvs_factories())
sub_tlvs_factories=create_default_thread_discovery_sub_tlvs_factories()
)
def create_default_thread_discovery_sub_tlvs_factories():
return {
@@ -172,9 +204,10 @@ def create_default_thread_discovery_sub_tlvs_factories():
mesh_cop.TlvType.NETWORK_NAME: mesh_cop.NetworkNameFactory(),
mesh_cop.TlvType.STEERING_DATA: mesh_cop.SteeringDataFactory(),
mesh_cop.TlvType.JOINER_UDP_PORT: mesh_cop.JoinerUdpPortFactory(),
mesh_cop.TlvType.COMMISSIONER_UDP_PORT: mesh_cop.CommissionerUdpPortFactory()
mesh_cop.TlvType.COMMISSIONER_UDP_PORT: mesh_cop.CommissionerUdpPortFactory(),
}
def create_default_mle_tlvs_factories():
return {
mle.TlvType.SOURCE_ADDRESS: mle.SourceAddressFactory(),
@@ -203,20 +236,24 @@ def create_default_mle_tlvs_factories():
mle.TlvType.PENDING_OPERATIONAL_DATASET: mle.PendingOperationalDatasetFactory(),
mle.TlvType.TIME_REQUEST: mle.TimeRequestFactory(),
mle.TlvType.TIME_PARAMETER: mle.TimeParameterFactory(),
mle.TlvType.THREAD_DISCOVERY: create_default_mle_tlv_thread_discovery_factory()
mle.TlvType.THREAD_DISCOVERY: create_default_mle_tlv_thread_discovery_factory(),
}
def create_default_mle_crypto_engine(master_key):
return net_crypto.CryptoEngine(crypto_material_creator=net_crypto.MleCryptoMaterialCreator(master_key))
return net_crypto.CryptoEngine(
crypto_material_creator=net_crypto.MleCryptoMaterialCreator(master_key)
)
def create_default_mle_message_factory(master_key):
return mle.MleMessageFactory(
aux_sec_hdr_factory=net_crypto.AuxiliarySecurityHeaderFactory(),
mle_command_factory=mle.MleCommandFactory(
tlvs_factories=create_default_mle_tlvs_factories()),
crypto_engine=create_default_mle_crypto_engine(master_key))
tlvs_factories=create_default_mle_tlvs_factories()
),
crypto_engine=create_default_mle_crypto_engine(master_key),
)
def create_deafult_network_tlvs_factories():
@@ -230,17 +267,21 @@ def create_deafult_network_tlvs_factories():
network_layer.TlvType.ROUTER_MASK: network_layer.RouterMaskFactory(),
network_layer.TlvType.ND_OPTION: network_layer.NdOptionFactory(),
network_layer.TlvType.ND_DATA: network_layer.NdDataFactory(),
network_layer.TlvType.THREAD_NETWORK_DATA: network_layer.ThreadNetworkDataFactory(create_default_network_data_tlvs_factory()),
network_layer.TlvType.THREAD_NETWORK_DATA: network_layer.ThreadNetworkDataFactory(
create_default_network_data_tlvs_factory()
),
network_layer.TlvType.XTAL_ACCURACY: network_layer.XtalAccuracyFactory(),
# Routing information are distributed in a Thread network by MLE Routing TLV
# which is in fact MLE Route64 TLV. Thread specificaton v1.1. - Chapter 5.20
network_layer.TlvType.MLE_ROUTING: create_default_mle_tlv_route64_factory()
network_layer.TlvType.MLE_ROUTING: create_default_mle_tlv_route64_factory(),
}
def create_default_network_tlvs_factory():
return SubTlvsFactory(sub_tlvs_factories=create_deafult_network_tlvs_factories())
return SubTlvsFactory(
sub_tlvs_factories=create_deafult_network_tlvs_factories()
)
def create_default_mesh_cop_tlvs_factories():
return {
@@ -280,11 +321,15 @@ def create_default_mesh_cop_tlvs_factories():
mesh_cop.TlvType.COUNT: mesh_cop.CountFactory(),
mesh_cop.TlvType.PERIOD: mesh_cop.PeriodFactory(),
mesh_cop.TlvType.SCAN_DURATION: mesh_cop.ScanDurationFactory(),
mesh_cop.TlvType.ENERGY_LIST: mesh_cop.EnergyListFactory()
mesh_cop.TlvType.ENERGY_LIST: mesh_cop.EnergyListFactory(),
}
def create_default_mesh_cop_tlvs_factory():
return SubTlvsFactory(sub_tlvs_factories=create_default_mesh_cop_tlvs_factories())
return SubTlvsFactory(
sub_tlvs_factories=create_default_mesh_cop_tlvs_factories()
)
def create_default_uri_path_based_payload_factories():
network_layer_tlvs_factory = create_default_network_tlvs_factory()
@@ -297,25 +342,26 @@ def create_default_uri_path_based_payload_factories():
"/a/an": network_layer_tlvs_factory,
"/a/sd": network_layer_tlvs_factory,
"/c/lp": mesh_cop_tlvs_factory,
"/c/cs": mesh_cop_tlvs_factory
"/c/cs": mesh_cop_tlvs_factory,
}
def create_default_coap_message_factory():
return coap.CoapMessageFactory(options_factory=coap.CoapOptionsFactory(),
uri_path_based_payload_factories=create_default_uri_path_based_payload_factories(),
message_id_to_uri_path_binder=coap.CoapMessageIdToUriPathBinder())
return coap.CoapMessageFactory(
options_factory=coap.CoapOptionsFactory(),
uri_path_based_payload_factories=create_default_uri_path_based_payload_factories(),
message_id_to_uri_path_binder=coap.CoapMessageIdToUriPathBinder(),
)
def create_default_ipv6_hop_by_hop_options_factories():
return {
109: ipv6.MPLOptionFactory()
}
return {109: ipv6.MPLOptionFactory()}
def create_default_ipv6_hop_by_hop_options_factory():
return ipv6.HopByHopOptionsFactory(
options_factories=create_default_ipv6_hop_by_hop_options_factories())
options_factories=create_default_ipv6_hop_by_hop_options_factories()
)
def create_default_based_on_src_dst_ports_udp_payload_factory(master_key):
@@ -327,7 +373,7 @@ def create_default_based_on_src_dst_ports_udp_payload_factory(master_key):
src_dst_port_based_payload_factories={
19788: mle_message_factory,
61631: coap_message_factory,
1000: dtls_message_factory
1000: dtls_message_factory,
}
)
@@ -341,7 +387,7 @@ def create_default_ipv6_icmp_body_factories():
ipv6.ICMP_DESTINATION_UNREACHABLE: ipv6.ICMPv6DestinationUnreachableFactory(),
ipv6.ICMP_ECHO_REQUEST: ipv6.ICMPv6EchoBodyFactory(),
ipv6.ICMP_ECHO_RESPONSE: ipv6.ICMPv6EchoBodyFactory(),
"default": ipv6.BytesPayloadFactory()
"default": ipv6.BytesPayloadFactory(),
}
@@ -349,33 +395,30 @@ def create_default_ipv6_upper_layer_factories(master_key):
return {
ipv6.IPV6_NEXT_HEADER_UDP: ipv6.UDPDatagramFactory(
udp_header_factory=ipv6.UDPHeaderFactory(),
udp_payload_factory=create_default_based_on_src_dst_ports_udp_payload_factory(master_key)
udp_payload_factory=create_default_based_on_src_dst_ports_udp_payload_factory(
master_key
),
),
ipv6.IPV6_NEXT_HEADER_ICMP: ipv6.ICMPv6Factory(
body_factories=create_default_ipv6_icmp_body_factories()
)
),
}
def create_default_lowpan_extension_headers_factories():
return {
ipv6.IPV6_NEXT_HEADER_HOP_BY_HOP: lowpan.LowpanHopByHopFactory(
hop_by_hop_options_factory=create_default_ipv6_hop_by_hop_options_factory()
)
}
return {ipv6.IPV6_NEXT_HEADER_HOP_BY_HOP: lowpan.LowpanHopByHopFactory(
hop_by_hop_options_factory=create_default_ipv6_hop_by_hop_options_factory())}
def create_default_ipv6_extension_headers_factories():
return {
ipv6.IPV6_NEXT_HEADER_HOP_BY_HOP: ipv6.HopByHopFactory(
hop_by_hop_options_factory=create_default_ipv6_hop_by_hop_options_factory())
}
return {ipv6.IPV6_NEXT_HEADER_HOP_BY_HOP: ipv6.HopByHopFactory(
hop_by_hop_options_factory=create_default_ipv6_hop_by_hop_options_factory())}
def create_default_ipv6_packet_factory(master_key):
return ipv6.IPv6PacketFactory(
ehf=create_default_ipv6_extension_headers_factories(),
ulpf=create_default_ipv6_upper_layer_factories(master_key)
ulpf=create_default_ipv6_upper_layer_factories(master_key),
)
@@ -387,7 +430,7 @@ def create_default_lowpan_decompressor(context_manager):
lowpan_extension_headers_factory=lowpan.LowpanExtensionHeadersFactory(
ext_headers_factories=create_default_lowpan_extension_headers_factories()
),
lowpan_udp_header_factory=lowpan.LowpanUdpHeaderFactory()
lowpan_udp_header_factory=lowpan.LowpanUdpHeaderFactory(),
)
@@ -398,12 +441,14 @@ def create_default_thread_context_manager():
return context_manager
def create_default_lowpan_parser(context_manager, master_key=DEFAULT_MASTER_KEY):
def create_default_lowpan_parser(
context_manager, master_key=DEFAULT_MASTER_KEY
):
return lowpan.LowpanParser(
lowpan_mesh_header_factory=lowpan.LowpanMeshHeaderFactory(),
lowpan_decompressor=create_default_lowpan_decompressor(context_manager),
lowpan_fragements_buffers_manager=lowpan.LowpanFragmentsBuffersManager(),
ipv6_packet_factory=create_default_ipv6_packet_factory(master_key)
ipv6_packet_factory=create_default_ipv6_packet_factory(master_key),
)
+6 -2
View File
@@ -27,6 +27,10 @@
# POSSIBILITY OF SUCH DAMAGE.
#
from builtins import input
class Inspector:
"""This class provides a way to inspect node status of a test case.
@@ -71,7 +75,7 @@ class Inspector:
"""
node = self.test_case.nodes[nodeid]
while True:
line = raw_input('> ')
line = input('> ')
if not line:
continue
@@ -85,7 +89,7 @@ class Inspector:
""" Start inspecting.
"""
while True:
line = raw_input('# ')
line = input('# ')
if not line:
continue

Some files were not shown because too many files have changed in this diff Show More