Refactoring LinuGRETunnel
authorAlina Quereilhac <alina.quereilhac@inria.fr>
Tue, 29 Jul 2014 20:59:10 +0000 (22:59 +0200)
committerAlina Quereilhac <alina.quereilhac@inria.fr>
Tue, 29 Jul 2014 20:59:10 +0000 (22:59 +0200)
src/nepi/resources/linux/gretunnel.py
src/nepi/resources/linux/tap.py
src/nepi/resources/linux/tunnel.py
src/nepi/resources/linux/udptunnel.py
src/nepi/resources/planetlab/tap.py
test/resources/planetlab/gretunnel.py

index 62f94cf..174829d 100644 (file)
@@ -47,7 +47,7 @@ class LinuxGRETunnel(LinuxTunnel):
         connected = []
         for guid in self.connections:
             rm = self.ec.get_resource(guid)
-            if hasattr(rm, "gre_connect_command"):
+            if hasattr(rm, "gre_connect"):
                 connected.append(rm)
         return connected
 
@@ -55,48 +55,10 @@ class LinuxGRETunnel(LinuxTunnel):
         # Return the command to execute to initiate the connection to the
         # other endpoint
         connection_run_home = self.run_home(endpoint)
-        gre_connect_command = endpoint.gre_connect_command(
-                remote_endpoint, connection_run_home)
-
-        # upload command to connect.sh script
-        shfile = os.path.join(self.app_home(endpoint), "gre-connect.sh")
-        endpoint.node.upload(gre_connect_command,
-                shfile,
-                text = True, 
-                overwrite = False)
-
-        # invoke connect script
-        cmd = "bash %s" % shfile
-        (out, err), proc = endpoint.node.run(cmd, self.run_home(endpoint)) 
-             
-        # check if execution errors occurred
-        msg = " Failed to connect endpoints "
-        
-        if proc.poll() or err:
-            self.error(msg, out, err)
-            raise RuntimeError, msg
-    
-        # Wait for pid file to be generated
-        pid, ppid = endpoint.node.wait_pid(self.run_home(endpoint))
-        
-        # If the process is not running, check for error information
-        # on the remote machine
-        if not pid or not ppid:
-            (out, err), proc = endpoint.node.check_errors(self.run_home(endpoint))
-            # Out is what was written in the stderr file
-            if err:
-                msg = " Failed to start command '%s' " % command
-                self.error(msg, out, err)
-                raise RuntimeError, msg
-        
-        # 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.
-        vif_name = endpoint.wait_vif_name()
-        endpoint.set("deviceName", vif_name) 
-
-        # Wait if name
-        return True
+        connection_app_home = self.app_home(endpoint)
+        data = endpoint.gre_connect(remote_endpoint, connection_run_home, 
+                connection_app_home)
+        return data
 
     def establish_connection(self, endpoint, remote_endpoint, data):
         pass
index 7390dfb..24efdff 100644 (file)
@@ -211,7 +211,45 @@ class LinuxTap(LinuxApplication):
 
         super(LinuxTap, self).do_release()
 
-    def gre_connect_command(self, remote_endpoint, connection_run_home): 
+    def gre_connect(self, remote_endpoint, connection_app_home,
+            connection_run_home):
+        gre_connect_command = self._gre_connect_command(
+                remote_endpoint, connection_run_home)
+
+        # upload command to connect.sh script
+        shfile = os.path.join(connection_app_home, "gre-connect.sh")
+        endpoint.node.upload(gre_connect_command,
+                shfile,
+                text = True, 
+                overwrite = False)
+
+        # invoke connect script
+        cmd = "bash %s" % shfile
+        (out, err), proc = self.node.run(cmd, connection_run_home) 
+             
+        # check if execution errors occurred
+        msg = " Failed to connect endpoints "
+        
+        if proc.poll() or err:
+            self.error(msg, out, err)
+            raise RuntimeError, msg
+    
+        # Wait for pid file to be generated
+        pid, ppid = self.node.wait_pid(connection_run_home)
+        
+        # If the process is not running, check for error information
+        # on the remote machine
+        if not pid or not ppid:
+            (out, err), proc = self.node.check_errors(connection_run_home)
+            # Out is what was written in the stderr file
+            if err:
+                msg = " Failed to start command '%s' " % command
+                self.error(msg, out, err)
+                raise RuntimeError, msg
+        
+        return True
+
+    def _gre_connect_command(self, remote_endpoint, connection_run_home): 
         # Set the remote endpoint
         self.set("pointopoint", remote_endpoint.get("ip4"))
         self.set("greRemote", socket.gethostbyname(
index c0e4a73..8c7402a 100644 (file)
@@ -155,7 +155,6 @@ class LinuxTunnel(LinuxApplication):
 
         return self._state
 
-
     def valid_connection(self, guid):
         # TODO: Validate!
         return True
index ae4534d..63ae086 100644 (file)
@@ -84,7 +84,7 @@ class LinuxUdpTunnel(LinuxTunnel):
         connected = []
         for guid in self.connections:
             rm = self.ec.get_resource(guid)
-            if hasattr(rm, "udp_connect_command"):
+            if hasattr(rm, "udp_connect"):
                 connected.append(rm)
         return connected
 
@@ -96,43 +96,14 @@ class LinuxUdpTunnel(LinuxTunnel):
        
         # Return the command to execute to initiate the connection to the
         # other endpoint
+        connection_app_home = self.app_home(endpoint)
         connection_run_home = self.run_home(endpoint)
-        udp_connect_command = endpoint.udp_connect_command(
-                remote_endpoint, connection_run_home,
+        pid, ppid = endpoint.udp_connect(
+                remote_endpoint, 
+                connection_app_home,
+                connection_run_home, 
                 cipher, cipher_key, bwlimit, txqueuelen)
 
-        # upload command to connect.sh script
-        shfile = os.path.join(self.app_home(endpoint), "udp-connect.sh")
-        endpoint.node.upload(udp_connect_command,
-                shfile,
-                text = True, 
-                overwrite = False)
-
-        # invoke connect script
-        cmd = "bash %s" % shfile
-        (out, err), proc = endpoint.node.run(cmd, self.run_home(endpoint)) 
-             
-        # check if execution errors occurred
-        msg = "Failed to connect endpoints "
-        
-        if proc.poll():
-            self.error(msg, out, err)
-            raise RuntimeError, msg
-    
-        # Wait for pid file to be generated
-        pid, ppid = endpoint.node.wait_pid(self.run_home(endpoint))
-        
-        # If the process is not running, check for error information
-        # on the remote machine
-        if not pid or not ppid:
-            (out, err), proc = endpoint.node.check_errors(self.run_home(endpoint))
-            # Out is what was written in the stderr file
-            if err:
-                msg = " Failed to start command '%s' " % command
-                self.error(msg, out, err)
-                raise RuntimeError, msg
-
-        # wait until port is written to file
         port = self.wait_local_port(endpoint)
 
         self._pids[endpoint] = (pid, ppid)
@@ -228,4 +199,3 @@ class LinuxUdpTunnel(LinuxTunnel):
                 text = True, 
                 overwrite = False)
 
-
index dc6d448..75e84de 100644 (file)
@@ -294,7 +294,90 @@ class PlanetlabTap(LinuxApplication):
 
         return vif_name
 
-    def udp_connect_command(self, remote_endpoint, connection_run_home, 
+    def gre_connect(self, remote_endpoint, connection_app_home,
+            connection_run_home):
+        gre_connect_command = self._gre_connect_command(
+                remote_endpoint, connection_run_home)
+
+        # upload command to connect.sh script
+        shfile = os.path.join(connection_app_home, "gre-connect.sh")
+        self.node.upload(gre_connect_command,
+                shfile,
+                text = True, 
+                overwrite = False)
+
+        # invoke connect script
+        cmd = "bash %s" % shfile
+        (out, err), proc = self.node.run(cmd, connection_run_home) 
+             
+        # check if execution errors occurred
+        msg = " Failed to connect endpoints "
+        
+        if proc.poll() or err:
+            self.error(msg, out, err)
+            raise RuntimeError, msg
+    
+        # Wait for pid file to be generated
+        pid, ppid = self.node.wait_pid(connection_run_home)
+        
+        # If the process is not running, check for error information
+        # on the remote machine
+        if not pid or not ppid:
+            (out, err), proc = self.node.check_errors(connection_run_home)
+            # Out is what was written in the stderr file
+            if err:
+                msg = " Failed to start command '%s' " % command
+                self.error(msg, out, err)
+                raise RuntimeError, msg
+        
+        # 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.
+        vif_name = self.wait_vif_name()
+        self.set("deviceName", vif_name) 
+
+        return True
+
+    def udp_connect(self, remote_endpoint, connection_app_home, 
+            connection_run_home, cipher, cipher_key, bwlimit, txqueuelen):
+        udp_connect_command = self._udp_connect_command(
+                remote_endpoint, connection_run_home,
+                cipher, cipher_key, bwlimit, txqueuelen)
+
+        # upload command to connect.sh script
+        shfile = os.path.join(connection_app_home, "udp-connect.sh")
+        self.node.upload(udp_connect_command,
+                shfile,
+                text = True, 
+                overwrite = False)
+
+        # invoke connect script
+        cmd = "bash %s" % shfile
+        (out, err), proc = self.node.run(cmd, connection_run_home) 
+             
+        # check if execution errors occurred
+        msg = "Failed to connect endpoints "
+        
+        if proc.poll():
+            self.error(msg, out, err)
+            raise RuntimeError, msg
+    
+        # Wait for pid file to be generated
+        pid, ppid = self.node.wait_pid(connection_run_home)
+        
+        # If the process is not running, check for error information
+        # on the remote machine
+        if not pid or not ppid:
+            (out, err), proc = self.node.check_errors(connection_run_home)
+            # Out is what was written in the stderr file
+            if err:
+                msg = " Failed to start command '%s' " % command
+                self.error(msg, out, err)
+                raise RuntimeError, msg
+
+        return pid, ppid
+
+    def _udp_connect_command(self, remote_endpoint, connection_run_home, 
             cipher, cipher_key, bwlimit, txqueuelen):
 
         # Set the remote endpoint
@@ -346,7 +429,7 @@ class PlanetlabTap(LinuxApplication):
 
         return command
 
-    def gre_connect_command(self, remote_endpoint, connection_run_home): 
+    def _gre_connect_command(self, remote_endpoint, connection_run_home): 
         # Set the remote endpoint
         self.set("pointopoint", remote_endpoint.get("ip4"))
         self.set("greRemote", socket.gethostbyname(
index 1d69a69..9b6b9df 100755 (executable)
@@ -26,7 +26,7 @@ import os
 import time
 import unittest
 
-class GRETunnelTestCase(unittest.TestCase):
+class PlanetLabGRETunnelTestCase(unittest.TestCase):
     def setUp(self):
         #self.host1 = "nepi2.pl.sophia.inria.fr"
         #self.host2 = "nepi5.pl.sophia.inria.fr"