summaryrefslogtreecommitdiff
path: root/kpov_judge/tasks/copy_rename_100_files
diff options
context:
space:
mode:
authorTimotej Lazar <timotej.lazar@fri.uni-lj.si>2018-10-07 19:02:26 +0200
committerTimotej Lazar <timotej.lazar@fri.uni-lj.si>2018-10-07 19:04:21 +0200
commitb5b35faea7f4205f353f57178ddc795b7dce5043 (patch)
treef8531a61d236ea0abc4e9dc80692abdc36c6579a /kpov_judge/tasks/copy_rename_100_files
parent42076466e00aa066769050bb2e2b4d98e9cc4d20 (diff)
Refactor SSH testing code out of individual tasks
Catch SSH errors and report failures as hints. Also some cleanups and 2to3 fixes.
Diffstat (limited to 'kpov_judge/tasks/copy_rename_100_files')
-rw-r--r--kpov_judge/tasks/copy_rename_100_files/task.py29
1 files changed, 11 insertions, 18 deletions
diff --git a/kpov_judge/tasks/copy_rename_100_files/task.py b/kpov_judge/tasks/copy_rename_100_files/task.py
index c658d27..f7fb3f1 100644
--- a/kpov_judge/tasks/copy_rename_100_files/task.py
+++ b/kpov_judge/tasks/copy_rename_100_files/task.py
@@ -73,20 +73,10 @@ params_meta = {
}
def task(host, folder):
- import collections
- from pexpect import pxssh
- results = collections.defaultdict(str)
- try:
- # ideally, this would be done using a SFTP client instead of pxssh
- s = pxssh.pxssh(encoding='utf-8')
- s.login(host, 'test', 'test')
- results['ssh'] = True
- results['files'] = s.run('ls -1').split('\n'), # XXX: file may have newlines
- results['contents'] = s.run('cat *'), # XXX: may include other files in $HOME
- s.logout()
- except Exception as ex:
- results['ssh'] = str(ex)
- return results
+ return kpov_util.ssh_test(host, 'test', 'test', (
+ ('files', 'ls -1'), # XXX: file may have newlines
+ ('contents', 'cat *'), # XXX: may include other files in $HOME
+ ))
def gen_params(user_id, params_meta):
pass
@@ -96,10 +86,13 @@ def task_check(results, params):
score = 0
hints = []
+ if results['ssh'] is not True:
+ hints += ['ssh failed: ' + results['ssh']]
+
matched = 0
files = os.listdir(params['folder'])
for fn in files:
- if fn in results['files']:
+ if fn in results['files'].splitlines():
matched += 1
if matched > 0:
score = 1
@@ -113,12 +106,12 @@ def task_check(results, params):
score += 3
else:
hints += ["wrong number of files"]
- rl = results['contents'].split('\n')
+ rl = results['contents'].splitlines()
rl.sort()
tl = []
for fn in files:
- with open(fn) as f:
- tl += f.read().upper().split('\n')
+ with open(os.path.join(params['folder'], fn)) as f:
+ tl += f.read().upper().splitlines()
tl.sort()
if rl == tl:
score += 4