s/dedicatedSlice/cleanProc/g
[nepi.git] / test / testbeds / planetlab / integration_ns3.py
index 2ae7c83..a737732 100755 (executable)
@@ -7,16 +7,15 @@ from nepi.core.execute import ExperimentController
 from nepi.util import proxy
 from nepi.util.constants import DeploymentConfiguration as DC, ATTR_NEPI_TESTBED_ENVIRONMENT_SETUP
 import os
+import re
 import shutil
 import tempfile
 import test_util
 import time
 import unittest
-import re
 
 class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
     testbed_id = "planetlab"
-    testbed_version = "01"
     slicename = "inria_nepi"
     plchost = "nepiplc.pl.sophia.inria.fr"
     
@@ -25,8 +24,11 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
     host3 = "nepi3.pl.sophia.inria.fr"
     host4 = "nepi5.pl.sophia.inria.fr"
 
+    port_base = 2000 + (os.getpid() % 1000) * 13
+    
     def setUp(self):
         self.root_dir = tempfile.mkdtemp()
+        self.__class__.port_base = self.port_base + 100
 
     def tearDown(self):
         try:
@@ -38,7 +40,6 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
 
     def make_experiment_desc(self):
         testbed_id = self.testbed_id
-        testbed_version = self.testbed_version
         slicename = self.slicename
         plchost = self.plchost
         pl_ssh_key = os.environ.get(
@@ -47,7 +48,7 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
         pl_user, pl_pwd = test_util.pl_auth()
 
         exp_desc = ExperimentDescription()
-        pl_provider = FactoriesProvider(testbed_id, testbed_version)
+        pl_provider = FactoriesProvider(testbed_id)
         pl_desc = exp_desc.add_testbed_description(pl_provider)
         pl_desc.set_attribute_value("homeDirectory", self.root_dir)
         pl_desc.set_attribute_value("slice", slicename)
@@ -55,6 +56,10 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
         pl_desc.set_attribute_value("authUser", pl_user)
         pl_desc.set_attribute_value("authPass", pl_pwd)
         pl_desc.set_attribute_value("plcHost", plchost)
+        pl_desc.set_attribute_value("tapPortBase", self.port_base)
+        pl_desc.set_attribute_value("p2pDeployment", False) # it's interactive, we don't want it in tests
+        pl_desc.set_attribute_value("cleanProc", True)
+        #pl_desc.set_attribute_value("plLogLevel", "DEBUG")
         
         return pl_desc, exp_desc
     
@@ -66,7 +71,6 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
         node1 = pl.create("Node")
         node1.set_attribute_value("hostname", hostname or self.host1)
         node1.set_attribute_value("label", label)
-        node1.set_attribute_value("emulation", True) # require emulation
         iface1 = pl.create("NodeInterface")
         iface1.set_attribute_value("label", label+"iface")
         tap1 = []
@@ -99,7 +103,6 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
     
     def make_ns_in_pl(self, pl, exp, node1, iface1, root):
         ns3_testbed_id = "ns3"
-        ns3_testbed_version = "3_9_RC3"
         
         # Add NS3 support in node1
         plnepi = pl.create("NepiDependency")
@@ -108,7 +111,7 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
         plns3.connector("node").connect(node1.connector("deps"))
 
         # Create NS3 testbed running in node1
-        ns3_provider = FactoriesProvider(ns3_testbed_id, ns3_testbed_version)
+        ns3_provider = FactoriesProvider(ns3_testbed_id)
         ns3_desc = exp.add_testbed_description(ns3_provider)
         ns3_desc.set_attribute_value("rootDirectory", root)
         ns3_desc.set_attribute_value("SimulatorImplementationType", "ns3::RealtimeSimulatorImpl")
@@ -136,7 +139,6 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
         "Test is expensive, requires NEPI_FULL_TESTS=yes")
     def test_ns3_in_pl(self):
         ns3_testbed_id = "ns3"
-        ns3_testbed_version = "3_9_RC3"
         
         pl, exp = self.make_experiment_desc()
         
@@ -159,8 +161,16 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
             controller.start()
             # just test that it starts...
         finally:
-            controller.stop()
-            controller.shutdown()
+            try:
+                controller.stop()
+            except:
+                import traceback
+                traceback.print_exc()
+            try:
+                controller.shutdown()
+            except:
+                import traceback
+                traceback.print_exc()
 
     @test_util.skipUnless(test_util.pl_auth() is not None, 
         "Test requires PlanetLab authentication info (PL_USER and PL_PASS environment variables)")
@@ -184,11 +194,12 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
         ns1.connector("protos").connect(ipv41.connector("node"))
         ns1.connector("protos").connect(arp1.connector("node"))
         ns1.connector("protos").connect(icmp1.connector("node"))
-        ns1if = ns3_desc.create("ns3::FileDescriptorNetDevice")
-        ns1if.enable_trace("FileDescriptorPcapTrace")
+        ns1if = ns3_desc.create("ns3::FdNetDevice")
+        ns1if.enable_trace("FdPcapTrace")
         ns1if.set_attribute_value("label", "ns1if")
         ns1.connector("devs").connect(ns1if.connector("node"))
         tap1.connector("fd->").connect(ns1if.connector("->fd"))
+        tap1.set_attribute_value("tun_cipher", "PLAIN")
         ip1 = ns1if.add_address()
         ip1.set_attribute_value("Address", "192.168.2.3")
         ip1.set_attribute_value("NetPrefix", 24)
@@ -220,8 +231,16 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
             tap_trace = controller.trace(tap1.guid, "packets")
 
         finally:
-            controller.stop()
-            controller.shutdown()
+            try:
+                controller.stop()
+            except:
+                import traceback
+                traceback.print_exc()
+            try:
+                controller.shutdown()
+            except:
+                import traceback
+                traceback.print_exc()
 
         # asserts at the end, to make sure there's proper cleanup
         self.assertTrue(re.match(comp_result, ping_result, re.MULTILINE),
@@ -263,11 +282,12 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
         ns1.connector("protos").connect(ipv41.connector("node"))
         ns1.connector("protos").connect(arp1.connector("node"))
         ns1.connector("protos").connect(icmp1.connector("node"))
-        ns1if = ns3_desc.create("ns3::FileDescriptorNetDevice")
-        ns1if.enable_trace("FileDescriptorPcapTrace")
+        ns1if = ns3_desc.create("ns3::FdNetDevice")
+        ns1if.enable_trace("FdPcapTrace")
         ns1if.set_attribute_value("label", "ns1if")
         ns1.connector("devs").connect(ns1if.connector("node"))
         tap1.connector("fd->").connect(ns1if.connector("->fd"))
+        tap1.set_attribute_value("tun_cipher", "PLAIN")
         ip1 = ns1if.add_address()
         ip1.set_attribute_value("Address", "192.168.2.3")
         ip1.set_attribute_value("NetPrefix", 24)
@@ -298,8 +318,16 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
             tap_trace = controller.trace(tap1.guid, "packets")
 
         finally:
-            controller.stop()
-            controller.shutdown()
+            try:
+                controller.stop()
+            except:
+                import traceback
+                traceback.print_exc()
+            try:
+                controller.shutdown()
+            except:
+                import traceback
+                traceback.print_exc()
         
         # asserts at the end, to make sure there's proper cleanup
         sent = 0
@@ -368,11 +396,12 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
         ns1.connector("protos").connect(ipv41.connector("node"))
         ns1.connector("protos").connect(arp1.connector("node"))
         ns1.connector("protos").connect(icmp1.connector("node"))
-        ns1if = ns3_desc.create("ns3::FileDescriptorNetDevice")
-        ns1if.enable_trace("FileDescriptorPcapTrace")
+        ns1if = ns3_desc.create("ns3::FdNetDevice")
+        ns1if.enable_trace("FdPcapTrace")
         ns1if.set_attribute_value("label", "ns1if")
         ns1.connector("devs").connect(ns1if.connector("node"))
         tap0.connector("fd->").connect(ns1if.connector("->fd"))
+        tap0.set_attribute_value("tun_cipher", "PLAIN")
         ip1 = ns1if.add_address()
         ip1.set_attribute_value("Address", "192.168.2.1")
         ip1.set_attribute_value("NetPrefix", 30)
@@ -408,8 +437,16 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
             tap0_trace = controller.trace(tap0.guid, "packets")
 
         finally:
-            controller.stop()
-            controller.shutdown()
+            try:
+                controller.stop()
+            except:
+                import traceback
+                traceback.print_exc()
+            try:
+                controller.shutdown()
+            except:
+                import traceback
+                traceback.print_exc()
         
         # asserts at the end, to make sure there's proper cleanup
         sent = 0