blob: 97256087dedf9d4f9ca467e122a3c4bbaae78bc3 [file]
#!/usr/bin/env bash
# Stdout-skip test for T-01.
#
# PLAN.md §3.3 adds this guard in CloseFiles():
# if (!rm_output && context->copy_stat && context->current_output_path) {
# CopyStat(context->current_input_path, context->fout);
# }
# so that when current_output_path is NULL (stdout), CopyStat() is skipped
# entirely — not even called with a NULL path. PLAN.md §5.6 prescribes
# exercising this by running a compress|decompress pipe that uses stdout
# on both sides.
#
# Success criteria:
# - The pipe exits with status 0.
# - The decompressed bytes on the final stdout equal the original input.
# - No sanitizer/diagnostic output on stderr.
#
# Usage: test_copystat_stdout_skip.sh /path/to/brotli
set -euo pipefail
if [[ $# -ne 1 ]]; then
echo "usage: $0 /path/to/brotli" >&2
exit 2
fi
brotli_bin=$(readlink -f -- "$1")
workdir=$(mktemp -d)
cleanup() {
rm -rf -- "$workdir"
}
trap cleanup EXIT
payload='hello brotli stdout pipeline'
echo "$payload" > "$workdir/expected.txt"
stderr_log="$workdir/stderr.log"
# Both stages use stdin/stdout (-c). On the compress side, context->fout is
# bound to stdout and context->current_output_path should be NULL; same on
# the decompress side. CopyStat must therefore be skipped on both.
# We separate stderr so we can assert it is empty.
result=$(
echo "$payload" \
| "$brotli_bin" -c 2>"$stderr_log" \
| "$brotli_bin" -dc 2>>"$stderr_log"
)
if [[ "$result" != "$payload" ]]; then
echo "FAIL: stdout pipeline roundtrip did not preserve payload" >&2
echo " got: $result" >&2
echo " wanted: $payload" >&2
exit 1
fi
# The fix must not introduce spurious diagnostics on the stdout path.
# Some sanitizers may print LeakSanitizer summaries; accept those only.
if [[ -s "$stderr_log" ]]; then
# Filter sanitizer chatter that is not a brotli diagnostic.
filtered=$(grep -v -E \
-e '^==[0-9]+==' \
-e '^SUMMARY:' \
-e 'AddressSanitizer' \
-e 'LeakSanitizer' \
-e 'UndefinedBehaviorSanitizer' \
"$stderr_log" || true)
if [[ -n "$filtered" ]]; then
echo "FAIL: unexpected stderr output from stdout pipeline:" >&2
echo "$filtered" >&2
exit 1
fi
fi
echo "T-01 STDOUT SKIP: compress|decompress stdout pipeline clean"