X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=test%2Futil%2Fsshfuncs.py;h=2c9c30b656633de57980907153d4e042326c2c99;hb=6285ca51026efb69642eea9dfc7c480e722d84a9;hp=756c79a147f70863395f60660a8a7f7899f322c2;hpb=c7524b8d2bb83b5a74fcc5f58dfd025194d4836b;p=nepi.git
diff --git a/test/util/sshfuncs.py b/test/util/sshfuncs.py
old mode 100644
new mode 100755
index 756c79a1..2c9c30b6
--- a/test/util/sshfuncs.py
+++ b/test/util/sshfuncs.py
@@ -1,6 +1,25 @@
#!/usr/bin/env python
-
-from neco.util.sshfuncs import *
+#
+# NEPI, a framework to manage network experiments
+# Copyright (C) 2013 INRIA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation;
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+# Author: Alina Quereilhac
+
+
+from nepi.util.sshfuncs import rexec, rcopy, rspawn, rgetpid, rstatus, rkill,\
+ ProcStatus
import getpass
import unittest
@@ -28,7 +47,7 @@ def find_bin(name, extra_path = None):
try:
os.stat(d + "/" + name)
return d + "/" + name
- except OSError, e:
+ except OSError as e:
if e.errno != os.errno.ENOENT:
raise
return None
@@ -49,9 +68,8 @@ def gen_ssh_keypair(filename):
def add_key_to_agent(filename):
ssh_add = find_bin_or_die("ssh-add")
args = [ssh_add, filename]
- null = file("/dev/null", "w")
- assert subprocess.Popen(args, stderr = null).wait() == 0
- null.close()
+ with open("/dev/null", "w") as null:
+ assert subprocess.Popen(args, stderr = null).wait() == 0
def get_free_port():
s = socket.socket()
@@ -74,10 +92,9 @@ PermitUserEnvironment yes
"""
def gen_sshd_config(filename, port, server_key, auth_keys):
- conf = open(filename, "w")
- text = _SSH_CONF % (port, server_key, auth_keys)
- conf.write(text)
- conf.close()
+ with open(filename, "w") as conf:
+ text = _SSH_CONF % (port, server_key, auth_keys)
+ conf.write(text)
return filename
def gen_auth_keys(pubkey, output, environ):
@@ -86,11 +103,11 @@ def gen_auth_keys(pubkey, output, environ):
for k, v in environ.items():
opts.append('environment="%s=%s"' % (k, v))
- lines = file(pubkey).readlines()
+ with open(pubkey) as f:
+ lines = f.readlines()
pubkey = lines[0].split()[0:2]
- out = file(output, "w")
- out.write("%s %s %s\n" % (",".join(opts), pubkey[0], pubkey[1]))
- out.close()
+ with open(output, "w") as out:
+ out.write("%s %s %s\n" % (",".join(opts), pubkey[0], pubkey[1]))
return output
def start_ssh_agent():
@@ -112,9 +129,8 @@ def stop_ssh_agent(data):
# No need to gather the pid, ssh-agent knows how to kill itself; after we
# had set up the environment
ssh_agent = find_bin_or_die("ssh-agent")
- null = file("/dev/null", "w")
- proc = subprocess.Popen([ssh_agent, "-k"], stdout = null)
- null.close()
+ with open("/dev/null", "w") as null:
+ proc = subprocess.Popen([ssh_agent, "-k"], stdout = null)
assert proc.wait() == 0
for k in data:
del os.environ[k]
@@ -164,7 +180,7 @@ class SSHfuncsTestCase(unittest.TestCase):
self.assertEquals(outlocal, outremote)
- def test_rcopy(self):
+ def test_rcopy_list(self):
env = test_environment()
user = getpass.getuser()
host = "localhost"
@@ -181,7 +197,7 @@ class SSHfuncsTestCase(unittest.TestCase):
source = [dirpath, f1.name]
destdir = tempfile.mkdtemp()
dest = "%s@%s:%s" % (user, host, destdir)
- rcopy(source, dest, port = env.port, agent = True)
+ rcopy(source, dest, port = env.port, agent = True, recursive = True)
files = []
def recls(files, dirname, names):
@@ -192,6 +208,38 @@ class SSHfuncsTestCase(unittest.TestCase):
self.assertEquals(sorted(origfiles), sorted(files))
+ os.remove(f1.name)
+ shutil.rmtree(dirpath)
+
+ def test_rcopy_list(self):
+ env = test_environment()
+ user = getpass.getuser()
+ host = "localhost"
+
+ # create some temp files and directories to copy
+ dirpath = tempfile.mkdtemp()
+ f = tempfile.NamedTemporaryFile(dir=dirpath, delete=False)
+ f.close()
+
+ f1 = tempfile.NamedTemporaryFile(delete=False)
+ f1.close()
+ f1.name
+
+ # Copy a list of files
+ source = [dirpath, f1.name]
+ destdir = tempfile.mkdtemp()
+ dest = "%s@%s:%s" % (user, host, destdir)
+ ((out, err), proc) = rcopy(source, dest, port = env.port, agent = True, recursive = True)
+
+ files = []
+ def recls(files, dirname, names):
+ files.extend(names)
+ os.path.walk(destdir, recls, files)
+
+ origfiles = map(lambda s: os.path.basename(s), [dirpath, f.name, f1.name])
+
+ self.assertEquals(sorted(origfiles), sorted(files))
+
def test_rproc_manage(self):
env = test_environment()
user = getpass.getuser()
@@ -211,7 +259,7 @@ class SSHfuncsTestCase(unittest.TestCase):
time.sleep(2)
- (pid, ppid) = rcheck_pid(pidfile,
+ (pid, ppid) = rgetpid(pidfile,
host = host,
user = user,
port = env.port,
@@ -223,7 +271,7 @@ class SSHfuncsTestCase(unittest.TestCase):
port = env.port,
agent = True)
- self.assertEquals(status, RUNNING)
+ self.assertEquals(status, ProcStatus.RUNNING)
rkill(pid, ppid,
host = host,
@@ -237,7 +285,7 @@ class SSHfuncsTestCase(unittest.TestCase):
port = env.port,
agent = True)
- self.assertEquals(status, FINISHED)
+ self.assertEquals(status, ProcStatus.FINISHED)
if __name__ == '__main__':