2 # -*- coding: utf-8 -*-
5 from nepi.core.design import ExperimentDescription, FactoriesProvider
6 from nepi.core.execute import ExperimentController
7 from nepi.util import proxy
16 class PlanetLabIntegrationTestCase(unittest.TestCase):
18 self.root_dir = tempfile.mkdtemp()
22 shutil.rmtree(self.root_dir)
26 shutil.rmtree(self.root_dir)
28 def make_experiment_desc(self):
29 testbed_id = "planetlab"
30 testbed_version = "01"
31 slicename = "inria_nepi12"
32 pl_ssh_key = os.environ.get(
34 "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'],) )
35 pl_user, pl_pwd = test_util.pl_auth()
37 exp_desc = ExperimentDescription()
38 pl_provider = FactoriesProvider(testbed_id, testbed_version)
39 pl_desc = exp_desc.add_testbed_description(pl_provider)
40 pl_desc.set_attribute_value("homeDirectory", self.root_dir)
41 pl_desc.set_attribute_value("slice", slicename)
42 pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key)
43 pl_desc.set_attribute_value("authUser", pl_user)
44 pl_desc.set_attribute_value("authPass", pl_pwd)
46 return pl_desc, exp_desc
48 @test_util.skipUnless(test_util.pl_auth() is not None, "Test requires PlanetLab authentication info (PL_USER and PL_PASS environment variables)")
49 def test_simple(self):
50 pl, exp = self.make_experiment_desc()
52 node1 = pl.create("Node")
53 node2 = pl.create("Node")
54 node1.set_attribute_value("hostname", "onelab11.pl.sophia.inria.fr")
55 node2.set_attribute_value("hostname", "onelab10.pl.sophia.inria.fr")
56 iface1 = pl.create("NodeInterface")
57 iface2 = pl.create("NodeInterface")
58 iface2.set_attribute_value("label", "node2iface")
59 inet = pl.create("Internet")
60 node1.connector("devs").connect(iface1.connector("node"))
61 node2.connector("devs").connect(iface2.connector("node"))
62 iface1.connector("inet").connect(inet.connector("devs"))
63 iface2.connector("inet").connect(inet.connector("devs"))
64 app = pl.create("Application")
65 app.set_attribute_value("command", "ping -qc1 {#[node2iface].addr[0].[Address]#}")
66 app.enable_trace("stdout")
67 app.connector("node").connect(node1.connector("apps"))
71 controller = ExperimentController(xml, self.root_dir)
73 while not controller.is_finished(app.guid):
75 ping_result = controller.trace(pl.guid, app.guid, "stdout")
76 comp_result = r"""PING .* \(.*\) \d*\(\d*\) bytes of data.
78 --- .* ping statistics ---
79 1 packets transmitted, 1 received, 0% packet loss, time \d*ms.*
81 self.assertTrue(re.match(comp_result, ping_result, re.MULTILINE),
82 "Unexpected trace:\n" + ping_result)
86 if __name__ == '__main__':