From c77d7f55f599799ba660729bc8385f3c3e7ef24c Mon Sep 17 00:00:00 2001 From: Claudio-Daniel Freire Date: Tue, 26 Apr 2011 16:25:28 +0200 Subject: [PATCH] Ticket #21: emulation - require emulation=True when using TUNs - automatically add ipfwslice and vsys/ipfw-be as requirements when using emulation --- src/nepi/testbeds/planetlab/execute.py | 6 ++++ src/nepi/testbeds/planetlab/metadata_v01.py | 2 ++ test/testbeds/planetlab/execute.py | 35 +++++++++++++++++++-- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/nepi/testbeds/planetlab/execute.py b/src/nepi/testbeds/planetlab/execute.py index 860f6c30..0a22f14a 100644 --- a/src/nepi/testbeds/planetlab/execute.py +++ b/src/nepi/testbeds/planetlab/execute.py @@ -194,6 +194,12 @@ class TestbedController(testbed_impl.TestbedController): for attr,val in parameters.iteritems(): setattr(node, attr, val) + # If emulation is enabled, we automatically need + # some vsys interfaces and packages + if node.emulation: + node.required_vsys.add('ipfw-be') + node.required_packages.add('ipfwslice') + return node def _make_node_iface(self, parameters): diff --git a/src/nepi/testbeds/planetlab/metadata_v01.py b/src/nepi/testbeds/planetlab/metadata_v01.py index 666b5715..41a123e5 100644 --- a/src/nepi/testbeds/planetlab/metadata_v01.py +++ b/src/nepi/testbeds/planetlab/metadata_v01.py @@ -27,6 +27,8 @@ def connect_node_iface_inet(testbed_instance, iface, inet): iface.has_internet = True def connect_tun_iface_node(testbed_instance, node, iface): + if not node.emulation: + raise RuntimeError, "Usage of TUN interfaces requires emulation" iface.node = node node.required_vsys.update(('fd_tuntap', 'vif_up')) diff --git a/test/testbeds/planetlab/execute.py b/test/testbeds/planetlab/execute.py index 758959e0..91e2a41e 100755 --- a/test/testbeds/planetlab/execute.py +++ b/test/testbeds/planetlab/execute.py @@ -167,6 +167,7 @@ FIONREAD = 0x[0-9a-fA-F]{8}.* instance.defer_create(2, "Node") instance.defer_create_set(2, "hostname", "onelab11.pl.sophia.inria.fr") + instance.defer_create_set(2, "emulation", True) # require emulation instance.defer_create(3, "NodeInterface") instance.defer_connect(2, "devs", 3, "node") instance.defer_create(4, "Internet") @@ -176,9 +177,10 @@ FIONREAD = 0x[0-9a-fA-F]{8}.* instance.defer_create(6, "Application") instance.defer_create_set(6, "command", """ set -e -test -e /vsys/vif_up.in -test -e /vsys/vif_up.out -test -e /vsys/fd_tuntap.control +netconfig help > /dev/null +test -e /vsys/vif_up.in > /dev/null +test -e /vsys/vif_up.out > /dev/null +test -e /vsys/fd_tuntap.control > /dev/null echo 'OKIDOKI' """) instance.defer_create_set(6, "sudo", True) # only sudo has access to /vsys @@ -199,6 +201,33 @@ echo 'OKIDOKI' self.assertEqual(comp_result, test_result) instance.stop() instance.shutdown() + + @test_util.skipUnless(test_util.pl_auth() is not None, "Test requires PlanetLab authentication info (PL_USER and PL_PASS environment variables)") + def test_tun_emulation_requirement(self): + instance = self.make_instance() + + instance.defer_create(2, "Node") + instance.defer_create_set(2, "hostname", "onelab11.pl.sophia.inria.fr") + instance.defer_create(3, "NodeInterface") + instance.defer_connect(2, "devs", 3, "node") + instance.defer_create(4, "Internet") + instance.defer_connect(3, "inet", 4, "devs") + instance.defer_create(5, "TunInterface") + instance.defer_connect(2, "devs", 5, "node") + instance.defer_create(6, "Application") + instance.defer_create_set(6, "command", "false") + instance.defer_add_trace(6, "stdout") + instance.defer_connect(6, "node", 2, "apps") + + try: + instance.do_setup() + instance.do_create() + instance.do_connect() + instance.do_preconfigure() + instance.do_configure() + self.fail("Usage of TUN without emulation should fail") + except Exception,e: + pass if __name__ == '__main__': -- 2.47.0