X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=test%2Fresources%2Flinux%2Fns3%2Fcross_dce_linux_ccn.py;fp=test%2Fresources%2Flinux%2Fns3%2Fcross_dce_linux_ccn.py;h=c15ef4e50daf843c194e8df45d229c71ec9929cb;hb=76ec8fbc6c987d4208dd6d987de55a2ca543962f;hp=0000000000000000000000000000000000000000;hpb=52e9a80764b98226727f1362d7c1f6246c06f92e;p=nepi.git diff --git a/test/resources/linux/ns3/cross_dce_linux_ccn.py b/test/resources/linux/ns3/cross_dce_linux_ccn.py new file mode 100755 index 00000000..c15ef4e5 --- /dev/null +++ b/test/resources/linux/ns3/cross_dce_linux_ccn.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python +# +# NEPI, a framework to manage network experiments +# Copyright (C) 2013 INRIA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Alina Quereilhac + +from nepi.execution.ec import ExperimentController +from nepi.execution.resource import ResourceState, ResourceAction +from nepi.execution.trace import TraceAttr + +from test_utils import skipIfNotAlive + +import os +import time +import unittest + +def add_ns3_node(ec, simu): + node = ec.register_resource("ns3::Node") + ec.set(node, "enableStack", True) + ec.register_connection(node, simu) + + return node + +def add_fd_device(ec, node, ip, prefix): + dev = ec.register_resource("ns3::FdNetDevice") + ec.set(dev, "ip", ip) + ec.set(dev, "prefix", prefix) + ec.register_connection(node, dev) + + return dev + +def add_tap_device(ec, node, ip, prefix): + dev = ec.register_resource("linux::Tap") + ec.set(dev, "ip", ip) + ec.set(dev, "prefix", prefix) + ec.register_connection(node, dev) + + return dev + +def add_point2point_device(ec, node, ip, prefix): + dev = ec.register_resource("ns3::PointToPointNetDevice") + ec.set(dev, "ip", ip) + ec.set(dev, "prefix", prefix) + ec.register_connection(node, dev) + + queue = ec.register_resource("ns3::DropTailQueue") + ec.register_connection(dev, queue) + + return dev + +class LinuxNS3FdNetDeviceTest(unittest.TestCase): + def setUp(self): + self.fedora_host = "nepi2.pl.sophia.inria.fr" + self.fedora_user = "inria_nepi" + self.fedora_identity = "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME']) + + @skipIfNotAlive + def t_cross_ccnpeek(self, host, user = None, identity = None): + ec = ExperimentController(exp_id = "test-linux-ns3-ccnpeek") + + node = ec.register_resource("linux::Node") + if host == "localhost": + ec.set(node, "hostname", "localhost") + else: + ec.set(node, "hostname", host) + ec.set(node, "username", user) + ec.set(node, "identity", identity) + + ec.set(node, "cleanProcesses", True) + ec.set(node, "cleanExperiment", True) + + simu = ec.register_resource("linux::ns3::Simulation") + ec.set(simu, "simulatorImplementationType", "ns3::RealtimeSimulatorImpl") + ec.set(simu, "checksumEnabled", True) + ec.set(simu, "verbose", True) + #ec.set(simu, "buildMode", "debug") + #ec.set(simu, "nsLog", "FdNetDevice") + ec.register_connection(simu, node) + + nsnode = add_ns3_node(ec, simu) + + fddev = add_fd_device(ec, nsnode, "10.0.0.2", "30") + ec.enable_trace(fddev, "pcap") + ec.enable_trace(fddev, "promiscPcap") + ec.enable_trace(fddev, "ascii") + + tap = add_tap_device(ec, node, "10.0.0.1", "30") + + crosslink = ec.register_resource("linux::ns3::TunTapFdLink") + ec.register_connection(crosslink, tap) + ec.register_connection(crosslink, fddev) + + ### create DCE applications + ccnd1 = ec.register_resource("linux::ns3::dce::CCND") + ec.set(ccnd1, "stackSize", 1<<20) + ec.set(ccnd1, "StartTime", "1s") + ec.register_connection(ccnd1, nsnode) + + poke = ec.register_resource("linux::ns3::dce::CCNPoke") + ec.set(poke, "contentName", "ccnx:/chunk0") + ec.set(poke, "content", "DATA") + ec.set(poke, "stackSize", 1<<20) + ec.set(poke, "StartTime", "4s") + ec.register_connection(poke, nsnode) + + fib1 = ec.register_resource("linux::ns3::dce::FIBEntry") + ec.set(fib1, "protocol", "udp") + ec.set(fib1, "uri", "ccnx:/") + ec.set(fib1, "host", "10.0.0.1") + ec.set(fib1, "stackSize", 1<<20) + ec.set(fib1, "StartTime", "2s") + ec.register_connection(fib1, nsnode) + + ### create Linux applications + ccnd2 = ec.register_resource("linux::CCND") + ec.register_connection(ccnd2, node) + + peek = ec.register_resource("linux::CCNPeek") + ec.set(peek, "contentName", "ccnx:/chunk0") + ec.register_connection(peek, ccnd2) + + fib2 = ec.register_resource("linux::FIBEntry") + ec.set(fib2, "protocol", "udp") + ec.set(fib2, "uri", "ccnx:/") + ec.set(fib2, "host", "10.0.0.2") + ec.register_connection(fib2, ccnd2) + + ec.register_condition(peek, ResourceAction.START, poke, + ResourceState.STARTED) + + ec.deploy() + + ec.wait_finished([peek]) + + stdout = ec.trace(peek, "stdout") + expected = "DATA" + self.assertTrue(stdout.find(expected) > -1) + + ec.shutdown() + + def ztest_cross_ccnpeek_fedora(self): + self.t_cross_cnnpeek(self.fedora_host, self.fedora_user, self.fedora_identity) + + def test_cross_ccnpeek_local(self): + self.t_cross_ccnpeek("localhost") + + +if __name__ == '__main__': + unittest.main() +