import os
import time
-# TODO: - routes!!!
+# TODO:
# - CREATE GRE - PlanetlabGRE - it only needs to set the gre and remote
# properties when configuring the vif_up
def upload_start_command(self):
# Overwrite file every time.
- # The stop.sh has the path to the socket, wich should change
+ # The start.sh has the path to the socket, wich should change
# on every experiment run.
super(PlanetlabTap, self).upload_start_command(overwrite = True)
# We want to make sure the device is up and running
- # before the deploy finishes (so things will be ready
- # before other stuff starts running).
- # Run the command as a bash script in background,
- # in the host ( but wait until the command has
- # finished to continue )
+ # before the deploy finishes, so we execute now the
+ # start script. We run it in background, because the
+ # TAP will live for as long as the process that
+ # created it is running, and wait until the TAP
+ # is created.
self._run_in_background()
- # Retrive if_name
+ # After creating the TAP, the pl-vif-create.py script
+ # will write the name of the TAP to a file. We wait until
+ # we can read the interface name from the file.
if_name = self.wait_if_name()
self.set("deviceName", if_name)
""" Waits until the if_name file for the command is generated,
and returns the if_name for the device """
if_name = None
- delay = 1.0
+ delay = 0.5
for i in xrange(20):
(out, err), proc = self.node.check_output(self.run_home, "if_name")
+ if proc.poll() > 0:
+ (out, err), proc = self.node.check_errors(self.run_home)
+
+ if err.strip():
+ raise RuntimeError, err
+
if out:
if_name = out.strip()
break
def create_node(hostname, username = None, identity = None):
ec = DummyEC()
node = LinuxNode(ec, 1)
+
node.set("hostname", hostname)
+
if username:
node.set("username", username)
+
if identity:
node.set("identity", identity)
def skipIfNotAlive(func):
name = func.__name__
def wrapped(*args, **kwargs):
- host = args[1]
- if host != "localhost":
- user = None
+ hostname = args[1]
+ if hostname != "localhost":
+ username = None
identity = None
if len(args) >= 3:
- user = args[2]
+ username = args[2]
if len(args) >= 4:
identity = args[3]
- node, ec = create_node(host, user, identity)
+ node, ec = create_node(hostname, username, identity)
if not node.is_alive():
print "*** WARNING: Skipping test %s: Node %s is not alive\n" % (
def wrapped(*args, **kwargs):
argss = list(args)
argss.pop(0)
+
for i in xrange(len(argss)/2):
username = argss[i*2]
hostname = argss[i*2+1]
return wrapped
+def skipIfAnyNotAliveWithIdentity(func):
+ name = func.__name__
+ def wrapped(*args, **kwargs):
+ argss = list(args)
+ argss.pop(0)
+ for i in xrange(len(argss)/3):
+ username = argss[i*3]
+ hostname = argss[i*3+1]
+ identity = argss[i*3+2]
+
+ node, ec = create_node(hostname, username, identity)
+
+ if not node.is_alive():
+ print "*** WARNING: Skipping test %s: Node %s is not alive\n" % (
+ name, node.get("hostname"))
+ return
+
+ return func(*args, **kwargs)
+
+ return wrapped
+
+
def skipInteractive(func):
name = func.__name__
def wrapped(*args, **kwargs):
from nepi.execution.ec import ExperimentController
-from test_utils import skipIfAnyNotAlive
+from test_utils import skipIfAnyNotAliveWithIdentity
import os
import time
class UdpTunnelTestCase(unittest.TestCase):
def setUp(self):
- self.host1 = "nepi2.pl.sophia.inria.fr"
- self.host2 = "nepi5.pl.sophia.inria.fr"
+ #self.host1 = "nepi2.pl.sophia.inria.fr"
+ #self.host2 = "nepi5.pl.sophia.inria.fr"
+ self.host1 = "planetlab1.informatik.uni-erlangen.de"
+ self.host2 = "planetlab1.informatik.uni-goettingen.de"
self.user = "inria_nepi"
+ self.identity = "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'])
+ #self.netblock = "192.168.1"
+ self.netblock = "192.168.3"
- @skipIfAnyNotAlive
- def t_tap_udp_tunnel(self, user1, host1, user2, host2):
+ @skipIfAnyNotAliveWithIdentity
+ def t_tap_udp_tunnel(self, user1, host1, identity1, user2, host2,
+ identity2):
ec = ExperimentController(exp_id = "test-tap-udp-tunnel")
node1 = ec.register_resource("PlanetlabNode")
ec.set(node1, "hostname", host1)
ec.set(node1, "username", user1)
+ ec.set(node1, "identity", identity1)
ec.set(node1, "cleanHome", True)
ec.set(node1, "cleanProcesses", True)
tap1 = ec.register_resource("PlanetlabTap")
- ec.set(tap1, "ip4", "192.168.1.1")
- ec.set(tap1, "pointopoint", "192.168.1.2")
+ ec.set(tap1, "ip4", "%s.1" % self.netblock)
+ ec.set(tap1, "pointopoint", "%s.2" % self.netblock)
ec.set(tap1, "prefix4", 24)
ec.register_connection(tap1, node1)
node2 = ec.register_resource("PlanetlabNode")
ec.set(node2, "hostname", host2)
ec.set(node2, "username", user2)
+ ec.set(node2, "identity", identity2)
ec.set(node2, "cleanHome", True)
ec.set(node2, "cleanProcesses", True)
tap2 = ec.register_resource("PlanetlabTap")
- ec.set(tap2, "ip4", "192.168.1.2")
- ec.set(tap2, "pointopoint", "192.168.1.1")
+ ec.set(tap2, "ip4", "%s.2" % self.netblock)
+ ec.set(tap2, "pointopoint", "%s.1" % self.netblock)
ec.set(tap2, "prefix4", 24)
ec.register_connection(tap2, node2)
ec.register_connection(tap2, udptun)
app = ec.register_resource("LinuxApplication")
- cmd = "ping -c3 192.168.1.2"
+ cmd = "ping -c3 %s.2" % self.netblock
ec.set(app, "command", cmd)
ec.register_connection(app, node1)
ec.shutdown()
- @skipIfAnyNotAlive
- def t_tun_udp_tunnel(self, user1, host1, user2, host2):
+ @skipIfAnyNotAliveWithIdentity
+ def t_tun_udp_tunnel(self, user1, host1, identity1, user2, host2, identity2):
ec = ExperimentController(exp_id = "test-tap-udp-tunnel")
node1 = ec.register_resource("PlanetlabNode")
ec.set(node1, "hostname", host1)
ec.set(node1, "username", user1)
+ ec.set(node1, "identity", identity1)
ec.set(node1, "cleanHome", True)
ec.set(node1, "cleanProcesses", True)
tun1 = ec.register_resource("PlanetlabTun")
- ec.set(tun1, "ip4", "192.168.1.1")
- ec.set(tun1, "pointopoint", "192.168.1.2")
+ ec.set(tun1, "ip4", "%s.1" % self.netblock)
+ ec.set(tun1, "pointopoint", "%s.2" % self.netblock)
ec.set(tun1, "prefix4", 24)
ec.register_connection(tun1, node1)
node2 = ec.register_resource("PlanetlabNode")
ec.set(node2, "hostname", host2)
ec.set(node2, "username", user2)
+ ec.set(node2, "identity", identity2)
ec.set(node2, "cleanHome", True)
ec.set(node2, "cleanProcesses", True)
tun2 = ec.register_resource("PlanetlabTun")
- ec.set(tun2, "ip4", "192.168.1.2")
- ec.set(tun2, "pointopoint", "192.168.1.1")
+ ec.set(tun2, "ip4", "%s.2" % self.netblock)
+ ec.set(tun2, "pointopoint", "%s.1" % self.netblock )
ec.set(tun2, "prefix4", 24)
ec.register_connection(tun2, node2)
ec.register_connection(tun2, udptun)
app = ec.register_resource("LinuxApplication")
- cmd = "ping -c3 192.168.1.2"
+ cmd = "ping -c3 %s.2" % self.netblock
ec.set(app, "command", cmd)
ec.register_connection(app, node1)
ec.shutdown()
def test_tap_udp_tunnel(self):
- self.t_tap_udp_tunnel(self.user, self.host1, self.user, self.host2)
+ self.t_tap_udp_tunnel(self.user, self.host1, self.identity,
+ self.user, self.host2, self.identity)
def test_tun_udp_tunnel(self):
- self.t_tun_udp_tunnel(self.user, self.host1, self.user, self.host2)
+ self.t_tun_udp_tunnel(self.user, self.host1, self.identity,
+ self.user, self.host2, self.identity)
if __name__ == '__main__':
unittest.main()