Commit 12337087 authored by Jakob Moser's avatar Jakob Moser
Browse files

Design pooltest for SoSe 2023

Add a printing exercise
parent a01e900d
Loading
Loading
Loading
Loading
+30 −18
Changes for static/js/exercises.mjs: 30 added lines, 18 removed lines.
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ export const practice = test("Linux-Übungsmodus", function() {
    })
})

export const pooltest = test("Pooltest Wintersemester 2022/2023", async function () {
export const pooltest = test("Pooltest Sommersemester 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>
@@ -177,24 +177,35 @@ export const pooltest = test("Pooltest Wintersemester 2022/2023", async function

    this.exercise("Datei anlegen", async function () {
        this.describe(`Erstelle eine Datei mit dem Namen "botschaft" und dem Inhalt
        "Time flies like an arrow" (jeweils ohne
        Anführungszeichen)`)
        "The door is unlockable" (jeweils ohne
        Anführungszeichen und ohne Punkt am Ende).`)

        // 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("Time flies like an arrow")
        this.verify("cat botschaft").hasOutput("The door is unlockable")
    })

    this.exercise("Textdateien lesen und schreiben", 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 'puriS tsaf tfaS tsi ruP' >> reverse.txt")
    
        await this.manualConfirmation()
    
        this.verify("cat correct.txt").hasOutput("Pur ist Saft fast Sirup")
    })

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

        await this.manualConfirmation()

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

        this.verify('/val/2h7je1.sh').hasOutput("yes")
@@ -220,17 +231,6 @@ export const pooltest = test("Pooltest Wintersemester 2022/2023", async function
        this.verify('/val/18ne2x.sh').hasOutput("yes")
    })

    this.exercise("Textdateien lesen und schreiben", 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 'puriS tsaf tfaS tsi ruP' >> reverse.txt")
    
        await this.manualConfirmation()
    
        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 der Besitzer sie lesen und schreiben kann, sonst aber niemand.`)

@@ -325,7 +325,19 @@ export const pooltest = test("Pooltest Wintersemester 2022/2023", async function
        })
    })

    this.exercise("PDF-Datei ausdrucken", async function () {
        this.describe(`Im Ordner "/home/students/robobert" befindet sich eine PDF-Datei mit dem Namen "dokument.pdf".
        Gib den Befehl an, mit dem du die Datei ausdrucken würdest (keine Sorge: es wird nicht wirklich
            etwas ausgedruckt).`)

        await this.prepareWith(` if [[ ! -f /bin/lp ]]; then echo '[ "$1" != "-h" ] && echo "lp: Error - No default destination." && exit 1' > /bin/lp; echo '[ "$2" != "miller" ] && echo "lp: Error - No default destination." && exit 1' >> /bin/lp; echo '[ ! -f "$3" ] && echo "lp: Error - unable to access \\"$3\\" - No such file or directory" && exit 1' >> /bin/lp; echo 'realpath "$3" > /tmp/.file-to-print' >> /bin/lp; echo 'echo "request id is pool-printer-1337 (1 file(s))"' >> /bin/lp; chmod +x /bin/lp; fi &&
            if [[ ! -d /home/students/robobert ]]; then mkdir -p /home/students/robobert; fi &&
            touch /home/students/robobert/dokument.pdf`)

        await this.manualConfirmation()

        this.verify('cat /tmp/.file-to-print').hasOutput("/home/students/robobert/dokument.pdf")
    })

    // To add another exercise, simply copy and paste an exercise(...) block from above and adjust it.
    // Order is respected, so you can e.g. order the exercises by increasing difficulty.