code_txt, txt))
def launch_ssh_daemon_client(root_dir, python_code, host, port, user, agent):
- # 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)
+ 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)
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)
@property
def guids(self):
xml = xml.replace("\"", r"\'")
xml = xml.replace("\n", r"")
python_code = "from nepi.util.proxy import ExperimentControllerServer;\
- s = ExperimentControllerServer('%s', %d, '%s');\
+ 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)
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)
@property
def experiment_xml(self):
class Client(object):
def __init__(self, root_dir = ".", host = None, port = None, user = None,
agent = None):
- python_code = "from nepi.util import server;c=server.Forwarder('%s');\
- c.forward()" % root_dir
+ python_code = "from nepi.util import server;c=server.Forwarder(%r);\
+ c.forward()" % (root_dir,)
if host != None:
self._process = popen_ssh_subprocess(python_code, host, port,
user, agent)
reply = c.read_reply()
self.assertTrue(reply == "Stopping server")
+ def test_server_reconnect(self):
+ s = server.Server(self.root_dir)
+ s.run()
+ c = server.Client(self.root_dir)
+
+ c.send_msg("Hola")
+ reply = c.read_reply()
+ self.assertTrue(reply == "Reply to: Hola")
+
+ # disconnect
+ del c
+
+ # reconnect
+ c = server.Client(self.root_dir)
+ c.send_msg("Hola")
+ reply = c.read_reply()
+ self.assertTrue(reply == "Reply to: Hola")
+
+ c.send_stop()
+ reply = c.read_reply()
+ self.assertTrue(reply == "Stopping server")
+
def test_server_long_message(self):
s = server.Server(self.root_dir)
s.run()
reply = c.read_reply()
self.assertTrue(reply == "Stopping server")
+ def test_ssh_server_reconnect(self):
+ env = test_util.test_environment()
+ user = getpass.getuser()
+ # launch server
+ python_code = "from nepi.util import server;s=server.Server('%s');\
+ s.run()" % self.root_dir
+ server.popen_ssh_subprocess(python_code, host = "localhost",
+ port = env.port, user = user, agent = True)
+
+ c = server.Client(self.root_dir, host = "localhost", port = env.port,
+ user = user, agent = True)
+
+ c.send_msg("Hola")
+ reply = c.read_reply()
+ self.assertTrue(reply == "Reply to: Hola")
+
+ # disconnect
+ del c
+
+ # reconnect
+ c = server.Client(self.root_dir, host = "localhost", port = env.port,
+ user = user, agent = True)
+
+ c.send_msg("Hola")
+ reply = c.read_reply()
+ self.assertTrue(reply == "Reply to: Hola")
+
+ c.send_stop()
+ reply = c.read_reply()
+ self.assertTrue(reply == "Stopping server")
+
def tearDown(self):
shutil.rmtree(self.root_dir)