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"
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:
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(
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)
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
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 = []
def make_ns_in_pl(self, pl, exp, node1, iface1, root):
ns3_testbed_id = "ns3"
- ns3_testbed_version = "3_9"
# Add NS3 support in node1
plnepi = pl.create("NepiDependency")
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")
"Test is expensive, requires NEPI_FULL_TESTS=yes")
def test_ns3_in_pl(self):
ns3_testbed_id = "ns3"
- ns3_testbed_version = "3_9"
pl, exp = self.make_experiment_desc()
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)")
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)
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),
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)
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
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)
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