#!/usr/bin/env -S bats --report-formatter junit --formatter tap

export BATS_JUNIT_CLASS=Charliecloud
load ./common/test_helper_functions || exit 1
source ./common/functions || exit 1

if [ -s ./common/TEST_ENV ];then
    source ./common/TEST_ENV
fi

check_rms
rm=$RESOURCE_MANAGER
image_dir=~/tests/runtimes/charliecloud

setup() {
    if [ -z "$MODULEPATH" ];then
        . /etc/profile.d/lmod.sh || exit 1
    fi
    if [ x$rm = "xopenpbs" ];then
        . /etc/profile.d/pbs.sh || exit 1
    fi
    module purge             || exit 1
    module load charliecloud || exit 1
}

echo " "
echo " "
echo "-------------------------------------------------------"
echo "Runtimes: Charliecloud"
echo "-------------------------------------------------------"

@test "[charliecloud] check for RPM" {
    check_if_rpm_installed "charliecloud${DELIM}"
}

@test "[charliecloud] build image" {
    skip "skip experimental charliecloud image builder"
    run timeout 20s $CHARLIECLOUD_DIR/share/doc/charliecloud/test/chtest/Build $CHARLIECLOUD_DIR/share/doc/charliecloud/test/chtest chtest.tar.gz $image_dir
    assert_success
}

@test "[charliecloud] build alpine image from Docker (using singularity)" {

#    check_if_rpm_installed "singularity"
    run which singularity
    assert_success

    if [ -d alpine ];then
       	rm -rf ./alpine
    fi 

    run timeout 30s singularity build --sandbox alpine docker://alpine:3
    assert_success
}


@test "[charliecloud] exec image locally" {
    run ls -l alpine/etc/os-release
    assert_success

    run timeout 20s ch-run alpine -- cat /etc/os-release
    assert_success
}

@test "[charliecloud] exec image via $rm" {

    run ls -l alpine/etc/os-release
    assert_success

    run_serial_binary timeout 20s ch-run alpine -- cat /etc/os-release
    assert_success

    rm -rf ./alpine
}
