From dd7923ec87ed8a47cc9994ee50eae7bb8d982474 Mon Sep 17 00:00:00 2001 From: Alina Quereilhac Date: Thu, 7 Apr 2011 17:54:45 +0200 Subject: [PATCH] ns3 integration tests added. 1 test fails. --- src/nepi/core/execute.py | 4 +- .../ns3/factories_metadata_v3_9_RC3.py | 5 +- src/nepi/util/proxy.py | 18 +- test/testbeds/ns3/execute.py | 95 +--------- test/testbeds/ns3/execute2.py | 119 +++++++++++++ test/testbeds/ns3/integration.py | 164 ++++++++++++++++++ 6 files changed, 296 insertions(+), 109 deletions(-) create mode 100755 test/testbeds/ns3/execute2.py create mode 100755 test/testbeds/ns3/integration.py diff --git a/src/nepi/core/execute.py b/src/nepi/core/execute.py index c37c6d3d..857ebb53 100644 --- a/src/nepi/core/execute.py +++ b/src/nepi/core/execute.py @@ -223,10 +223,10 @@ class TestbedInstance(object): elements are done""" raise NotImplementedError - def start(self, time): + def start(self): raise NotImplementedError - def stop(self, time): + def stop(self): raise NotImplementedError def set(self, time, guid, name, value): diff --git a/src/nepi/testbeds/ns3/factories_metadata_v3_9_RC3.py b/src/nepi/testbeds/ns3/factories_metadata_v3_9_RC3.py index bf9d0a43..45696cc9 100644 --- a/src/nepi/testbeds/ns3/factories_metadata_v3_9_RC3.py +++ b/src/nepi/testbeds/ns3/factories_metadata_v3_9_RC3.py @@ -30,12 +30,13 @@ def _get_node_guid(testbed_instance, guid): return node_guid def _get_dev_number(testbed_instance, guid): - dev_guids = testbed_instance.get_connected(guid, "devs", "node") + node_guid = _get_node_guid(testbed_instance, guid) + dev_guids = testbed_instance.get_connected(node_guid, "devs", "node") interface_number = 0 for guid_ in dev_guids: if guid_ == guid: break - inteface_number += 1 + interface_number += 1 return interface_number ### create traces functions ### diff --git a/src/nepi/util/proxy.py b/src/nepi/util/proxy.py index 3f4e2194..784bf530 100644 --- a/src/nepi/util/proxy.py +++ b/src/nepi/util/proxy.py @@ -61,8 +61,8 @@ controller_messages = dict({ # TESTBED INSTANCE PROTOCOL MESSAGES testbed_messages = dict({ TRACE: "%d|%s" % (TRACE, "%d|%s"), - START: "%d|%s" % (START, "%s"), - STOP: "%d|%s" % (STOP, "%s"), + START: "%d" % START, + STOP: "%d" % STOP, SHUTDOWN: "%d" % SHUTDOWN, CONFIGURE: "%d|%s" % (CONFIGURE, "%s|%s|%d"), CREATE: "%d|%s" % (CREATE, "%d|%s"), @@ -159,8 +159,6 @@ def launch_ssh_daemon_client(root_dir, python_code, host, port, user, agent): # launch daemon proc = server.popen_ssh_subprocess(python_code, host = host, port = port, user = user, agent = agent) - #while not proc.poll(): - # time.sleep(0.5) if proc.poll(): err = proc.stderr.read() raise RuntimeError("Client could not be executed: %s" % \ @@ -265,7 +263,7 @@ def create_testbed_instance(testbed_id, testbed_version, access_config): elif mode == AccessConfiguration.MODE_DAEMON: (root_dir, log_level, user, host, port, agent) = \ get_access_config_params(access_config) - return TestbedIntanceProxy(root_dir, log_level, testbed_id = testbed_id, + return TestbedInstanceProxy(root_dir, log_level, testbed_id = testbed_id, testbed_version = testbed_version, host = host, port = port, user = user, agent = agent) raise RuntimeError("Unsupported access configuration 'mode'" % mode) @@ -371,13 +369,11 @@ class TestbedInstanceServer(server.Server): return "%d|%s" % (OK, result) def start(self, params): - time = params[1] - self._testbed.start(time) + self._testbed.start() return "%d|%s" % (OK, "") def stop(self, params): - time = params[1] - self._testbed.stop(time) + self._testbed.stop() return "%d|%s" % (OK, "") def shutdown(self, params): @@ -600,7 +596,7 @@ class ExperimentControllerServer(server.Server): self._controller.shutdown() return "%d|%s" % (OK, "") -class TestbedIntanceProxy(object): +class TestbedInstanceProxy(object): def __init__(self, root_dir, log_level, testbed_id = None, testbed_version = None, launch = True, host = None, port = None, user = None, agent = None): @@ -804,7 +800,6 @@ class TestbedIntanceProxy(object): def start(self, time = TIME_NOW): msg = testbed_messages[START] - msg = msg % (time) self._client.send_msg(msg) reply = self._client.read_reply() result = reply.split("|") @@ -815,7 +810,6 @@ class TestbedIntanceProxy(object): def stop(self, time = TIME_NOW): msg = testbed_messages[STOP] - msg = msg % (time) self._client.send_msg(msg) reply = self._client.read_reply() result = reply.split("|") diff --git a/test/testbeds/ns3/execute.py b/test/testbeds/ns3/execute.py index b8f02f7e..d7a2a631 100755 --- a/test/testbeds/ns3/execute.py +++ b/test/testbeds/ns3/execute.py @@ -16,7 +16,7 @@ class Ns3ExecuteTestCase(unittest.TestCase): @test_util.skipUnless(test_util.ns3_usable(), "Test requires working ns-3 bindings") - def ptest_run_ping_if(self): + def test_run_ping_if(self): testbed_version = "3_9_RC3" instance = ns3.TestbedInstance(testbed_version) instance.configure("homeDirectory", self.root_dir) @@ -69,99 +69,8 @@ class Ns3ExecuteTestCase(unittest.TestCase): instance.start() while instance.status(17) != STATUS_FINISHED: time.sleep(0.1) - comp_result = "- 9.021 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 ttl 64 id 9 protocol 1 offset 0 flags [none] length: 84 10.0.0.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=9)" ping_result = instance.trace(14, "P2PAsciiTrace") - self.assertNotEqual(ping_result.find(comp_result), -1) - instance.stop() - instance.shutdown() - - @test_util.skipUnless(test_util.ns3_usable(), - "Test requires working ns-3 bindings") - def test_run_ping_routing(self): - testbed_version = "3_9_RC3" - instance = ns3.TestbedInstance(testbed_version) - instance.configure("homeDirectory", self.root_dir) - instance.create(2, "ns3::Node") - instance.create(3, "ns3::Ipv4L3Protocol") - instance.create(4, "ns3::ArpL3Protocol") - instance.create(5, "ns3::Icmpv4L4Protocol") - instance.create(6, "ns3::UdpL4Protocol") - instance.connect(2, "protos", 3, "node") - instance.connect(2, "protos", 4, "node") - instance.connect(2, "protos", 5, "node") - instance.connect(2, "protos", 6, "node") - instance.create(7, "ns3::PointToPointNetDevice") - instance.create(8, "ns3::DropTailQueue") - instance.connect(2, "devs", 7, "node") - instance.connect(7, "queue", 8, "dev") - instance.add_trace(7, "P2PAsciiTrace") - instance.add_address(7, "10.0.0.1", 24, None) - - instance.create(9, "ns3::Node") - instance.create(10, "ns3::Ipv4L3Protocol") - instance.create(11, "ns3::ArpL3Protocol") - instance.create(12, "ns3::Icmpv4L4Protocol") - instance.create(13, "ns3::UdpL4Protocol") - instance.connect(9, "protos", 10, "node") - instance.connect(9, "protos", 11, "node") - instance.connect(9, "protos", 12, "node") - instance.connect(9, "protos", 13, "node") - instance.create(14, "ns3::PointToPointNetDevice") - instance.create(15, "ns3::DropTailQueue") - instance.connect(9, "devs", 14, "node") - instance.connect(14, "queue", 15, "dev") - instance.add_trace(14, "P2PAsciiTrace") - instance.add_address(14, "10.0.0.2", 24, None) - - instance.create(16, "ns3::PointToPointChannel") - instance.connect(7, "chan", 16, "dev2") - instance.connect(14, "chan", 16, "dev2") - - instance.create(17, "ns3::PointToPointNetDevice") - instance.create(18, "ns3::DropTailQueue") - instance.connect(9, "devs", 17, "node") - instance.connect(17, "queue", 18, "dev") - instance.add_trace(17, "P2PAsciiTrace") - instance.add_address(17, "10.0.1.1", 24, None) - - instance.create(19, "ns3::Node") - instance.create(20, "ns3::Ipv4L3Protocol") - instance.create(21, "ns3::ArpL3Protocol") - instance.create(22, "ns3::Icmpv4L4Protocol") - instance.create(23, "ns3::UdpL4Protocol") - instance.connect(19, "protos", 20, "node") - instance.connect(19, "protos", 21, "node") - instance.connect(19, "protos", 22, "node") - instance.connect(19, "protos", 23, "node") - instance.create(24, "ns3::PointToPointNetDevice") - instance.create(25, "ns3::DropTailQueue") - instance.connect(19, "devs", 24, "node") - instance.connect(24, "queue", 25, "dev") - instance.add_trace(24, "P2PAsciiTrace") - instance.add_address(24, "10.0.1.2", 24, None) - - instance.create(26, "ns3::PointToPointChannel") - instance.connect(17, "chan", 26, "dev2") - instance.connect(24, "chan", 26, "dev2") - - instance.create(27, "ns3::V4Ping") - instance.create_set(27, "Remote", "10.0.1.2") - instance.create_set(27, "StartTime", "0s") - instance.create_set(27, "StopTime", "10s") - instance.connect(27, "node", 2, "apps") - - instance.add_route(2, "10.0.1.0", 24, "10.0.0.2") - instance.add_route(19, "10.0.0.0", 24, "10.0.1.1") - - instance.do_setup() - instance.do_create() - instance.do_connect() - instance.do_configure() - instance.start() - while instance.status(27) != STATUS_FINISHED: - time.sleep(0.1) - comp_result = "- 9.04199 /NodeList/2/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 ttl 64 id 9 protocol 1 offset 0 flags [none] length: 84 10.0.1.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=9)" - ping_result = instance.trace(24, "P2PAsciiTrace") + comp_result = "- 9.021 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 ttl 64 id 9 protocol 1 offset 0 flags [none] length: 84 10.0.0.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=9)" self.assertNotEqual(ping_result.find(comp_result), -1) instance.stop() instance.shutdown() diff --git a/test/testbeds/ns3/execute2.py b/test/testbeds/ns3/execute2.py new file mode 100755 index 00000000..ae5f18a1 --- /dev/null +++ b/test/testbeds/ns3/execute2.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from nepi.util.constants import STATUS_FINISHED +from nepi.testbeds import ns3 +import os +import shutil +import tempfile +import test_util +import time +import unittest + +# The reason execute tests are run in separate scripts for ns3, is that the +# same ns3 Simulator will be loaded only once per process, resulting in a +# dirty state of the Simulator after the first test is executed. +# As it is not possible to reset the state of the Simulator to the original +# one, different tests should be executed in different processes (different +# unittest instance) +class Ns3ExecuteTestCase(unittest.TestCase): + def setUp(self): + self.root_dir = tempfile.mkdtemp() + + @test_util.skipUnless(test_util.ns3_usable(), + "Test requires working ns-3 bindings") + def test_run_ping_routing(self): + testbed_version = "3_9_RC3" + instance = ns3.TestbedInstance(testbed_version) + instance.configure("homeDirectory", self.root_dir) + instance.create(2, "ns3::Node") + instance.create(3, "ns3::Ipv4L3Protocol") + instance.create(4, "ns3::ArpL3Protocol") + instance.create(5, "ns3::Icmpv4L4Protocol") + instance.create(6, "ns3::UdpL4Protocol") + instance.connect(2, "protos", 3, "node") + instance.connect(2, "protos", 4, "node") + instance.connect(2, "protos", 5, "node") + instance.connect(2, "protos", 6, "node") + instance.create(7, "ns3::PointToPointNetDevice") + instance.create(8, "ns3::DropTailQueue") + instance.connect(2, "devs", 7, "node") + instance.connect(7, "queue", 8, "dev") + instance.add_trace(7, "P2PAsciiTrace") + instance.add_address(7, "10.0.0.1", 24, None) + + instance.create(9, "ns3::Node") + instance.create(10, "ns3::Ipv4L3Protocol") + instance.create(11, "ns3::ArpL3Protocol") + instance.create(12, "ns3::Icmpv4L4Protocol") + instance.create(13, "ns3::UdpL4Protocol") + instance.connect(9, "protos", 10, "node") + instance.connect(9, "protos", 11, "node") + instance.connect(9, "protos", 12, "node") + instance.connect(9, "protos", 13, "node") + instance.create(14, "ns3::PointToPointNetDevice") + instance.create(15, "ns3::DropTailQueue") + instance.connect(9, "devs", 14, "node") + instance.connect(14, "queue", 15, "dev") + instance.add_trace(14, "P2PAsciiTrace") + instance.add_address(14, "10.0.0.2", 24, None) + + instance.create(16, "ns3::PointToPointChannel") + instance.connect(7, "chan", 16, "dev2") + instance.connect(14, "chan", 16, "dev2") + + instance.create(17, "ns3::PointToPointNetDevice") + instance.create(18, "ns3::DropTailQueue") + instance.connect(9, "devs", 17, "node") + instance.connect(17, "queue", 18, "dev") + instance.add_trace(17, "P2PAsciiTrace") + instance.add_address(17, "10.0.1.1", 24, None) + + instance.create(19, "ns3::Node") + instance.create(20, "ns3::Ipv4L3Protocol") + instance.create(21, "ns3::ArpL3Protocol") + instance.create(22, "ns3::Icmpv4L4Protocol") + instance.create(23, "ns3::UdpL4Protocol") + instance.connect(19, "protos", 20, "node") + instance.connect(19, "protos", 21, "node") + instance.connect(19, "protos", 22, "node") + instance.connect(19, "protos", 23, "node") + instance.create(24, "ns3::PointToPointNetDevice") + instance.create(25, "ns3::DropTailQueue") + instance.connect(19, "devs", 24, "node") + instance.connect(24, "queue", 25, "dev") + instance.add_trace(24, "P2PAsciiTrace") + instance.add_address(24, "10.0.1.2", 24, None) + + instance.create(26, "ns3::PointToPointChannel") + instance.connect(17, "chan", 26, "dev2") + instance.connect(24, "chan", 26, "dev2") + + instance.create(27, "ns3::V4Ping") + instance.create_set(27, "Remote", "10.0.1.2") + instance.create_set(27, "StartTime", "0s") + instance.create_set(27, "StopTime", "10s") + instance.connect(27, "node", 2, "apps") + + instance.add_route(2, "10.0.1.0", 24, "10.0.0.2") + instance.add_route(19, "10.0.0.0", 24, "10.0.1.1") + + instance.do_setup() + instance.do_create() + instance.do_connect() + instance.do_configure() + instance.start() + while instance.status(27) != STATUS_FINISHED: + time.sleep(0.1) + ping_result = instance.trace(24, "P2PAsciiTrace") + comp_result = "- 9.04199 /NodeList/2/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 ttl 64 id 9 protocol 1 offset 0 flags [none] length: 84 10.0.1.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=9)" + self.assertNotEqual(ping_result.find(comp_result), -1) + instance.stop() + instance.shutdown() + + def tearDown(self): + shutil.rmtree(self.root_dir) + +if __name__ == '__main__': + unittest.main() + diff --git a/test/testbeds/ns3/integration.py b/test/testbeds/ns3/integration.py new file mode 100755 index 00000000..88bd79cb --- /dev/null +++ b/test/testbeds/ns3/integration.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import getpass +from nepi.core.design import ExperimentDescription, FactoriesProvider +from nepi.core.execute import ExperimentController +from nepi.util import proxy +import os +import shutil +import tempfile +import test_util +import time +import unittest + +class Ns3IntegrationTestCase(unittest.TestCase): + def setUp(self): + self.root_dir = tempfile.mkdtemp() + + @test_util.skipUnless(test_util.ns3_usable(), + "Test requires working ns-3 bindings") + def test_local_if(self): + exp_desc = ExperimentDescription() + testbed_version = "3_9_RC3" + testbed_id = "ns3" + ns3_provider = FactoriesProvider(testbed_id, testbed_version) + ns3_desc = exp_desc.add_testbed_description(ns3_provider) + ns3_desc.set_attribute_value("homeDirectory", self.root_dir) + + node1 = ns3_desc.create("ns3::Node") + ipv41 = ns3_desc.create("ns3::Ipv4L3Protocol") + arp1 = ns3_desc.create("ns3::ArpL3Protocol") + icmp1 = ns3_desc.create("ns3::Icmpv4L4Protocol") + node1.connector("protos").connect(ipv41.connector("node")) + node1.connector("protos").connect(arp1.connector("node")) + node1.connector("protos").connect(icmp1.connector("node")) + iface1 = ns3_desc.create("ns3::PointToPointNetDevice") + queue1 = ns3_desc.create("ns3::DropTailQueue") + node1.connector("devs").connect(iface1.connector("node")) + iface1.connector("queue").connect(queue1.connector("dev")) + trace1 = iface1.enable_trace("P2PAsciiTrace") + ip1 = iface1.add_address() + ip1.set_attribute_value("Address", "10.0.0.1") + + node2 = ns3_desc.create("ns3::Node") + ipv42 = ns3_desc.create("ns3::Ipv4L3Protocol") + arp2 = ns3_desc.create("ns3::ArpL3Protocol") + icmp2 = ns3_desc.create("ns3::Icmpv4L4Protocol") + node2.connector("protos").connect(ipv42.connector("node")) + node2.connector("protos").connect(arp2.connector("node")) + node2.connector("protos").connect(icmp2.connector("node")) + iface2 = ns3_desc.create("ns3::PointToPointNetDevice") + queue2 = ns3_desc.create("ns3::DropTailQueue") + node2.connector("devs").connect(iface2.connector("node")) + iface2.connector("queue").connect(queue2.connector("dev")) + trace2 = iface2.enable_trace("P2PAsciiTrace") + ip2 = iface2.add_address() + ip2.set_attribute_value("Address", "10.0.0.2") + + chan = ns3_desc.create("ns3::PointToPointChannel") + iface1.connector("chan").connect(chan.connector("dev2")) + iface2.connector("chan").connect(chan.connector("dev2")) + + app = ns3_desc.create("ns3::V4Ping") + app.set_attribute_value("Remote", "10.0.0.2") + app.set_attribute_value("StartTime", "0s") + app.set_attribute_value("StopTime", "20s") + app.connector("node").connect(node1.connector("apps")) + + xml = exp_desc.to_xml() + controller = ExperimentController(xml) + controller.start() + while not controller.is_finished(app.guid): + time.sleep(0.5) + ping_result = controller.trace(ns3_desc.guid, iface2.guid, "P2PAsciiTrace") + comp_result = "- 19.021 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 ttl 64 id 19 protocol 1 offset 0 flags [none] length: 84 10.0.0.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=19)" + self.assertNotEqual(ping_result.find(comp_result), -1) + controller.stop() + controller.shutdown() + + @test_util.skipUnless(test_util.ns3_usable(), + "Test requires working ns-3 bindings") + def test_all_daemonized_if(self): + exp_desc = ExperimentDescription() + testbed_version = "3_9_RC3" + testbed_id = "ns3" + ns3_provider = FactoriesProvider(testbed_id, testbed_version) + ns3_desc = exp_desc.add_testbed_description(ns3_provider) + ns3_desc.set_attribute_value("homeDirectory", self.root_dir) + + node1 = ns3_desc.create("ns3::Node") + ipv41 = ns3_desc.create("ns3::Ipv4L3Protocol") + arp1 = ns3_desc.create("ns3::ArpL3Protocol") + icmp1 = ns3_desc.create("ns3::Icmpv4L4Protocol") + node1.connector("protos").connect(ipv41.connector("node")) + node1.connector("protos").connect(arp1.connector("node")) + node1.connector("protos").connect(icmp1.connector("node")) + iface1 = ns3_desc.create("ns3::PointToPointNetDevice") + queue1 = ns3_desc.create("ns3::DropTailQueue") + node1.connector("devs").connect(iface1.connector("node")) + iface1.connector("queue").connect(queue1.connector("dev")) + trace1 = iface1.enable_trace("P2PAsciiTrace") + ip1 = iface1.add_address() + ip1.set_attribute_value("Address", "10.0.0.1") + + node2 = ns3_desc.create("ns3::Node") + ipv42 = ns3_desc.create("ns3::Ipv4L3Protocol") + arp2 = ns3_desc.create("ns3::ArpL3Protocol") + icmp2 = ns3_desc.create("ns3::Icmpv4L4Protocol") + node2.connector("protos").connect(ipv42.connector("node")) + node2.connector("protos").connect(arp2.connector("node")) + node2.connector("protos").connect(icmp2.connector("node")) + iface2 = ns3_desc.create("ns3::PointToPointNetDevice") + queue2 = ns3_desc.create("ns3::DropTailQueue") + node2.connector("devs").connect(iface2.connector("node")) + iface2.connector("queue").connect(queue2.connector("dev")) + trace2 = iface2.enable_trace("P2PAsciiTrace") + ip2 = iface2.add_address() + ip2.set_attribute_value("Address", "10.0.0.2") + + chan = ns3_desc.create("ns3::PointToPointChannel") + iface1.connector("chan").connect(chan.connector("dev2")) + iface2.connector("chan").connect(chan.connector("dev2")) + + app = ns3_desc.create("ns3::V4Ping") + app.set_attribute_value("Remote", "10.0.0.2") + app.set_attribute_value("StartTime", "0s") + app.set_attribute_value("StopTime", "20s") + app.connector("node").connect(node1.connector("apps")) + + xml = exp_desc.to_xml() + access_config = proxy.AccessConfiguration() + access_config.set_attribute_value("mode", + proxy.AccessConfiguration.MODE_DAEMON) + access_config.set_attribute_value("rootDirectory", self.root_dir) + access_config.set_attribute_value("logLevel", + proxy.AccessConfiguration.DEBUG_LEVEL) + controller = proxy.create_controller(xml, access_config) + + access_config2 = proxy.AccessConfiguration() + access_config2.set_attribute_value("mode", + proxy.AccessConfiguration.MODE_DAEMON) + inst_root_dir = os.path.join(self.root_dir, "instance") + os.mkdir(inst_root_dir) + access_config2.set_attribute_value("rootDirectory", inst_root_dir) + access_config2.set_attribute_value("logLevel", + proxy.AccessConfiguration.DEBUG_LEVEL) + controller.set_access_configuration(ns3_desc.guid, access_config2) + + controller.start() + while not controller.is_finished(app.guid): + time.sleep(0.5) + + ping_result = controller.trace(ns3_desc.guid, iface2.guid, "P2PAsciiTrace") + comp_result = "- 19.021 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 ttl 64 id 19 protocol 1 offset 0 flags [none] length: 84 10.0.0.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=19)" + self.assertNotEqual(ping_result.find(comp_result), -1) + controller.stop() + controller.shutdown() + + def tearDown(self): + shutil.rmtree(self.root_dir) + +if __name__ == '__main__': + unittest.main() + -- 2.43.0