summaryrefslogtreecommitdiff
path: root/tasks/copy_rename_100_files/task.py
diff options
context:
space:
mode:
Diffstat (limited to 'tasks/copy_rename_100_files/task.py')
-rw-r--r--tasks/copy_rename_100_files/task.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/tasks/copy_rename_100_files/task.py b/tasks/copy_rename_100_files/task.py
new file mode 100644
index 0000000..9dcf69a
--- /dev/null
+++ b/tasks/copy_rename_100_files/task.py
@@ -0,0 +1,120 @@
+# TODO:
+# - check if everything is filled in (computers, params, preparation)
+# - improve scoring
+# - test
+# - switch to a real SSH/SFTP client to properly handle filenames
+
+instructions = {
+ 'si':"""
+<pre>Ustvari dva navidezna računalnika. Za prvega uporabi sliko diska simpleArbiterDhcp. Na drugem računalniku
+ustvari uporabnika test z geslom test.
+Na sliki diska simpleArbiterDhcp najdeš imenik s 100 datotekami. Prekopiraj vse datoteke na drugi računalnik v domači imenik uporabnika test.
+Spremeni vsebino datotek tako, da vse male črke spremeniš v velike. Poskrbi, da se bo s prvega računalnika (simpleArbiterDhcp) mogoče prek
+ssh prijaviti na drugi računalnik in prebrati predelane datoteke.</pre>
+""",
+ 'en': '''
+<pre>Create two virtual machines. For the first, use the `simpleArbiterDhcp' image.
+On the second machine, create a user `test' with the password `test'.
+The `simpleArbiterDhcp' disk image contains a folder with 100 files. Copy all
+of these files to the other computer into the home folder of theuser `test'.
+Modify the content of these files by converting all lowercase letters into
+uppercase. Make sure that the first machine (`simpleArbiterDhcp') can use ssh
+to access the second machine and read the processed files.</pre>
+''',
+}
+
+computers = {
+ 'SimpleArbiter': {
+ 'disks': [
+ {
+ 'name': 'simpleArbiterDhcp',
+ },
+ ],
+ 'network_interfaces': [
+ {
+ 'network': 'net1',
+ },
+ ],
+ 'flavor': 'm1.tiny',
+ 'config_drive': False,
+ }
+}
+
+networks = {
+ 'net1': {
+ 'public': True,
+ },
+}
+
+params_meta = {
+ 'folder': {
+ 'descriptions': {
+ 'si': 'Mapa, ki vsebuje 100 datotek',
+ 'en': 'A folder with 100 files',
+ },
+ 'w': False,
+ 'public': True,
+ 'type': 'dirname',
+ 'generated': False,
+ },
+ 'host': {
+ 'descriptions': {
+ 'si': 'Naslov racunalnika, na katerega kopiramo datoteke',
+ 'en': 'The address of the computer to which the files are copied',
+ },
+ 'w': True,
+ 'public': True,
+ 'type': 'IP',
+ 'generated': False,
+ },
+}
+
+def task(host, folder):
+ 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
+
+def task_check(results, params):
+ import os
+
+ 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'].splitlines():
+ matched += 1
+ if matched > 0:
+ score = 1
+ else:
+ hints += ["no files"]
+ if matched > len(files)/2:
+ score += 2
+ else:
+ hints += ["less than half the files"]
+ if (matched == len(files)):
+ score += 3
+ else:
+ hints += ["wrong number of files"]
+ rl = results['contents'].splitlines()
+ rl.sort()
+ tl = []
+ for fn in files:
+ with open(os.path.join(params['folder'], fn)) as f:
+ tl += f.read().upper().splitlines()
+ tl.sort()
+ if rl == tl:
+ score += 4
+ else:
+ hints += ["wrong files"]
+ return score, hints
+
+def prepare_disks(templates, task_params, global_params):
+ pass