Commit 0c97a48e authored by Jakob Moser's avatar Jakob Moser
Browse files

Adjust pool test for Winter Semester

parent 72429ab1
Loading
Loading
Loading
Loading
+17 −18
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ export const practice = test("Linux-Übungsmodus", function() {
        <h1>Willkommen zum Linux-Übungsmodus</h1>
        <p>Hier kannst du vollkommen frei mit dem Linux-Terminal auf der linken Seite herumexperimentieren. Das Terminal läuft isoliert in diesem Browsertab, <strong>du kannst also absolut nichts kaputt machen</strong> (weder auf deinem Rechner, noch bei uns) – im schlimmsten Fall lädst du die Seite neu und alles ist vergessen ;)</p>
        <p>Es gibt ein paar Aufgaben im Übungsmodus, diese sind allerdings komplett freiwillig. Falls du sie bearbeitest, solltest du sie allerdings in der angegebenen Reihenfolge lösen, da die Aufgaben aufeinander aufbauen.</p>
        <p>Wir verwenden dieses Semester zum ersten Mal YALIKEJAZZ, also zögere nicht, dich <strong>bei Fragen und Problemen jederzeit an uns zu wenden</strong> (<code>technik@cl.uni-heidelberg.de</code>) – wir schauen uns das an und finden gemeinsam eine Lösung.</p>
        <p>Zögere nicht, dich <strong>bei Fragen und Problemen jederzeit an uns zu wenden</strong> (<code>technik@cl.uni-heidelberg.de</code>) – wenn dir etwas sehr komisch vorkommt, kann es gut sein, dass das Problem bei YALIKEJAZZ liegt und nicht bei dir 😉.</p>
    `)

    this.disableHandIn()
@@ -162,7 +162,7 @@ export const practice = test("Linux-Übungsmodus", function() {
    })
})

export const pooltest = test("Pooltest Sommersemester 2022", async function () {
export const pooltest = test("Pooltest Wintersemester 2022/2023", async function () {
    this.welcome(`
        <h1>Willkommen zum Pooltest!</h1>
        <p>In diesem Test sollst du nachweisen, dass du grundlegende Linux-Kenntnisse besitzt und diese auch anwenden kannst. Der Test besteht aus <strong id="exerciseCnt"></strong> Aufgaben, dauert etwa eine Stunde und wir empfehlen, ihn am Stück durchzuarbeiten.</p>
@@ -172,29 +172,29 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () {
        
        <p>Du kannst Aufgaben auch überspringen und später wieder zu ihnen zurückkehren. Sobald du alle Aufgaben gelöst hast, drücke auf den entsprechenden Knopf, um abzugeben. Falls du eine Aufgabe partout nicht gelöst bekommst, kannst du auch unvollständig abgeben (sag dann am besten dazu, mit welchen Aufgaben du Probleme hattest). Wir schauen uns deinen Test dann an, und sofern er ansonsten einen guten Eindruck macht, bestehst du ihn trotzdem :)</p>

        <p>Für uns ist das auch eine Premiere, daher zögere nicht, dich <strong>bei Fragen und Problemen jederzeit an uns zu wenden</strong> (<code>technik@cl.uni-heidelberg.de</code>) – ganz gleich, ob das Problem eine zu schwere oder leichte Aufgabe ist oder ein Programmierfehler in YALIKEJAZZ, wir schauen uns das an und finden gemeinsam eine Lösung.</p>
        <p>Zögere nicht, dich <strong>bei Fragen und Problemen jederzeit an uns zu wenden</strong> (<code>technik@cl.uni-heidelberg.de</code>) – ganz gleich, ob das Problem eine zu schwere oder leichte Aufgabe ist oder ein Programmierfehler in YALIKEJAZZ, wir schauen uns das an und finden gemeinsam eine Lösung.</p>
    `)

    this.exercise("Datei anlegen", async function () {
        this.describe(`Erstelle eine Datei mit dem Namen "botschaft" und dem Inhalt
        "Der Junge sieht den Mann mit dem Fernglas" (jeweils ohne
        "Time flies like an arrow" (jeweils ohne
        Anführungszeichen)`)

        // Wait until the user confirms that they believe they are done with the exercise ...
        await this.manualConfirmation()

        // ... then verify the existence of the file with the correct output
        this.verify("cat botschaft").hasOutput("Der Junge sieht den Mann mit dem Fernglas")
        this.verify("cat botschaft").hasOutput("Time flies like an arrow")
    })

    this.exercise("Ordner erstellen", async function () {
        this.describe(`Erstelle unter dem Pfad "/tmp" einen Ordner mit dem Namen "computational", in dem sich ein weiterer Ordner
        mit dem Namen "linguistics" befindet.`)
        this.describe(`Erstelle unter dem Pfad "/tmp" einen Ordner mit dem Namen "computer", in dem sich ein weiterer Ordner
        mit dem Namen "linguistik" befindet.`)

        await this.manualConfirmation()

        await this.prepareWith(`mkdir -p /val &&
                                echo 'if [ -d /tmp/computational/linguistics/ ]; then echo "yes"; else echo "no"; fi' > /val/2h7je1.sh &&
                                echo 'if [ -d /tmp/computer/linguistik/ ]; then echo "yes"; else echo "no"; fi' > /val/2h7je1.sh &&
                                chmod a+x /val/2h7je1.sh`)

        this.verify('/val/2h7je1.sh').hasOutput("yes")
@@ -224,16 +224,15 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () {
        this.describe(`Lasse dir den Inhalt der Datei "reverse.txt" anzeigen und schreibe den Inhalt 
        in umgekehrter Reihenfolge in eine neue Datei mit dem Namen "correct.txt"`)
    
        await this.prepareWith("echo 'ILOC' >> reverse.txt")
        await this.prepareWith("echo 'puriS tsaf tfaS tsi ruP' >> reverse.txt")
    
        await this.manualConfirmation()
    
        this.verify("cat correct.txt").hasOutput("COLI")
        this.verify("cat correct.txt").hasOutput("Pur ist Saft fast Sirup")
    })

    this.exercise("Berechtigungen anpassen", async function () {
        this.describe(`Ändere die Berechtigungen der Datei "/resources/supergeheim" so, dass nur der Besitzer sie anzeigen kann
        (und sonst niemand).`)
        this.describe(`Ändere die Berechtigungen der Datei "/resources/supergeheim" so, dass der Besitzer sie lesen und schreiben kann, sonst aber niemand.`)

        await this.prepareWith(`mkdir /resources &&
                                echo 'Dies ist ein Geheimnis.' > /resources/supergeheim`)
@@ -243,7 +242,7 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () {
        this.verify("ls -ld /resources/supergeheim").hasOutput((outputLines) => {
            // Verify that the output of "ls -ld /resources/supergeheim" contains the correct permissions
            // (the regular expression checks that the read bits are correctly set, it doesn't care about the other's)
            return outputLines.length === 1 && outputLines[0].substring(0, 10).match(/-r..-..-../)
            return outputLines.length === 1 && outputLines[0].substring(0, 10).match(/-rw.--.--./)
        })
    })

@@ -251,16 +250,16 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () {
        this.describe(`Lasse dir den absoluten Pfad ausgeben, an dem du dich gerade befindest. Verwende dazu einen Befehl, 
        auch wenn du den Pfad auf dieser Linux-Maschine bereits in der Prompt ablesen könntest.`)

        await this.prepareWith("cd /usr/bin")
        await this.prepareWith("cd /proc/tty")

        await this.manualConfirmation()

        this.verify().hasOutput("/usr/bin")
        this.verify().hasOutput("/proc/tty")
    })

    this.exercise("Verschieben der korrekten Datei", async function () {
        this.describe(`Du bist innehalb des Verzeichnisses "Contacts" in einem Unterordner mit Dateien, die als Namen mögliche Kontaktadressen tragen.
        Verschiebe die Datei mit der Korrekten Mail-Adresse der Gruppe Technik in das übergeordnete Verzeichnis. Lösche alle anderen Dateien aus
        Verschiebe die Datei mit der korrekten Mail-Adresse der Gruppe Technik in das übergeordnete Verzeichnis. Lösche alle anderen Dateien aus
        diesem Ordner, die als Namen Mail-Adressen haben, mit denen du uns nicht erreichen kannst.`)

        await this.prepareWith(`mkdir -p /resources/Contacts/unsure && 
@@ -311,13 +310,13 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () {

        await this.prepareWith(`if [[ ! -d /resources ]]; then mkdir /resources; fi &&
                                echo 'I like licorice' > /resources/.my-little-secret &&
                                chmod 640 /resources/.my-little-secret`)
                                chmod 400 /resources/.my-little-secret`)

        await this.manualConfirmation()

        this.verify().hasOutput((outputLines) => {
            for(const line of outputLines) {
                if(line.match(/.*-rw-r-----.*\.my-little-secret.*/)) {
                if(line.match(/.*-r--------.*\.my-little-secret.*/)) {
                    return true
                }
            }