From dafb44313cc3158b6e7ffdeb85061edc9b685d5a Mon Sep 17 00:00:00 2001 From: Andrew Dunham Date: Mon, 12 Jul 2021 22:36:20 -0400 Subject: [PATCH] Add tests for 'run' and fix non-POSIX behavior --- Makefile | 3 ++ lib | 0 run | 4 +- test/lib_test.sh | 12 +++-- test/run_test.sh | 136 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 148 insertions(+), 7 deletions(-) mode change 100644 => 100755 lib create mode 100644 test/run_test.sh diff --git a/Makefile b/Makefile index 359218a..7ebc511 100644 --- a/Makefile +++ b/Makefile @@ -9,11 +9,14 @@ test: lint test-dash test-bash test-ash: @cd test && ash ./lib_test.sh + @cd test && ash ./run_test.sh test-dash: @cd test && dash ./lib_test.sh + @cd test && dash ./run_test.sh test-bash: @cd test && bash ./lib_test.sh + @cd test && bash ./run_test.sh .PHONY: lint test test-dash test-bash diff --git a/lib b/lib old mode 100644 new mode 100755 diff --git a/run b/run index dfbf7ae..6228acd 100755 --- a/run +++ b/run @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh set -e set -u @@ -53,7 +53,7 @@ run_group() { } run_unit() { - /bin/bash -l -c "set -e; set -u; set -o pipefail; source lib; source '$(root_path)/$*'" + /bin/sh -l -c "set -e; set -u; set -o pipefail; . ./lib; . '$(root_path)/$*'" } log_file() { diff --git a/test/lib_test.sh b/test/lib_test.sh index f0138ff..d63065c 100755 --- a/test/lib_test.sh +++ b/test/lib_test.sh @@ -5,11 +5,13 @@ . ../lib oneTimeSetUp() { - printf "[INFO] Current shell is: %s\n" "$(cat /proc/$$/cmdline | tr '\0' '\n' | head -n1)" - printf "[INFO] Utility paths:\n" - for util in awk sed grep; do - printf "%8s: %s\n" "$util" "$(which "$util")" - done + if [ -n "${VERBOSE:-}" ]; then + printf "[INFO] Current shell is: %s\n" "$( "$TEST_TMPDIR/units/one" + printf '#!/bin/sh\necho second message' > "$TEST_TMPDIR/units/two" + printf '#!/bin/sh\necho oops\nexit 1' > "$TEST_TMPDIR/units/fail" + + # Make everything executable + chmod +x "$TEST_TMPDIR"/units/* + + # Some groups that to tie things together + printf "groups/group2\n" > "$TEST_TMPDIR/groups/group1" + printf "units/two\n" > "$TEST_TMPDIR/groups/group2" + printf "units/fail\n" > "$TEST_TMPDIR/groups/fail" + + #tree "$TEST_TMPDIR" +} + +tearDown() { + if test -f "$TEST_TMPDIR/.apply_test_dir"; then + rm -rf "$TEST_TMPDIR" + fi +} + +testRunUnits() { + ( + cd "$TEST_TMPDIR" + ./run units/one units/two + ) >"$TEST_TMPDIR/stdout" 2>"$TEST_TMPDIR/stderr" + + local expected + { expected="$(cat)"; } <"$TEST_TMPDIR/stdout" 2>"$TEST_TMPDIR/stderr" + set -e + + local stdout_expected stderr_expected + { stdout_expected="$(cat)"; } <"$TEST_TMPDIR/stdout" 2>"$TEST_TMPDIR/stderr" + + local expected + { expected="$(cat)"; } <"$TEST_TMPDIR/stdout" 2>"$TEST_TMPDIR/stderr" + + local stdout_expected stderr_expected + { stdout_expected="$(cat)"; } <