summaryrefslogtreecommitdiff
path: root/secrets/test/run.sh
blob: 09696186b9afb02694788f52152fc015270ef236 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/bash
# Test runner for szecret tests
# Runs all test files or specific ones passed as arguments
# Each test file runs in its own isolated environment

set -euo pipefail

this_dir="$(cd "$(dirname "$0")" && pwd)"

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'

# Find all test files (excluding common.sh and run.sh)
find_test_files() {
    find "${this_dir}" -maxdepth 1 -name '*.sh' -type f \
        | xargs -n1 basename \
        | grep -Ev '^(common|run)\.sh$' \
        | sort
}

run_test_file() {
    local test_file="$1"
    local test_path="${this_dir}/${test_file}"

    if [[ ! -x "${test_path}" ]]; then
        chmod +x "${test_path}"
    fi

    echo "--- ${test_file%.sh} ---"

    # Run each test file in its own subprocess with isolated environment
    if "${test_path}"; then
        return 0
    else
        return 1
    fi
}

main() {
    echo "=== szecret test suite ==="
    echo

    local test_files=()
    local failed=0

    if [[ $# -gt 0 ]]; then
        # Run specific test files
        for arg in "$@"; do
            # Allow both "list" and "list.sh"
            local file="${arg%.sh}.sh"
            if [[ -f "${this_dir}/${file}" ]]; then
                test_files+=("${file}")
            else
                echo "Unknown test file: ${arg}" >&2
                exit 1
            fi
        done
    else
        # Run all test files
        while IFS= read -r file; do
            test_files+=("${file}")
        done < <(find_test_files)
    fi

    for test_file in "${test_files[@]}"; do
        if ! run_test_file "${test_file}"; then
            failed=1
        fi
        echo
    done

    if [[ ${failed} -eq 0 ]]; then
        echo -e "${GREEN}=== All tests passed ===${NC}"
    else
        echo -e "${RED}=== Some tests failed ===${NC}"
        exit 1
    fi
}

main "$@"