diff --git a/.github/workflows/test-cli.yml b/.github/workflows/test-cli.yml new file mode 100644 index 0000000..be410c0 --- /dev/null +++ b/.github/workflows/test-cli.yml @@ -0,0 +1,39 @@ +name: builds +on: [push, pull_request] + +jobs: + makefile: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - name: setup + run: | + sudo apt-get update -y + sudo apt-get install -y util-linux libmount-dev squashfs-tools wget + sudo mkdir -p /user-environment + sudo mkdir -p /user-profilers + sudo mkdir -p /user-tools + # install squashfs-mount + ( + dd=$(mktemp -d) + cd "$dd" + git clone --depth=1 git@github.com:eth-cscs/squashfs-mount.git + cd squashfs-mount + sudo make install-suid + ) + # install bash-bats + ( + dd=$(mktemp -d) + cd "$dd" + sudo curl -L https://github.com/bats-core/bats-core/archive/refs/tags/v1.9.0.tar.gz | sudo tar xz + sudo mkdir bats-helpers + sudo git clone --depth 1 https://github.com/bats-core/bats-assert.git bats-helpers/bats-assert + sudo git clone --depth 1 https://github.com/bats-core/bats-support.git bats-helpers/bats-support + ) + - name: build + run: | + sudo make install-suid + - name: test + run: | + export BATS_LIB_PATH=/bats-helpers + /bats-core-1.9.0/bin/bats ci/tests.bats diff --git a/ci/tests.bats b/ci/tests.bats new file mode 100644 index 0000000..cbe9058 --- /dev/null +++ b/ci/tests.bats @@ -0,0 +1,65 @@ +#!/bin/bash + +function setup() { + bats_load_library bats-support + bats_load_library bats-assert + SQFSDIR=$(mktemp -d) + export SQFSDIR + dd=$(mktemp -d) + ( + umask 022 + cd "$dd" || exit + mkdir spack-install + echo "This is file A" >> spack-install/fileA.txt + ) + + mksquashfs "$dd" ${SQFSDIR}/binaries.sqfs -quiet -noappend && rm -r "$dd" + + dd=$(mktemp -d) + ( + umask 022 + cd "$dd" || exit + mkdir profilers + echo "profiler stack" >> profilers/fileB.txt + ) + mksquashfs "$dd" ${SQFSDIR}/profilers.sqfs -quiet -noappend && rm -r "$dd" + + dd=$(mktemp -d) + ( + umask 022 + cd "$dd" || exit + mkdir tools + echo "tools stack" >> tools/fileB.txt + ) + mksquashfs "$dd" ${SQFSDIR}/tools.sqfs -quiet -noappend && rm -r "$dd" +} + +function teardown() { + rm -r ${SQFSDIR} +} + + +@test "mount_single_image" { + run squashfs-mount ${SQFSDIR}/binaries.sqfs -- cat /user-environment/spack-install/fileA.txt +} + +#@test "mount_images" { +# run squashfs-mount ${SQFSDIR}/binaries.sqfs:/user-environment ${SQFSDIR}/profilers.sqfs:/user-profilers ${SQFSDIR}/tools.sqfs:/user-tools -- cat /user-environment/spack-install/fileA.txt +#} + + +#@test "check_environment_variable" { +# run bash -c 'squashfs-mount ${SQFSDIR}/binaries.sqfs:/user-environment ${SQFSDIR}/profilers.sqfs:/user-profilers ${SQFSDIR}/tools.sqfs:/user-tools -- (env | grep UENV_MOUNT_LIST)' +} + +#@test "invalid_argument" { +# run squashfs-mount invalid_argument -- true +# assert_failure 1 +#} + +#@test "noop" { +# # check that no namespace is unshared, when nothing is mounted +# original_mnt=$(readlink /proc/$$/ns/mnt) +# run bash -c 'squashfs-mount -- readlink /proc/$$/ns/mnt' +# assert_output --partial ${original_mnt} +#}