Commit 7a9de14c authored by Jakob Moser's avatar Jakob Moser
Browse files

Merge branch 'implement-exercises' into 'master'

Implement exercises

Closes #1

See merge request !11
parents e594b643 e5ccbd74
Loading
Loading
Loading
Loading
+112 −2
Original line number Diff line number Diff line
@@ -187,11 +187,48 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () {
        this.verify("cat botschaft").hasOutput("Der Junge sieht den Mann mit dem Fernglas")
    })

    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.`)
    
        await this.manualConfirmation()
    
        this.verify('if [ -d /tmp/computational/linguistics/ ]; then echo "yes"; else echo "no"; fi').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()
    
        this.verify(`if ( ! [ -d /resources/stuff/to ] &&
                    [ -f /resources/stuff/b_file.png ] ); then echo "yes"; else echo "no"; fi`).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 'ILOC' >> reverse.txt")
    
        await this.manualConfirmation()
    
        this.verify("cat correct.txt").hasOutput("COLI")
    })

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

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

        await this.manualConfirmation()

@@ -202,6 +239,79 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () {
        })
    })

    // To add another exercise, simply copy and paste an this.exercise(...) block from above and adjust it.
    this.exercise("Aktuelles Arbeitsverzeichnis anfangen", 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.manualConfirmation()

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

    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
        diesem Ordner, die als Namen Mail-Adressen haben, mit denen du uns nicht erreichen kannst.`)

        await this.prepareWith(`mkdir -p /resources/Contacts/unsure && 
                                cd /resources/Contacts/unsure &&
                                touch technik@cl.uni-heidelberg.de it-support@cl.uni-heidelberg.de technik-gruppe@cl.uni-heidelberg.de`)

        await this.manualConfirmation()

        this.verify(`if ( ! [ -f /resources/Contacts/unsure/technik@cl.uni-heidelberg.de ] &&
                          ! [ -f /resources/Contacts/unsure/it-support@cl.uni-heidelberg.de ] &&
                          ! [ -f /resources/Contacts/unsure/technik-gruppe@cl.uni-heidelberg.de ] &&
                          ! [ -f /resources/Contacts/technik-gruppe@cl.uni-heidelberg.de ] &&
                          ! [ -f /resources/Contacts/it-support@cl.uni-heidelberg.de ] &&
                            [ -f /resources/Contacts/technik@cl.uni-heidelberg.de ] ); then echo 'yes'; else echo 'no'; fi`).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".`)

        await this.prepareWith(`mkdir -p /resources/so_much &&
                                cd /resources/so_much &&
                                for i in "peter" "susanne" "josef" "martin" "samira" "gerhard" "manfred" "ahmad"
                                do
                                    for j in "dateien" "dokumente" "filme" "videos" "musik" "software"
                                    do 
                                        echo "Some content" > "$i-$j"
                                    done
                                done
                                `)

        await this.manualConfirmation()

        this.verify("diff -r /resources/so_much /root/much &> /dev/null; if [ $? == 0 ]; then echo 'yes'; else echo 'no'; fi").hasOutput("yes")
    })

    this.exercise("Berechtigungen einer versteckten Datei herausfinden", async function () {
        this.describe(`Im Ordner "resources" im Wurzelverzeichnis liegt eine versteckte Datei mit dem Namen ".my-little-secret".
        Finde heraus, wer auf diese Datei Lesezugriff hat.`)

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

        await this.manualConfirmation()

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



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