From f552d51308faee21a03833c52537aaa7afbbee86 Mon Sep 17 00:00:00 2001 From: Alina Quereilhac Date: Tue, 19 Apr 2011 13:46:15 +0200 Subject: [PATCH] Bug fixing in integration tests --- Makefile | 2 +- src/nepi/core/execute.py | 8 +++++ src/nepi/util/proxy.py | 58 +++++++++++------------------- src/nepi/util/server.py | 6 +++- test/testbeds/netns/integration.py | 2 +- 5 files changed, 35 insertions(+), 41 deletions(-) diff --git a/Makefile b/Makefile index bd3c0b11..afebb0b3 100644 --- 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 diff --git a/src/nepi/core/execute.py b/src/nepi/core/execute.py index 60c26ccc..e353b698 100644 --- a/src/nepi/core/execute.py +++ b/src/nepi/core/execute.py @@ -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 diff --git a/src/nepi/util/proxy.py b/src/nepi/util/proxy.py index db301ad1..17c0c3af 100644 --- a/src/nepi/util/proxy.py +++ b/src/nepi/util/proxy.py @@ -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): diff --git a/src/nepi/util/server.py b/src/nepi/util/server.py index 282c074a..9136b90e 100644 --- a/src/nepi/util/server.py +++ b/src/nepi/util/server.py @@ -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() diff --git a/test/testbeds/netns/integration.py b/test/testbeds/netns/integration.py index 543a6352..2bed30a4 100755 --- a/test/testbeds/netns/integration.py +++ b/test/testbeds/netns/integration.py @@ -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) -- 2.45.2