[test] save packets as pcap file in thread-cert tests (#2965)

This commit is contained in:
Yakun Xu
2018-08-20 09:27:04 -07:00
committed by Jonathan Hui
parent e731babedb
commit af2bfc1cc4
99 changed files with 280 additions and 186 deletions
@@ -62,8 +62,8 @@ class Cert_5_1_01_RouterAttach(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -78,8 +78,8 @@ class Cert_5_1_02_ChildAddressTimeout(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -72,8 +72,8 @@ class Cert_5_1_03_RouterAddressReallocation(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -72,8 +72,8 @@ class Cert_5_1_04_RouterAddressReallocation(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -65,8 +65,8 @@ class Cert_5_1_05_RouterAddressTimeout(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -62,8 +62,8 @@ class Cert_5_1_06_RemoveRouterId(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -71,8 +71,8 @@ class Cert_5_1_07_MaxChildCount(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -89,8 +89,8 @@ class Cert_5_1_08_RouterAttachConnectivity(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -89,8 +89,8 @@ class Cert_5_1_09_REEDAttachConnectivity(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -79,8 +79,8 @@ class Cert_5_1_10_RouterAttachLinkQuality(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -79,8 +79,8 @@ class Cert_5_1_11_REEDAttachLinkQuality(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -69,8 +69,8 @@ class Cert_5_1_12_NewRouterSync(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.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 \
@@ -64,8 +64,8 @@ class Cert_5_1_13_RouterReset(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -79,8 +79,8 @@ class Cert_5_2_01_REEDAttach(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -77,8 +77,8 @@ class Cert_5_2_3_LeaderReject2Hops(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1
@@ -81,8 +81,8 @@ class Cert_5_2_4_REEDUpgrade(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1 Ensure topology is formed correctly without the DUT_REED.
@@ -76,8 +76,8 @@ class Cert_5_2_5_AddressQuery(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1. LEADER: DHCPv6 Server for prefix 2001::/64.
@@ -57,8 +57,8 @@ class Cert_5_2_06_RouterDowngrade(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1 Ensure topology is formed correctly without ROUTER24.
@@ -54,8 +54,8 @@ class Cert_5_2_7_REEDSynchronization(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1. Ensure topology is formed correctly without DUT_ROUTER1.
@@ -55,8 +55,8 @@ class Cert_5_3_1_LinkLocal(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1
@@ -75,8 +75,8 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1
@@ -86,8 +86,8 @@ class Cert_5_3_3_AddressQuery(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1
@@ -85,8 +85,8 @@ class Cert_5_3_4_AddressMapCache(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1
@@ -77,8 +77,8 @@ class Cert_5_3_5_RoutingLinkQuality(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1
@@ -71,8 +71,8 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1
@@ -66,8 +66,8 @@ class Cert_5_3_6_RouterIdMask(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -91,8 +91,8 @@ class Cert_5_3_7_DuplicateAddress(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1
@@ -73,8 +73,8 @@ class Cert_5_3_8_ChildAddressSet(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[DUT_LEADER].start()
@@ -86,8 +86,8 @@ class Cert_5_3_09_AddressQuery(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1 & 2 ALL: Build and verify the topology
@@ -88,8 +88,8 @@ class Cert_5_3_10_AddressQuery(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1 & 2
@@ -66,8 +66,8 @@ class Cert_5_3_11_AddressQueryTimeoutIntervals(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1 ALL: Build and verify the topology
@@ -64,8 +64,8 @@ class Cert_5_5_1_LeaderReboot(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
# 1 ALL: Build and verify the topology
@@ -69,8 +69,8 @@ class Cert_5_5_2_LeaderReboot(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -93,8 +93,8 @@ class Cert_5_5_3_SplitMergeChildren(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -86,8 +86,8 @@ class Cert_5_5_4_SplitMergeRouters(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -78,8 +78,8 @@ class Cert_5_5_5_SplitMergeREED(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -78,8 +78,8 @@ class Cert_5_5_7_SplitMergeThreeWay(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER1].start()
@@ -87,7 +87,7 @@ class Cert_5_5_8_SplitRoutersLostLeader(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
node.destroy()
def test(self):
self.nodes[LEADER1].start()
@@ -75,8 +75,8 @@ class Cert_5_6_1_NetworkDataLeaderAsBr(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_5_6_2_NetworkDataRouterAsBr(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_5_6_3_NetworkDataRegisterAfterAttachLeader(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_5_6_4_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_5_6_5_NetworkDataRegisterAfterAttachRouter(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_5_6_6_NetworkDataExpiration(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -66,8 +66,8 @@ class Cert_5_6_7_NetworkDataRequestREED(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -66,8 +66,8 @@ class Cert_5_6_8_ContextManagement(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -83,8 +83,8 @@ class Cert_5_6_9_NetworkDataForwarding(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -59,8 +59,8 @@ class Cert_5_8_1_KeySynchronization(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -60,8 +60,8 @@ class Cert_5_8_2_KeyIncrement(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -61,8 +61,8 @@ class Cert_5_8_3_KeyIncrementRollOver(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -58,8 +58,8 @@ class Cert_6_1_1_RouterAttach(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -65,8 +65,8 @@ class Cert_6_1_2_REEDAttach(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -85,8 +85,8 @@ class Cert_6_1_3_RouterAttachConnectivity(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -85,8 +85,8 @@ class Cert_6_1_4_REEDAttachConnectivity(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_6_1_5_RouterAttachLinkQuality(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_6_1_6_REEDAttachLinkQuality(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -89,8 +89,8 @@ class Cert_6_1_7_EDSynchronization(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -65,8 +65,8 @@ class Cert_6_2_1_NewPartition(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -76,8 +76,8 @@ class Cert_6_2_2_NewPartition(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -66,8 +66,8 @@ class Cert_6_3_1_OrphanReattach(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -58,8 +58,8 @@ class Cert_6_3_2_NetworkDataUpdate(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -57,8 +57,8 @@ class Cert_6_4_1_LinkLocal(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -65,8 +65,8 @@ class Cert_5_3_2_RealmLocal(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -61,8 +61,8 @@ class Cert_6_5_1_ChildResetSynchronize(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -60,8 +60,8 @@ class Cert_6_5_2_ChildResetReattach(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -59,8 +59,8 @@ class Cert_6_6_1_KeyIncrement(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -60,8 +60,8 @@ class Cert_6_6_2_KeyIncrement1(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_7_1_1_BorderRouterAsLeader(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_7_1_2_BorderRouterAsRouter(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_7_1_3_BorderRouterAsLeader(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_7_1_4_BorderRouterAsRouter(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -75,8 +75,8 @@ class Cert_7_1_5_BorderRouterAsRouter(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -55,8 +55,8 @@ class Cert_8_1_01_Commissioning(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[COMMISSIONER].interface_up()
@@ -55,8 +55,8 @@ class Cert_8_1_02_Commissioning(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[COMMISSIONER].interface_up()
@@ -64,8 +64,8 @@ class Cert_8_2_01_JoinerRouter(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[COMMISSIONER].interface_up()
@@ -64,8 +64,8 @@ class Cert_8_2_02_JoinerRouter(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[COMMISSIONER].interface_up()
@@ -55,8 +55,8 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -80,8 +80,8 @@ class Cert_9_2_7_DelayTimer(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -102,7 +102,7 @@ class Cert_9_2_8_PersistentDatasets(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
node.destroy()
def test(self):
self.nodes[LEADER].start()
@@ -83,8 +83,8 @@ class Cert_9_2_09_PendingPartition(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -93,8 +93,8 @@ class Cert_9_2_10_PendingPartition(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -94,8 +94,8 @@ class Cert_9_2_11_MasterKey(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -90,8 +90,8 @@ class Cert_9_2_12_Announce(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER1].start()
@@ -73,8 +73,8 @@ class Cert_9_2_13_EnergyScan(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -73,8 +73,8 @@ class Cert_9_2_14_PanIdQuery(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER1].start()
@@ -84,8 +84,8 @@ class Cert_9_2_15_PendingPartition(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -85,8 +85,8 @@ class Cert_9_2_16_ActivePendingPartition(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER].start()
@@ -71,8 +71,8 @@ class Cert_9_2_17_Orphan(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def test(self):
self.nodes[LEADER1].start()
@@ -103,7 +103,7 @@ class Cert_9_2_18_RollBackActiveTimestamp(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
node.destroy()
def test(self):
self.nodes[LEADER].start()
+1
View File
@@ -134,6 +134,7 @@ EXTRA_DIST = \
network_layer.py \
node.py \
node_cli.py \
pcap.py \
simulator.py \
sniffer.py \
sniffer_transport.py \
+1 -1
View File
@@ -42,7 +42,7 @@ class Cert_Cli(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
node.destroy()
def test(self):
commands = self.nodes[LEADER].get_commands()
+1 -1
View File
@@ -58,7 +58,7 @@ class Test_MacScan(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
node.destroy()
def test(self):
self.nodes[LEADER].start()
+6 -1
View File
@@ -51,7 +51,12 @@ class Node:
self.interface.set_timeout(100)
def __del__(self):
del self.interface
self.destroy()
def destroy(self):
if self.interface:
self.interface.destroy()
self.interface = None
def set_mode(self, mode):
self.interface.set_mode(mode)
+5 -1
View File
@@ -108,11 +108,15 @@ class otCli:
self.pexpect = fdpexpect.fdspawn(os.open(serialPort, os.O_RDWR|os.O_NONBLOCK|os.O_NOCTTY))
def __del__(self):
if self.pexpect.isalive():
self.destroy()
def destroy(self):
if self.pexpect and self.pexpect.isalive():
self.send_command('exit')
self.pexpect.expect(pexpect.EOF)
self.pexpect.terminate()
self.pexpect.close(force=True)
self.pexpect = None
def send_command(self, cmd):
print("%d: %s" % (self.nodeid, cmd))
+69
View File
@@ -0,0 +1,69 @@
#
# Copyright (c) 2018, The OpenThread Authors.
# All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
""" Module to provide codec utilities for .pcap formatters. """
import struct
import time
DLT_IEEE802_15_4 = 195
PCAP_MAGIC_NUMBER = 0xa1b2c3d4
PCAP_VERSION_MAJOR = 2
PCAP_VERSION_MINOR = 4
class PcapCodec(object):
""" Utility class for .pcap formatters. """
def __init__(self, filename):
self._pcap_file = open('%s.pcap' % filename, 'wb')
self._pcap_file.write(self.encode_header())
self._epoch = time.time()
def encode_header(self):
""" Returns a pcap file header. """
return struct.pack("<LHHLLLL",
PCAP_MAGIC_NUMBER,
PCAP_VERSION_MAJOR,
PCAP_VERSION_MINOR,
0, 0, 256,
DLT_IEEE802_15_4)
def encode_frame(self, frame, sec, usec):
""" Returns a pcap encapsulation of the given frame. """
frame = frame[1:]
length = len(frame)
pcap_frame = struct.pack("<LLLL", sec, usec, length, length)
pcap_frame += frame
return pcap_frame
def _get_timestamp(self):
""" Returns the internal timestamp. """
timestamp = time.time() - self._epoch
timestamp_sec = int(timestamp)
timestamp_usec = int((timestamp - timestamp_sec) * 1000000)
return timestamp_sec, timestamp_usec
def append(self, frame, timestamp=None):
""" Appends a frame. """
if timestamp is None:
timestamp = self._get_timestamp()
pkt = self.encode_frame(frame, *timestamp)
self._pcap_file.write(pkt)
def __del__(self):
self._pcap_file.close()
+12
View File
@@ -38,6 +38,7 @@ import sys
import io
import config
import message
import pcap
class RealTime:
@@ -54,6 +55,9 @@ class RealTime:
def go(self, duration):
time.sleep(duration)
def stop(self):
pass
class VirtualTime:
BASE_PORT = 9000
@@ -73,10 +77,17 @@ class VirtualTime:
self.current_time = 0
self.current_event = None;
self._pcap = pcap.PcapCodec(os.getenv('TEST_NAME', 'current'))
self._message_factory = config.create_default_thread_message_factory()
def __del__(self):
if self.sock:
self.stop()
def stop(self):
self.sock.close()
self.sock = None
def _add_message(self, nodeid, message):
addr = ('127.0.0.1', self.port + nodeid)
@@ -167,6 +178,7 @@ class VirtualTime:
#print "-- Enqueue\t", event
bisect.insort(self.event_queue, event)
self._pcap.append(data, (event_time // 1000000, event_time % 1000000))
self._add_message(addr[1] - self.port, data)
# add radio transmit done events to event queue
+7 -4
View File
@@ -30,6 +30,8 @@
import collections
import io
import logging
import os
import pcap
import threading
try:
@@ -59,6 +61,8 @@ class Sniffer:
self.nodeid = nodeid
self._message_factory = message_factory
self._pcap = pcap.PcapCodec(os.getenv('TEST_NAME', 'current'))
# Create transport
transport_factory = sniffer_transport.SnifferTransportFactory()
self._transport = transport_factory.create_transport(nodeid)
@@ -69,9 +73,6 @@ class Sniffer:
self._buckets = collections.defaultdict(Queue.Queue)
def __del__(self):
del self._transport
def _sniffer_main_loop(self):
""" Sniffer main loop. """
@@ -80,6 +81,8 @@ class Sniffer:
while self._thread_alive.is_set():
data, nodeid = self._transport.recv(self.RECV_BUFFER_SIZE)
self._pcap.append(data)
# Ignore any exceptions
try:
msg = self._message_factory.create(io.BytesIO(data))
@@ -112,7 +115,7 @@ class Sniffer:
self._thread_alive.clear()
self._transport.close()
self._thread.join()
self._thread = None
+2 -2
View File
@@ -85,8 +85,8 @@ class Test_Service(unittest.TestCase):
def tearDown(self):
for node in list(self.nodes.values()):
node.stop()
del self.nodes
del self.simulator
node.destroy()
self.simulator.stop()
def hasAloc(self, node_id, service_id):
for addr in self.nodes[node_id].get_ip6_address(config.ADDRESS_TYPE.ALOC):
+1 -1
View File
@@ -116,7 +116,7 @@ while true; do
done
# Run a test
PORT_OFFSET=$OFFSET "$@" >$log_file 2>&1
TEST_NAME="${test_name}" PORT_OFFSET=$OFFSET "$@" >$log_file 2>&1
estatus=$?
# Return the offset