aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-02-12 07:06:15 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-12 07:07:57 -0800
commit28bd997c1c8793973f63dcae4c22bbae49e7d8b7 (patch)
treee58eb8f22a31924bfe5106af151a0f6921ddcd45
parent7f1f3a203ae879bd404eccb0937cf03e77b3d61a (diff)
Fixing test-setup.sh occasionally missing stdout/stderr, on systems where "tail --pid" is supported.
The solutions aren't mine, the new test was taken from Ola's unknown commit and the way to avoid race condition courtesy of sethkoehler@ Mitigates #4608 for compatible Linux systems. TESTED=manual scripts and new test case. RELNOTES: None PiperOrigin-RevId: 185374273
-rwxr-xr-xsrc/test/shell/bazel/bazel_test_test.sh35
-rwxr-xr-xtools/test/test-setup.sh26
2 files changed, 58 insertions, 3 deletions
diff --git a/src/test/shell/bazel/bazel_test_test.sh b/src/test/shell/bazel/bazel_test_test.sh
index 944c08faf4..389bc91b14 100755
--- a/src/test/shell/bazel/bazel_test_test.sh
+++ b/src/test/shell/bazel/bazel_test_test.sh
@@ -339,6 +339,41 @@ EOF
\?\?\?\?\?<!CDATA\[\]\]>\]\]<!\[CDATA\[>\]\]></system-out>'
}
+# Tests that the test.xml and test.log are correct and the test does not
+# hang when the test launches a subprocess.
+function test_subprocess_non_timeout() {
+ mkdir -p dir
+
+ cat <<'EOF' > dir/test.sh
+echo "Pretending to sleep..."
+sleep 600 &
+echo "Finished!" >&2
+exit 0
+EOF
+
+ chmod +x dir/test.sh
+
+ cat <<'EOF' > dir/BUILD
+ sh_test(
+ name = "test",
+ timeout = "short",
+ srcs = [ "test.sh" ],
+ )
+EOF
+
+ bazel test --test_output=streamed --test_timeout=2 \
+ //dir:test &> $TEST_log || fail "expected success"
+
+ xml_log=bazel-testlogs/dir/test/test.xml
+ expect_log 'Pretending to sleep...'
+ expect_log 'Finished!'
+ [ -s "${xml_log}" ] || fail "${xml_log} was not present after test"
+ cp "${xml_log}" $TEST_log
+ expect_log_once "testcase"
+ expect_log 'Pretending to sleep...'
+ expect_log 'Finished!'
+}
+
# Check that fallback xml output is correctly generated for sharded tests.
function test_xml_fallback_for_sharded_test() {
mkdir -p dir
diff --git a/tools/test/test-setup.sh b/tools/test/test-setup.sh
index aa6f7223b8..328972fe6a 100755
--- a/tools/test/test-setup.sh
+++ b/tools/test/test-setup.sh
@@ -218,10 +218,30 @@ for signal in $signals; do
done
start=$(date +%s)
-if [ -z "$COVERAGE_DIR" ]; then
- "${TEST_PATH}" "$@" 2> >(tee -a "${XML_OUTPUT_FILE}.log" >&2) 1> >(tee -a "${XML_OUTPUT_FILE}.log") 2>&1 || exitCode=$?
+# Check if we have tail --pid option
+dummy=1 &
+pid=$!
+has_tail=true
+tail -fq --pid $pid -s 0.001 /dev/null &> /dev/null || has_tail=false
+
+if [ "$has_tail" == true ] && [ -z "$no_echo" ]; then
+ touch "${XML_OUTPUT_FILE}.log"
+ if [ -z "$COVERAGE_DIR" ]; then
+ "${TEST_PATH}" "$@" &>"${XML_OUTPUT_FILE}.log" &
+ pid=$!
+ else
+ "$1" "$TEST_PATH" "${@:3}" &> "${XML_OUTPUT_FILE}.log" &
+ pid=$!
+ fi
+ tail -fq --pid $pid -s 0.001 "${XML_OUTPUT_FILE}.log"
+ wait $pid
+ exitCode=$?
else
- "$1" "$TEST_PATH" "${@:3}" 2> >(tee -a "${XML_OUTPUT_FILE}.log" >&2) 1> >(tee -a "${XML_OUTPUT_FILE}.log") 2>&1 || exitCode=$?
+ if [ -z "$COVERAGE_DIR" ]; then
+ "${TEST_PATH}" "$@" 2> >(tee -a "${XML_OUTPUT_FILE}.log" >&2) 1> >(tee -a "${XML_OUTPUT_FILE}.log") 2>&1 || exitCode=$?
+ else
+ "$1" "$TEST_PATH" "${@:3}" 2> >(tee -a "${XML_OUTPUT_FILE}.log" >&2) 1> >(tee -a "${XML_OUTPUT_FILE}.log") 2>&1 || exitCode=$?
+ fi
fi
for signal in $signals; do