diff options
Diffstat (limited to 'test/local')
| -rw-r--r-- | test/local/lib/log.sh | 128 | ||||
| -rw-r--r-- | test/local/lib/test.sh (renamed from test/local/lib/common.sh) | 48 | ||||
| -rwxr-xr-x | test/local/main.sh | 51 | ||||
| -rw-r--r-- | test/local/tst-chmod.sh | 3 | ||||
| -rw-r--r-- | test/local/tst-remove-symlink.sh | 3 | ||||
| -rw-r--r-- | test/local/tst-update-symlink.sh | 3 |
6 files changed, 158 insertions, 78 deletions
diff --git a/test/local/lib/log.sh b/test/local/lib/log.sh new file mode 100644 index 0000000..b26e16a --- /dev/null +++ b/test/local/lib/log.sh @@ -0,0 +1,128 @@ +# Copyright (c) 2026 Egor Tensin <egor@tensin.name> +# This file is part of the "config-links" project. +# For details, see https://github.com/egor-tensin/config-links +# Distributed under the MIT License. + +log() { + local msg + for msg; do + echo -e "$test_file | $msg" >&2 + done +} + +fail() { + local msg + for msg; do + log "FAIL: $msg" + done +} + +fail_details() { + local msg + for msg; do + fail " $msg" + done +} + +log_numof_tests_ok=0 +log_numof_tests_failed=0 +declare -a log_tests_failed=() +declare -A log_tests_should_fail=() + +log_test_start() { + if [ "$#" -ne 1 ]; then + echo "usage: ${FUNCNAME[0]} TEST_FILE" >&2 + return 1 + fi + + local test_file="$1" + + if [ -n "${test_should_fail:-}" ]; then + log_tests_should_fail["$test_file"]=1 + fi + + cat <<EOF >&2 + +====================================================================== +TEST: $test_file +====================================================================== +EOF + + log "Should fail: ${test_should_fail:-No}" +} + +log_test_ok() { + if [ "$#" -ne 1 ]; then + echo "usage: ${FUNCNAME[0]} TEST_FILE" >&2 + return 1 + fi + + log_numof_tests_ok=$((log_numof_tests_ok + 1)) + + cat <<EOF >&2 +---------------------------------------------------------------------- +OK: $1 +---------------------------------------------------------------------- +EOF +} + +log_test_fail() { + if [ "$#" -ne 1 ]; then + echo "usage: ${FUNCNAME[0]} TEST_FILE" >&2 + return 1 + fi + + log_numof_tests_failed=$((log_numof_tests_failed + 1)) + log_tests_failed+=("$1") + + cat <<EOF >&2 +---------------------------------------------------------------------- +FAIL: $1 +---------------------------------------------------------------------- +EOF +} + +log_test_finish() { + if [ "$#" -ne 2 ]; then + echo "usage: ${FUNCNAME[0]} TEST_FILE EXIT_CODE" >&2 + return 1 + fi + + local test_file="$1" + local ret="$2" + local test_should_fail + test_should_fail="${log_tests_should_fail["$test_file"]:+x}" + + if [ "$ret" -eq 0 ] || [ -n "$test_should_fail" ]; then + log_test_ok "$test_file" + else + log_test_fail "$test_file" + fi +} + +log_tests_summary() { + cat <<EOF >&2 + +====================================================================== +SUMMARY +====================================================================== +OK: $log_numof_tests_ok +FAIL: $log_numof_tests_failed +EOF + + local test_file + for test_file in ${log_tests_failed[@]+"${log_tests_failed[@]}"}; do + cat <<EOF >&2 +FAIL: $test_file +EOF + done + + cat <<EOF >&2 +---------------------------------------------------------------------- +EOF + + local ret=0 + [ "$log_numof_tests_failed" -gt 0 ] && ret=1 + + return "$ret" +} diff --git a/test/local/lib/common.sh b/test/local/lib/test.sh index fd9612b..b6e444e 100644 --- a/test/local/lib/common.sh +++ b/test/local/lib/test.sh @@ -21,10 +21,10 @@ test_setup() { test_dest_dir="$test_root_dir/$dest_dir_name" test_alt_dest_dir="$test_root_dir/$alt_dest_dir_name" - echo "Root directory: $test_root_dir" - echo "Shared directory: $test_src_dir" - echo "%DEST% directory: $test_dest_dir" - echo "%ALT_DEST% directory: $test_alt_dest_dir" + log "Root directory: $test_root_dir" + log "Shared directory: $test_src_dir" + log "%DEST% directory: $test_dest_dir" + log "%ALT_DEST% directory: $test_alt_dest_dir" cp -r -- "$script_dir/data/$src_dir_name" "$test_src_dir" cp -r -- "$script_dir/data/$dest_dir_name" "$test_dest_dir" @@ -51,13 +51,10 @@ test_cleanup_default() { } test_run_script() { - echo - echo -n 'Executing script:' + local msg='Executing script:' + msg="$msg$( printf -- ' %q' "$@" --shared-dir "$test_src_dir" --database "$test_root_dir/links.bin" )" + log "$msg" - printf -- ' %q' "$@" --shared-dir "$test_src_dir" --database "$test_root_dir/links.bin" - printf -- '\n' - - echo DEST="$test_dest_dir" ALT_DEST="$test_alt_dest_dir" "$@" --shared-dir "$test_src_dir" --database "$test_root_dir/links.bin" } @@ -80,24 +77,19 @@ test_verify_output() { fi local expected_output="$1" - echo - echo 'Expected directory structure:' - echo "$expected_output" local dest_dir="$test_dest_dir" [ "$#" -ge 2 ] && dest_dir="$2" + log "Verifying directory structure in $dest_dir..." + local actual_output actual_output="$( find "$dest_dir" -printf '%h/%f->%l\n' | sort )" - echo - echo 'Actual directory structure:' - echo "$actual_output" - echo - if [ "$actual_output" = "$expected_output" ]; then - echo "... They match!" - else - echo "... The actual directory structure does not match the expected directory structure!" >&2 + if [ "$actual_output" != "$expected_output" ]; then + fail "The actual files do not match the expected directory structure!" + fail_details "Expected:\n$expected_output" + fail_details "Actual:\n$actual_output" return 1 fi } @@ -111,20 +103,16 @@ test_verify_mode() { local expected_mode="$1" local path="$2" - echo - echo "Checking permissions for file: $path" - echo "Expected mode: $expected_mode" + log "Checking permissions for file: $path" local actual_mode actual_mode="$( stat -c '%a' -- "$path" )" actual_mode="0$actual_mode" - echo "Actual mode: $actual_mode" - - if [ "$actual_mode" = "$expected_mode" ]; then - echo "... They match!" - else - echo "... They don't match." + if [ "$actual_mode" != "$expected_mode" ]; then + fail "They don't match" + fail_details "Expected: $expected_mode" + fail_details "Actual: $actual_mode" return 1 fi } diff --git a/test/local/main.sh b/test/local/main.sh index 64a8b7b..5713366 100755 --- a/test/local/main.sh +++ b/test/local/main.sh @@ -13,22 +13,15 @@ script_dir="$( dirname -- "${BASH_SOURCE[0]}" )" script_dir="$( cd -- "$script_dir" && pwd )" readonly script_dir -numof_ok_tests=0 -numof_failed_tests=0 -declare -a failed_tests=() +source "$script_dir/lib/log.sh" run_test_file() { local test_file for test_file; do - echo - echo ====================================================================== - echo "TEST: $test_file" - echo ====================================================================== - - source "$script_dir/lib/common.sh" + source "$script_dir/lib/test.sh" source "$script_dir/$test_file" - echo "Should fail? ${test_should_fail:-No}" + log_test_start "$test_file" set +e ( @@ -44,21 +37,10 @@ run_test_file() { test_run ) - local ec="$?" + local ret="$?" set -e - if [ "$ec" -eq 0 ] || [ -n "${test_should_fail:+Yes}" ]; then - echo ---------------------------------------------------------------------- - echo "OK: $test_file" - echo ---------------------------------------------------------------------- - numof_ok_tests=$((numof_ok_tests + 1)) - else - echo ---------------------------------------------------------------------- - echo "FAIL: $test_file" - echo ---------------------------------------------------------------------- - numof_failed_tests=$((numof_failed_tests + 1)) - failed_tests+=("$test_file") - fi + log_test_finish "$test_file" "$ret" done } @@ -72,30 +54,15 @@ main() { -type f \ -regex '.*/tst-.*\.sh$' \ -regextype posix-basic \ - -printf '%P\0' | - sort -z | + -printf '%P\0' \ + | sort -z \ + | \ while IFS= read -d '' -r test_file; do test_files+=("$test_file") done run_test_file ${test_files[@]+"${test_files[@]}"} - - local ret=0 - [ "$numof_failed_tests" -gt 0 ] && ret=1 - - echo - echo ====================================================================== - echo SUMMARY - echo ====================================================================== - echo "OK: $numof_ok_tests" - echo "FAIL: $numof_failed_tests" - if [ "${#failed_tests[@]}" -gt 0 ]; then - for test_file in ${failed_tests[@]+"${failed_tests[@]}"}; do - echo "FAIL: $test_file" - done - fi - echo ---------------------------------------------------------------------- - return "$ret" + log_tests_summary } main diff --git a/test/local/tst-chmod.sh b/test/local/tst-chmod.sh index 2d70e06..dcf5045 100644 --- a/test/local/tst-chmod.sh +++ b/test/local/tst-chmod.sh @@ -14,8 +14,7 @@ $test_dest_dir/foo-> $test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt" test_verify_output "$expected_output" - echo - echo 'Verifying 1.txt (the shared file) permissions...' + log "Verifying 1.txt's (the shared file) permissions..." test_verify_mode 0644 "$test_src_dir/%DEST%/1.txt" test_run_chmod 0600 diff --git a/test/local/tst-remove-symlink.sh b/test/local/tst-remove-symlink.sh index da61867..a8f768f 100644 --- a/test/local/tst-remove-symlink.sh +++ b/test/local/tst-remove-symlink.sh @@ -8,8 +8,7 @@ test_run() { local expected_output="$test_dest_dir->" test_verify_output "$expected_output" - echo - echo 'Verifying 3_copy.txt (the shared file) is valid...' + log 'Verifying 3_copy.txt (the shared file) is valid...' local copy_target copy_target="$( readlink -e -- "$test_src_dir/%DEST%/3_copy.txt" )" diff --git a/test/local/tst-update-symlink.sh b/test/local/tst-update-symlink.sh index 1a1f24c..b081fdf 100644 --- a/test/local/tst-update-symlink.sh +++ b/test/local/tst-update-symlink.sh @@ -16,8 +16,7 @@ $test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt" test_verify_output "$expected_output" - echo - echo 'Verifying 3_copy.txt (the symlink) is valid...' + log 'Verifying 3_copy.txt (the symlink) is valid...' local copy_target copy_target="$( readlink -- "$test_dest_dir/3_copy.txt" )" |
