Files
heimdal/tests/bin/check-test-lib.in
Nicolas Williams e362d69972 tests: Improving the tests/ framework
- `test_section "..."` replaces `echo "Now we're testing ..."`

 - `test_run ...` replaces `... || { ...; eval "testsfailed"; }`

 - `test_run not ...` replaces `... && { ...; eval "testsfailed"; }`

`test_section` saves the output of the program and shows it only in the
case of failures.

`test_run` arranges to exit with non-zero status if a test fails.
Use `set -e` to force early exit.  Conversely use `set +e` to continue
running the remaining tests when one fails -- this will be very useful
in reducing the number of CI test runs (e.g., GitHub Actions), thus
saving time and money.

This is Claude-generated code, guided by me, with minor corrections.
2026-01-18 19:06:16 -06:00

126 lines
3.2 KiB
Bash
Executable File

#!/bin/sh
#
# Test for test-lib.sh infrastructure
#
# This script runs check-test-lib-inner and validates that:
# 1. Both test sections ran
# 2. The failing section shows command output and messages.log
# 3. The succeeding section only shows its description
#
set -e
objdir="@objdir@"
inner="${objdir}/check-test-lib-inner"
if [ ! -x "$inner" ]; then
echo "Inner test script not found: $inner"
exit 1
fi
# Run the inner test, capturing output (it should fail due to section 1)
set +e
output=$("$inner" 2>&1)
rc=$?
set -e
errors=0
# Check 1: Both test sections should appear
if echo "$output" | grep -q '\[ 1\].*Failing test section'; then
echo "PASS: Section 1 header found"
else
echo "FAIL: Section 1 header not found"
errors=$((errors + 1))
fi
if echo "$output" | grep -q '\[ 2\].*Succeeding test section'; then
echo "PASS: Section 2 header found"
else
echo "FAIL: Section 2 header not found"
errors=$((errors + 1))
fi
# Check 2: Failing section should show FAILED message
if echo "$output" | grep -q '=== FAILED.*sh -c'; then
echo "PASS: FAILED message found for section 1"
else
echo "FAIL: FAILED message not found for section 1"
errors=$((errors + 1))
fi
# Check 3: Failing section should show shell trace (from test_run_x)
if echo "$output" | grep -q '=== Shell trace'; then
echo "PASS: Shell trace header found"
else
echo "FAIL: Shell trace header not found"
errors=$((errors + 1))
fi
# Check 4: Failing section should show command output
if echo "$output" | grep -q '=== Command output'; then
echo "PASS: Command output header found"
else
echo "FAIL: Command output header not found"
errors=$((errors + 1))
fi
if echo "$output" | grep -q 'command stdout'; then
echo "PASS: Command stdout captured"
else
echo "FAIL: Command stdout not captured"
errors=$((errors + 1))
fi
# Check 5: Failing section should show messages.log
if echo "$output" | grep -q '=== messages.log'; then
echo "PASS: messages.log header found"
else
echo "FAIL: messages.log header not found"
errors=$((errors + 1))
fi
if echo "$output" | grep -q 'KDC: some trace output'; then
echo "PASS: messages.log content captured"
else
echo "FAIL: messages.log content not captured"
errors=$((errors + 1))
fi
# Check 6: Succeeding section should NOT show command output or failure
# (The "success output" should not appear since the command succeeded)
if echo "$output" | grep -q 'success output'; then
echo "FAIL: Succeeding section's output should not be shown"
errors=$((errors + 1))
else
echo "PASS: Succeeding section's output correctly hidden"
fi
# Check 7: Should report 1 failed section
if echo "$output" | grep -q '1 test section(s) failed'; then
echo "PASS: Correct failure count reported"
else
echo "FAIL: Incorrect failure count"
errors=$((errors + 1))
fi
# Check 8: Inner script should have exited with non-zero
if [ $rc -ne 0 ]; then
echo "PASS: Inner script exited with non-zero ($rc)"
else
echo "FAIL: Inner script should have exited non-zero"
errors=$((errors + 1))
fi
echo ""
if [ $errors -eq 0 ]; then
echo "All tests passed"
exit 0
else
echo "$errors test(s) failed"
echo ""
echo "=== Full output from inner script ==="
echo "$output"
exit 1
fi