Commit be460f48 authored by H. Fischer's avatar H. Fischer
Browse files

Slightly modify pooltest

parent 7f3acfe7
Loading
Loading
Loading
Loading
+42 −41
Original line number Diff line number Diff line
@@ -128,15 +128,19 @@ export const practice = test("Linux-Übungsmodus", function() {
        })
    })

    this.exercise("Berechtigungen ändern", async function () {
        this.describe(`Ändere die Dateirechte von "saetze" so, dass der Besitzer die Datei nur lesen kann, die besitzende Gruppe die Datei lesen und schreiben kann und alle anderen gar nichts dürfen.`)
    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.`)

        await this.prepareWith("if [[ ! -d /root/tux ]]; then mkdir /root/tux; fi; cd /root/tux; echo Colorless green ideas sleep furiously > saetze; echo The cat is on the mat >> saetze; chmod 644 saetze")
        await this.prepareWith(`mkdir -p /resources &&
                                echo 'Dies ist ein Geheimnis.' > /resources/supergeheim &&
                                chmod g+w /resources/supergeheim`)

        await this.manualConfirmation()

        this.verify("ls -ld saetze").hasOutput((outputLines) => {
            return outputLines.length === 1 && outputLines[0].substring(0, 10).match(/-r--rw----/)
        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(/-rw.--.--./)
        })
    })

@@ -211,41 +215,6 @@ export const pooltest = test("Pooltest Wintersemester 2023/2024", async function
        this.verify('/val/2h7je1.sh').hasOutput("yes")
    })

    this.exercise("Löschen und Umbenennen von Ordnern und Dateien", async function () {
        this.describe(`Gehe in den Ordner "/resources/stuff". Benenne die Datei "a_file.png" zu "b_file.png" um, 
        und lösche den Unterordner "to/" mit all seinen Inhalten.`)
    
        await this.prepareWith(`mkdir -p /resources/stuff/to/delete &&
                                touch /resources/stuff/a_file.png &&
                                cd /resources/stuff/to/delete &&
                                for i in 1 2 3 4 5 6 7 8 9 10; do touch "trashfile$i.txt"; done &&
                                cd /root`)
    
        await this.manualConfirmation()

        await this.prepareWith(`mkdir -p /val &&
                                echo 'if ( ! [ -d /resources/stuff/to ] &&
                                           [ -f /resources/stuff/b_file.png ] ); then echo "yes"; else echo "no"; fi' > /val/18ne2x.sh &&
                                chmod a+x /val/18ne2x.sh`)
    
        this.verify('/val/18ne2x.sh').hasOutput("yes")
    })

    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.`)

        await this.prepareWith(`mkdir -p /resources &&
                                echo 'Dies ist ein Geheimnis.' > /resources/supergeheim`)

        await this.manualConfirmation()

        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(/-rw.--.--./)
        })
    })

    this.exercise("Aktuelles Arbeitsverzeichnis anzeigen", 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.`)
@@ -280,6 +249,26 @@ export const pooltest = test("Pooltest Wintersemester 2023/2024", async function
        this.verify('/val/2bx821.sh').hasOutput("yes")
    })

    this.exercise("Löschen und Umbenennen von Ordnern und Dateien", async function () {
        this.describe(`Gehe in den Ordner "/resources/stuff". Benenne die Datei "a_file.png" zu "b_file.png" um, 
        und lösche den Unterordner "to/" mit all seinen Inhalten.`)
    
        await this.prepareWith(`mkdir -p /resources/stuff/to/delete &&
                                touch /resources/stuff/a_file.png &&
                                cd /resources/stuff/to/delete &&
                                for i in 1 2 3 4 5 6 7 8 9 10; do touch "trashfile$i.txt"; done &&
                                cd /root`)
    
        await this.manualConfirmation()

        await this.prepareWith(`mkdir -p /val &&
                                echo 'if ( ! [ -d /resources/stuff/to ] &&
                                           [ -f /resources/stuff/b_file.png ] ); then echo "yes"; else echo "no"; fi' > /val/18ne2x.sh &&
                                chmod a+x /val/18ne2x.sh`)
    
        this.verify('/val/18ne2x.sh').hasOutput("yes")
    })

    this.exercise("Kopieren vieler Dateien in ein neues Verzeichnis", async function () {
        this.describe(`Kopiere alle Dateien aus dem Verzeichnis "/resources/so_much" in einen 
        neuen Unterordner deines Home-Verzeichnisses mit dem Namen "much".`)
@@ -325,9 +314,21 @@ export const pooltest = test("Pooltest Wintersemester 2023/2024", async function
        })
    })

    this.exercise("Berechtigungen ändern", async function () {
        this.describe(`Ändere die Dateirechte von "saetze" so, dass der Besitzer die Datei nur lesen kann, die besitzende Gruppe die Datei lesen und schreiben kann und alle anderen gar nichts dürfen.`)

        await this.prepareWith("if [[ ! -d /root/tux ]]; then mkdir /root/tux; fi; cd /root/tux; echo Colorless green ideas sleep furiously > saetze; echo The cat is on the mat >> saetze; chmod 644 saetze")

        await this.manualConfirmation()

        this.verify("ls -ld saetze").hasOutput((outputLines) => {
            return outputLines.length === 1 && outputLines[0].substring(0, 10).match(/-r--rw----/)
        })
    })

    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
        Gib den Befehl an, mit dem du die Datei von einem Poolrechner aus 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 &&