From: Alina Quereilhac Date: Wed, 12 Feb 2014 23:43:36 +0000 (+0100) Subject: Fix #123 [NS3] Upload a local ns-3 sources tar X-Git-Tag: nepi-3.1.0~120^2~4 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=b769dda475a0b56e7a36e1763a2610990b1c1074;p=nepi.git Fix #123 [NS3] Upload a local ns-3 sources tar --- diff --git a/src/nepi/resources/linux/application.py b/src/nepi/resources/linux/application.py index d4374212..a1a9f972 100644 --- a/src/nepi/resources/linux/application.py +++ b/src/nepi/resources/linux/application.py @@ -358,11 +358,14 @@ class LinuxApplication(ResourceManager): stdout = "deploy_stdout", stderr = "deploy_stderr") - def upload_sources(self): + def upload_sources(self, src_dir = None): sources = self.get("sources") command = "" + if not src_dir: + src_dir = self.node.src_dir + if sources: self.info("Uploading sources ") @@ -379,15 +382,16 @@ class LinuxApplication(ResourceManager): command.append( " ( " # Check if the source already exists - " ls ${SRC}/%(basename)s " + " ls %(src_dir)s/%(basename)s " " || ( " # If source doesn't exist, download it and check # that it it downloaded ok - " wget -c --directory-prefix=${SRC} %(source)s && " - " ls ${SRC}/%(basename)s " + " wget -c --directory-prefix=%(src_dir)s %(source)s && " + " ls %(src_dir)s/%(basename)s " " ) ) " % { "basename": os.path.basename(source), - "source": source + "source": source, + "src_dir": src_dir }) command = " && ".join(command) @@ -397,7 +401,7 @@ class LinuxApplication(ResourceManager): if sources: sources = ' '.join(sources) - self.node.upload(sources, self.node.src_dir, overwrite = False) + self.node.upload(sources, src_dir, overwrite = False) return command diff --git a/src/nepi/resources/linux/ns3/ns3simulation.py b/src/nepi/resources/linux/ns3/ns3simulation.py index fbc8a388..5b41c143 100644 --- a/src/nepi/resources/linux/ns3/ns3simulation.py +++ b/src/nepi/resources/linux/ns3/ns3simulation.py @@ -152,6 +152,12 @@ class LinuxNS3Simulation(LinuxApplication, NS3Simulation): os.path.join(self.node.src_dir, "%s.tar.gz" % self.pygccxml_version), overwrite = False) + # Upload user defined ns-3 sources + self.node.mkdir(os.path.join(self.node.src_dir, "ns-3")) + src_dir = os.path.join(self.node.src_dir, "ns-3") + + super(LinuxNS3Simulation, self).upload_sources(src_dir = src_dir) + def upload_start_command(self): command = self.get("command") env = self.get("env") @@ -202,6 +208,18 @@ class LinuxNS3Simulation(LinuxApplication, NS3Simulation): if not self.get("depends"): self.set("depends", self._dependencies) + if self.get("sources"): + sources = self.get("sources") + source = sources.split(" ")[0] + basename = os.path.basename(source) + version = ( basename.strip().replace(".tar.gz", "") + .replace(".tar","") + .replace(".gz","") + .replace(".zip","") ) + + self.set("ns3Version", version) + self.set("sources", source) + if not self.get("build"): self.set("build", self._build) @@ -286,9 +304,9 @@ class LinuxNS3Simulation(LinuxApplication, NS3Simulation): @property def _dependencies(self): if self.node.use_rpm: - return ( " gcc gcc-c++ python python-devel mercurial bzr tcpdump socat gccxml") + return ( " gcc gcc-c++ python python-devel mercurial bzr tcpdump socat gccxml unzip") elif self.node.use_deb: - return ( " gcc g++ python python-dev mercurial bzr tcpdump socat gccxml python-pygccxml") + return ( " gcc g++ python python-dev mercurial bzr tcpdump socat gccxml python-pygccxml unzip") return "" @property @@ -301,6 +319,47 @@ class LinuxNS3Simulation(LinuxApplication, NS3Simulation): @property def _build(self): + # If the user defined local sources for ns-3, we uncompress the sources + # on the remote sources directory. Else we clone ns-3 from the official repo. + source = self.get("sources") + if not source: + copy_ns3_cmd = "hg clone %(ns3_repo)s/%(ns3_version)s ${SRC}/ns-3/%(ns3_version)s" \ + % ({ + 'ns3_version': self.get("ns3Version"), + 'ns3_repo': self.ns3_repo, + }) + else: + if source.find(".tar.gz") > -1: + copy_ns3_cmd = ( + "tar xzf ${SRC}/ns-3/%(basename)s " + " --strip-components=1 -C ${SRC}/ns-3/%(ns3_version)s " + ) % ({ + 'basename': os.path.basename(source), + 'ns3_version': self.get("ns3Version"), + }) + elif source.find(".tar") > -1: + copy_ns3_cmd = ( + "tar xf ${SRC}/ns-3/%(basename)s " + " --strip-components=1 -C ${SRC}/ns-3/%(ns3_version)s " + ) % ({ + 'basename': os.path.basename(source), + 'ns3_version': self.get("ns3Version"), + }) + elif source.find(".zip") > -1: + basename = os.path.basename(source) + bare_basename = basename.replace(".zip", "") \ + .replace(".tar", "") \ + .replace(".tar.gz", "") + + copy_ns3_cmd = ( + "unzip ${SRC}/ns-3/%(basename)s && " + "mv ${SRC}/ns-3/%(bare_basename)s ${SRC}/ns-3/%(ns3_version)s " + ) % ({ + 'bare_basename': basename_name, + 'basename': basename, + 'ns3_version': self.get("ns3Version"), + }) + return ( # Test if ns-3 is alredy installed " ( " @@ -329,7 +388,7 @@ class LinuxNS3Simulation(LinuxApplication, NS3Simulation): " && " " ( " " ( " - " test -d ${BIN}/pybindgen/%(pybindgen_version)s && " + " test -d ${SRC}/pybindgen/%(pybindgen_version)s && " " echo 'binaries found, nothing to do' " " ) " " || " @@ -342,17 +401,18 @@ class LinuxNS3Simulation(LinuxApplication, NS3Simulation): " ./waf " " ) " " ) " - " && " - # Clone and build ns-3 + " && " + # Get ns-3 source code " ( " - " hg clone %(ns3_repo)s/%(ns3_version)s ${SRC}/ns-3/%(ns3_version)s" - " ) " + " mkdir -p ${SRC}/ns-3/%(ns3_version)s && " + " %(copy_ns3_cmd)s " + " ) " " ) " ) % ({ - 'ns3_repo': self.ns3_repo, 'ns3_version': self.get("ns3Version"), 'pybindgen_version': self.get("pybindgenVersion"), 'pygccxml_version': self.pygccxml_version, + 'copy_ns3_cmd': copy_ns3_cmd, }) @property diff --git a/src/nepi/resources/ns3/ns3application.py b/src/nepi/resources/ns3/ns3application.py index 46c98ea2..cbb76b46 100644 --- a/src/nepi/resources/ns3/ns3application.py +++ b/src/nepi/resources/ns3/ns3application.py @@ -59,7 +59,7 @@ class NS3BaseApplication(NS3Base): def state(self): if self._state == ResourceState.STARTED: is_running = self.simulation.invoke(self.uuid, "isAppRunning") - + if not is_running: self.set_stopped() diff --git a/test/resources/linux/application.py b/test/resources/linux/application.py index edbc2ba7..8d8fe215 100755 --- a/test/resources/linux/application.py +++ b/test/resources/linux/application.py @@ -32,7 +32,7 @@ import unittest class LinuxApplicationTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "alina" diff --git a/test/resources/linux/ccn/ccnping.py b/test/resources/linux/ccn/ccnping.py index 672a11cf..a7401280 100644 --- a/test/resources/linux/ccn/ccnping.py +++ b/test/resources/linux/ccn/ccnping.py @@ -29,7 +29,7 @@ import unittest class LinuxCCNPingTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "alina" diff --git a/test/resources/linux/ccn/fibentry.py b/test/resources/linux/ccn/fibentry.py index 00ac5e87..c6b219ce 100644 --- a/test/resources/linux/ccn/fibentry.py +++ b/test/resources/linux/ccn/fibentry.py @@ -29,7 +29,7 @@ import unittest class LinuxFIBEntryTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "nepi" diff --git a/test/resources/linux/interface.py b/test/resources/linux/interface.py index bd4d74d0..379f92e7 100755 --- a/test/resources/linux/interface.py +++ b/test/resources/linux/interface.py @@ -35,7 +35,7 @@ import unittest class LinuxInterfaceTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "alina" diff --git a/test/resources/linux/mtr.py b/test/resources/linux/mtr.py index c62848af..a34068d8 100755 --- a/test/resources/linux/mtr.py +++ b/test/resources/linux/mtr.py @@ -29,7 +29,7 @@ import unittest class LinuxMtrTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "alina" diff --git a/test/resources/linux/node.py b/test/resources/linux/node.py index cebf0d81..e7d44e1f 100755 --- a/test/resources/linux/node.py +++ b/test/resources/linux/node.py @@ -32,7 +32,7 @@ import unittest class LinuxNodeTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "alina" diff --git a/test/resources/linux/nping.py b/test/resources/linux/nping.py index b6af3dc4..19c4ef44 100755 --- a/test/resources/linux/nping.py +++ b/test/resources/linux/nping.py @@ -29,7 +29,7 @@ import unittest class LinuxNPingTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "alina" diff --git a/test/resources/linux/ns3/ns-3.18-user.tar.gz b/test/resources/linux/ns3/ns-3.18-user.tar.gz new file mode 100644 index 00000000..fcbfb70c Binary files /dev/null and b/test/resources/linux/ns3/ns-3.18-user.tar.gz differ diff --git a/test/resources/linux/ns3/ns3simulation.py b/test/resources/linux/ns3/ns3simulation.py index 095ae9a4..4352e3b4 100644 --- a/test/resources/linux/ns3/ns3simulation.py +++ b/test/resources/linux/ns3/ns3simulation.py @@ -75,9 +75,10 @@ def add_csma_device(ec, ns3_node, address, prefix): class LinuxNS3ClientTest(unittest.TestCase): def setUp(self): - self.fedora_host = "nepi2.pl.sophia.inria.fr" + #self.fedora_host = "nepi2.pl.sophia.inria.fr" + self.fedora_host = "planetlabpc1.upf.edu" #self.fedora_host = "peeramide.irisa.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" #self.fedora_user = "inria_alina" self.fedora_identity = "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME']) @@ -92,8 +93,6 @@ class LinuxNS3ClientTest(unittest.TestCase): #ec.set(node, "cleanHome", True) simu = ec.register_resource("LinuxNS3Simulation") - ec.set(simu, "verbose", True) - ec.set(simu, "nsLog", "V4Ping:Node") ec.register_connection(simu, node) nsnode1 = add_ns3_node(ec, simu) @@ -138,6 +137,99 @@ class LinuxNS3ClientTest(unittest.TestCase): ec.set(node, "cleanProcesses", True) #ec.set(node, "cleanHome", True) + simu = ec.register_resource("LinuxNS3Simulation") + ec.register_connection(simu, node) + + nsnode1 = add_ns3_node(ec, simu) + dev1 = add_csma_device(ec, nsnode1, "10.0.0.1", "30") + + nsnode2 = add_ns3_node(ec, simu) + dev2 = add_csma_device(ec, nsnode2, "10.0.0.2", "30") + + # Create channel + chan = ec.register_resource("ns3::CsmaChannel") + ec.set(chan, "Delay", "0s") + ec.register_connection(chan, dev1) + ec.register_connection(chan, dev2) + + ### create pinger + ping = ec.register_resource("ns3::V4Ping") + ec.set (ping, "Remote", "10.0.0.2") + ec.set (ping, "Interval", "1s") + ec.set (ping, "Verbose", True) + ec.set (ping, "StartTime", "0s") + ec.set (ping, "StopTime", "20s") + ec.register_connection(ping, nsnode1) + + ec.deploy() + + ec.wait_finished([ping]) + + stdout = ec.trace(simu, "stdout") + + expected = "20 packets transmitted, 20 received, 0% packet loss" + self.assertTrue(stdout.find(expected) > -1) + + ec.shutdown() + + def test_compile_local_source(self): + ec = ExperimentController(exp_id = "test-ns3-local-source") + + node = ec.register_resource("LinuxNode") + ec.set(node, "hostname", self.fedora_host) + ec.set(node, "username", self.fedora_user) + ec.set(node, "identity", self.fedora_identity) + ec.set(node, "cleanProcesses", True) + #ec.set(node, "cleanHome", True) + + simu = ec.register_resource("LinuxNS3Simulation") + sources = os.path.join(os.path.dirname(os.path.realpath(__file__)), + "ns-3.18-user.tar.gz") + ec.set(simu, "sources", sources) + ec.register_connection(simu, node) + + nsnode1 = add_ns3_node(ec, simu) + dev1 = add_csma_device(ec, nsnode1, "10.0.0.1", "30") + + nsnode2 = add_ns3_node(ec, simu) + dev2 = add_csma_device(ec, nsnode2, "10.0.0.2", "30") + + # Create channel + chan = ec.register_resource("ns3::CsmaChannel") + ec.set(chan, "Delay", "0s") + ec.register_connection(chan, dev1) + ec.register_connection(chan, dev2) + + ### create pinger + ping = ec.register_resource("ns3::V4Ping") + ec.set (ping, "Remote", "10.0.0.2") + ec.set (ping, "Interval", "1s") + ec.set (ping, "Verbose", True) + ec.set (ping, "StartTime", "0s") + ec.set (ping, "StopTime", "20s") + ec.register_connection(ping, nsnode1) + + ec.deploy() + + ec.wait_finished([ping]) + + stdout = ec.trace(simu, "stdout") + + expected = "20 packets transmitted, 20 received, 0% packet loss" + self.assertTrue(stdout.find(expected) > -1) + + ec.shutdown() + + def test_compile_debug_mode(self): + ec = ExperimentController(exp_id = "test-ns3-debug-mode") + + node = ec.register_resource("LinuxNode") + ec.set(node, "hostname", self.fedora_host) + ec.set(node, "username", self.fedora_user) + ec.set(node, "identity", self.fedora_identity) + ec.set(node, "cleanProcesses", True) + #ec.set(node, "cleanHome", True) + simu = ec.register_resource("LinuxNS3Simulation") ec.set(simu, "verbose", True) ec.set(simu, "nsLog", "V4Ping:Node") @@ -173,6 +265,10 @@ class LinuxNS3ClientTest(unittest.TestCase): expected = "20 packets transmitted, 20 received, 0% packet loss" self.assertTrue(stdout.find(expected) > -1) + + stderr = ec.trace(simu, "stderr") + expected = "V4Ping:Read32" + self.assertTrue(stderr.find(expected) > -1) ec.shutdown() @@ -187,9 +283,9 @@ class LinuxNS3ClientTest(unittest.TestCase): #ec.set(node, "cleanHome", True) simu = ec.register_resource("LinuxNS3Simulation") - ec.set(simu, "verbose", True) ec.set(simu, "simulatorImplementationType", "ns3::RealtimeSimulatorImpl") ec.set(simu, "checksumEnabled", True) + ec.set(simu, "verbose", True) ec.register_connection(simu, node) nsnode1 = add_ns3_node(ec, simu) @@ -216,7 +312,7 @@ class LinuxNS3ClientTest(unittest.TestCase): ec.deploy() ec.wait_finished([ping]) - + stdout = ec.trace(simu, "stdout") expected = "20 packets transmitted, 20 received, 0% packet loss" @@ -243,8 +339,6 @@ class LinuxNS3ClientTest(unittest.TestCase): #ec.set(node, "cleanHome", True) simu = ec.register_resource("LinuxNS3Simulation") - ec.set(simu, "verbose", True) - ec.set(simu, "nsLog", "V4Ping:Node") ec.register_connection(simu, node) nsnode1 = add_ns3_node(ec, simu) diff --git a/test/resources/linux/ping.py b/test/resources/linux/ping.py index 88466909..65302767 100755 --- a/test/resources/linux/ping.py +++ b/test/resources/linux/ping.py @@ -29,7 +29,7 @@ import unittest class LinuxPingTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "alina" diff --git a/test/resources/linux/tcpdump.py b/test/resources/linux/tcpdump.py index 6c9a9be9..6ba73753 100755 --- a/test/resources/linux/tcpdump.py +++ b/test/resources/linux/tcpdump.py @@ -29,7 +29,7 @@ import unittest class LinuxTcpdumpTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "alina" diff --git a/test/resources/linux/traceroute.py b/test/resources/linux/traceroute.py index dfdae422..996472e0 100755 --- a/test/resources/linux/traceroute.py +++ b/test/resources/linux/traceroute.py @@ -29,7 +29,7 @@ import unittest class LinuxTracerouteTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "alina" diff --git a/test/resources/linux/udptest.py b/test/resources/linux/udptest.py index aeafe6a9..37bfc888 100755 --- a/test/resources/linux/udptest.py +++ b/test/resources/linux/udptest.py @@ -29,7 +29,7 @@ import unittest class LinuxUdpTestTestCase(unittest.TestCase): def setUp(self): self.fedora_host = "nepi2.pl.sophia.inria.fr" - self.fedora_user = "inria_test" + self.fedora_user = "inria_nepi" self.ubuntu_host = "roseval.pl.sophia.inria.fr" self.ubuntu_user = "alina"