Ticket #21: emulation
authorClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Tue, 26 Apr 2011 14:25:28 +0000 (16:25 +0200)
committerClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Tue, 26 Apr 2011 14:25:28 +0000 (16:25 +0200)
 - require emulation=True when using TUNs
 - automatically add ipfwslice and vsys/ipfw-be as requirements when using emulation

src/nepi/testbeds/planetlab/execute.py
src/nepi/testbeds/planetlab/metadata_v01.py
test/testbeds/planetlab/execute.py

index 860f6c3..0a22f14 100644 (file)
@@ -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):
index 666b571..41a123e 100644 (file)
@@ -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'))
 
index 758959e..91e2a41 100755 (executable)
@@ -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__':