Bug fixing in integration tests
authorAlina Quereilhac <alina.quereilhac@inria.fr>
Tue, 19 Apr 2011 11:46:15 +0000 (13:46 +0200)
committerAlina Quereilhac <alina.quereilhac@inria.fr>
Tue, 19 Apr 2011 11:46:15 +0000 (13:46 +0200)
Makefile
src/nepi/core/execute.py
src/nepi/util/proxy.py
src/nepi/util/server.py
test/testbeds/netns/integration.py

index bd3c0b1..afebb0b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -31,7 +31,7 @@ test: all
        retval=0; \
               for i in `find "$(TESTDIR)" -perm -u+x -type f`; do \
               echo $$i; \
-              TESTLIBPATH="$(TESTLIB)" PYTHONPATH="$(PYPATH)" $$i || retval=$$?; \
+              TESTLIBPATH="$(TESTLIB)" PYTHONPATH="$(PYPATH)" $$i -v || retval=$$?; \
               done; exit $$retval
 
 coverage: all
index 60c26cc..e353b69 100644 (file)
@@ -297,10 +297,18 @@ class ExperimentController(object):
         self._netrefs = dict()
         self._root_dir = root_dir
 
+        self.persist_experiment_xml()
+
     @property
     def experiment_xml(self):
         return self._experiment_xml
 
+    def persist_experiment_xml(self):
+        xml_path = os.path.join(self._root_dir, "experiment.xml")
+        f = open(xml_path, "w")
+        f.write(self._experiment_xml)
+        f.close()
+
     def set_access_configuration(self, testbed_guid, access_config):
         self._access_config[testbed_guid] = access_config
 
index db301ad..17c0c3a 100644 (file)
@@ -166,19 +166,6 @@ def log_reply(server, reply):
     server.log_debug("%s - reply: %s %s" % (server.__class__.__name__, 
             code_txt, txt))
 
-def launch_ssh_daemon_client(root_dir, python_code, host, port, user, agent):
-    if python_code:
-        # launch daemon
-        proc = server.popen_ssh_subprocess(python_code, host = host,
-            port = port, user = user, agent = agent)
-        if proc.poll():
-            err = proc.stderr.read()
-            raise RuntimeError("Client could not be executed: %s" % \
-                    err)
-    # create client
-    return server.Client(root_dir, host = host, port = port, user = user, 
-            agent = agent)
-
 def to_server_log_level(log_level):
     return server.DEBUG_LEVEL \
             if log_level == AccessConfiguration.DEBUG_LEVEL \
@@ -697,22 +684,21 @@ class TestbedInstanceProxy(object):
                         s = TestbedInstanceServer('%s', %d, '%s', '%s');\
                         s.run()" % (root_dir, log_level, testbed_id, 
                                 testbed_version)
-                self._client = launch_ssh_daemon_client(root_dir, python_code,
-                        host, port, user, agent)
+                proc = server.popen_ssh_subprocess(python_code, host = host,
+                    port = port, user = user, agent = agent)
+                if proc.poll():
+                    err = proc.stderr.read()
+                    raise RuntimeError("Server could not be executed: %s" % \
+                            err)
             else:
                 # launch daemon
                 s = TestbedInstanceServer(root_dir, log_level, testbed_id, 
                     testbed_version)
                 s.run()
-                # create client
-                self._client = server.Client(root_dir)
-        else:
-            # attempt to reconnect
-            if host != None:
-                self._client = launch_ssh_daemon_client(root_dir, None,
-                        host, port, user, agent)
-            else:
-                self._client = server.Client(root_dir)
+
+        # connect client to server
+        self._client = server.Client(root_dir, host = host, port = port, 
+                user = user, agent = agent)
 
     @property
     def guids(self):
@@ -1028,27 +1014,23 @@ class ExperimentControllerProxy(object):
             # ssh
             if host != None:
                 xml = experiment_xml
-                xml = xml.replace("'", r"\'")
-                xml = xml.replace("\"", r"\'")
-                xml = xml.replace("\n", r"")
                 python_code = "from nepi.util.proxy import ExperimentControllerServer;\
                         s = ExperimentControllerServer(%r, %r, %r);\
                         s.run()" % (root_dir, log_level, xml)
-                self._client = launch_ssh_daemon_client(root_dir, python_code,
-                        host, port, user, agent)
+                proc = server.popen_ssh_subprocess(python_code, host = host,
+                    port = port, user = user, agent = agent)
+                if proc.poll():
+                    err = proc.stderr.read()
+                    raise RuntimeError("Server could not be executed: %s" % \
+                            err)
             else:
                 # launch daemon
                 s = ExperimentControllerServer(root_dir, log_level, experiment_xml)
                 s.run()
-                # create client
-                self._client = server.Client(root_dir)
-        else:
-            # attempt to reconnect
-            if host != None:
-                self._client = launch_ssh_daemon_client(root_dir, None,
-                        host, port, user, agent)
-            else:
-                self._client = server.Client(root_dir)
+
+        # connect client to server
+        self._client = server.Client(root_dir, host = host, port = port, 
+                user = user, agent = agent)
 
     @property
     def experiment_xml(self):
index 282c074..9136b90 100644 (file)
@@ -289,6 +289,10 @@ class Client(object):
                     stdout = subprocess.PIPE,
                     stderr = subprocess.PIPE
                 )
+            if self._process.poll():
+                err = self._process.stderr.read()
+                raise RuntimeError("Client could not be executed: %s" % \
+                        err)
 
     def send_msg(self, msg):
         encoded = base64.b64encode(msg)
@@ -296,7 +300,7 @@ class Client(object):
         
         try:
             self._process.stdin.write(data)
-        except (IOError,ValueError):
+        except (IOError, ValueError):
             # dead process, poll it to un-zombify
             self._process.poll()
             
index 543a635..2bed30a 100755 (executable)
@@ -49,7 +49,7 @@ class NetnsIntegrationTestCase(unittest.TestCase):
         app.enable_trace("stdout")
         xml = exp_desc.to_xml()
 
-        controller = ExperimentController(xml)
+        controller = ExperimentController(xml, self.root_dir)
         controller.start()
         while not controller.is_finished(app.guid):
             time.sleep(0.5)