diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/setup.sh | 186 | 
1 files changed, 186 insertions, 0 deletions
| diff --git a/tests/setup.sh b/tests/setup.sh new file mode 100644 index 0000000..78c710d --- /dev/null +++ b/tests/setup.sh @@ -0,0 +1,186 @@ +#!/usr/bin/env bash +set -o pipefail + +export LOGFILE_STASIS="stasis.log" +export LOGFILE_INDEXER="stasis_indexer.log" +export CHECK_OUTPUT_PATTERNS=() + +unset STASIS_SYSCONFDIR +if [ -n "$GITHUB_TOKEN" ] && [ -z "$STASIS_GH_TOKEN"]; then +    export STASIS_GH_TOKEN="$GITHUB_TOKEN" +else +    export STASIS_GH_TOKEN="anonymous" +fi + +if [[ -z "$PYTHON_VERSIONS" ]]; then +    PYTHON_VERSIONS=( +        3.10 +        3.11 +        3.12 +    ) +fi + +setup_script_dir="$(dirname ${BASH_SOURCE[0]})" +TOPDIR=$(pwd) + +WS_DEFAULT=rt_workspace_ +setup_workspace() { +    if [ -z "$1" ]; then +        echo "setup_workspace requires a name argument" >&2 +        return 1 +    fi +    WORKSPACE="${WS_DEFAULT}$1" +    rm -rf "$WORKSPACE" +    if ! mkdir -p "$WORKSPACE"; then +        echo "directory creation failed. cannot continue" >&2 +        return 1; +    fi +    WORKSPACE="$(realpath $WORKSPACE)" +     +    export PREFIX="$WORKSPACE"/local +    if ! mkdir -p "$PREFIX"; then +        echo "directory creation failed. cannot continue" >&2 +        return 1; +    fi + +    export BUILD_DIR="$WORKSPACE"/build +    if ! mkdir -p "$BUILD_DIR"; then +        echo "directory creation failed. cannot continue" >&2 +        return 1; +    fi + +    pushd "$WORKSPACE" +    export LANG="C" +    export HOME="$WORKSPACE" +    . /etc/profile +} + +teardown_workspace() { +    if [ -z "$1" ]; then +        echo "teardown_workspace requires a workspace path" >&2 +        return 1 +    elif ! [[ ${WS_DEFAULT}$1 =~ ${WS_DEFAULT}.* ]]; then +        echo "$1 is not a valid workspace" >&2 +        return 1 +    fi +    popd +    clean_up +} + +install_stasis() { +    pushd "$BUILD_DIR" +    if ! cmake -DCMAKE_INSTALL_PREFIX="$PREFIX" -DCMAKE_BUILD_TYPE=Debug "${TOPDIR}"/../..; then +        echo "cmake failed" >&2 +        return 1 +    fi + +    if ! make install; then +        echo "make failed" >&2 +        return 1 +    fi + +    export PATH="$PREFIX/bin:$PATH" +    hash -r +    if ! type -P stasis; then +        echo "stasis program not on PATH" >&2 +        return 1 +    fi + +    if ! type -P stasis_indexer; then +        echo "stasis_indexer program not on PATH" >&2 +        return 1 +    fi +    popd +} + +run_stasis() { +    local logfile="$LOGFILE_STASIS" +    $(type -P stasis) --unbuffered -v $@ 2>&1 | tee "$logfile" +} + +run_stasis_indexer() { +    local logfile="$LOGFILE_INDEXER" +    local root="$1" +    if [ -z "$root" ]; then +        echo "run_stasis_indexer root directory cannot be empty" >&2 +        exit 1 +    fi +    $(type -P stasis_indexer) --web --unbuffered -v "$root"/* 2>&1 | tee "$logfile" +} + +check_output_add() { +    local pattern="$1" +    CHECK_OUTPUT_PATTERNS+=("$pattern") +} + +check_output_reset() { +    CHECK_OUTPUT_PATTERNS=() +} + +check_output_stasis_dir() { +    local startdir="$1" +    local logfile="$LOGFILE_STASIS" + +    echo "#### Files ####" +    find $startdir | sort +    echo + +    echo "#### Contents ####" +    files=$(find $startdir -type f \( -name "$logfile" -o -name '*.yml' -o -name '*.md' -o -name '*.stasis' -o -name '*.ini' \) | sort) +    for x in $files; do +        echo +        echo "FILENAME: $x" +        echo +        if [ "$x" == "$logfile" ]; then +            # do not print thousands of lines of output we _just_ sat through +            echo "Output omitted" +        else +            cat "$x" +            echo "[EOF]" +        fi +        echo + +        for cond in "${CHECK_OUTPUT_PATTERNS[@]}"; do +            if grep --color -H -n "$cond" "$x" >&2; then +                echo "ERROR DETECTED IN $x!" >&2 +                retcode+=1 +            fi +        done +    done + +    return $retcode +} + +check_output_indexed_dir() { +    local retcode=0 +    local startdir="$1" +    local logfile="$2" + +    echo "#### Files ####" +    find $startdir | sort + +    for cond in "${CHECK_OUTPUT_PATTERNS[@]}"; do +        if grep --color -H -n "$cond" "$logfile" >&2; then +            echo "ERROR DETECTED IN INDEX OPERATION!" >&2 +            retcode+=1 +        fi +    done + +    echo "#### Contents ####" +    files=$(find $startdir -type f \( -name '*.html' \) | sort) +    for x in $files; do +        echo +        echo "FILENAME: $x" +        echo +        cat "$x" +        echo "[EOF]" +        echo +    done +    return $retcode +} + +clean_up() { +    if [ -z "$RT_KEEP_WORKSPACE" ] && [ -d "$WORKSPACE" ]; then +        rm -rf "$WORKSPACE" +    fi +}
\ No newline at end of file | 
