blob: f6215f545dcc2be00fe4608140f64dd2a2fadc5a [file] [log] [blame]
#!/bin/bash
#
# Tests for wrapper.sh.
set -euo pipefail
# The location of the script under test.
readonly WRAPPER="$(realpath "$(dirname "$0")/wrapper.sh")"
# The name of the tests to run. Each test correspond to a function in this file
# whose name is the name of the test prefixed by 'test'.
readonly TEST_NAMES=(
SuccessfulCase
FailedCase
FailedSignalCase
)
# Fails with an error message.
function fatal() {
echo 1>&2 "FATAL: $@"
exit 113
}
function withTestFiles() {
(
echo '1'
echo '2'
echo '3'
echo '4'
echo '5'
echo '6'
echo '7'
) >testfile
(
echo 'module: 1'
echo 'module: 2'
echo 'module: 3'
echo 'module: 4'
echo 'module: 5'
echo 'module: 6'
echo 'module: 7'
) >testfileWithModule
(
echo 'module: 3'
echo 'module: 4'
echo 'module: 5'
echo 'module: 6'
echo 'module: 7'
) >testfileWithModuleTruncated
}
function expectNoWrapOutput() {
if [ "$(cat output-wrap)" != '' ]; then
echo 'Wrap should not generate any output'
diff testfile output || true
return 1
fi
}
function expectSavedOutput() {
if ! diff testfile output; then
echo 'Should have saved the correct output'
diff testfile output || true
return 1
fi
}
function expectFullOutputWithModule() {
if ! diff testfileWithModule output-eval; then
echo 'Should have printed the full output'
diff testfileWithModule output || true
return 1
fi
}
function expectTruncatedOutputWithModule() {
if ! diff testfileWithModuleTruncated output-eval; then
echo 'Should have printed the truncated output'
diff testfileWithModuleTruncated output || true
return 1
fi
}
function whenWrap() {
"$WRAPPER" module "$PWD/output" "$PWD/retval" 'wrap' "$@" \
2>/dev/null \
>output-wrap
}
function whenEval() {
"$WRAPPER" module "$PWD/output" "$PWD/retval" 'eval' "$@" \
>output-eval 2>&1
}
function testSuccessfulCase() {
withTestFiles
(
echo '#!/bin/bash'
echo
echo 'cat testfile'
) >script.sh
chmod 755 script.sh
whenWrap "$PWD/script.sh"
expectNoWrapOutput
if ! whenEval; then
echo 'Should have run successfully'
return 1
fi
expectSavedOutput
expectTruncatedOutputWithModule
}
function testFailedCase() {
withTestFiles
(
echo '#!/bin/bash'
echo
echo 'cat testfile'
echo 'exit 1'
) >script.sh
chmod 755 script.sh
whenWrap "$PWD/script.sh"
expectNoWrapOutput
if whenEval; then
echo 'Should have failed to run'
return 1
fi
expectSavedOutput
expectFullOutputWithModule
}
function testFailedSignalCase() {
withTestFiles
(
echo '#!/bin/bash'
echo
echo 'cat testfile'
echo 'kill -TERM $$'
echo 'echo Should not be printed'
) >script.sh
chmod 755 script.sh
whenWrap "$PWD/script.sh"
expectNoWrapOutput
if whenEval; then
echo 'Should have failed to run'
return 1
fi
expectSavedOutput
expectFullOutputWithModule
}
function main() {
local result=0
local tmp="$(mktemp -d)"
for test_name in "${TEST_NAMES[@]}"; do
mkdir -p "$tmp/$test_name"
cd "$tmp/$test_name"
echo -n "Running $test_name..."
test"$test_name" >log || {
echo "FAILED";
sed -e "s/^/$test_name: /" <log
rm log
result=1;
continue;
}
echo "PASSED"
rm log
done
return "$result"
}
main "$@"