mirror of
https://github.com/espressif/openthread.git
synced 2026-07-31 08:07:47 +00:00
[test] save packets as pcap file in thread-cert tests (#2965)
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -134,6 +134,7 @@ EXTRA_DIST = \
|
||||
network_layer.py \
|
||||
node.py \
|
||||
node_cli.py \
|
||||
pcap.py \
|
||||
simulator.py \
|
||||
sniffer.py \
|
||||
sniffer_transport.py \
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user