blob: 4f6f147a552f05eff69932f02d2a12c48e3e9906 [file] [log] [blame] [edit]
#!/bin/bash
#
# Copyright 2016 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Test of client/server SIGINT handling. This test proves that the server
# gracefully handles SIGINT.
NO_SIGNAL_OVERRIDE=1
# Load the test setup defined in the parent directory
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${CURRENT_DIR}/../integration_test_setup.sh" \
|| { echo "integration_test_setup.sh not found!" >&2; exit 1; }
# This function doesn't work well with the sandbox because testfifo and
# sleepyfifo are created outside the genrule.
# TODO(bazel-team): Make this test compliant with the behavior of the sandbox
function runbazel() {
startup_opt=$1; shift
local sleepyfifo=x/sleepyfifo
local testfifo=x/testfifo
mkdir -p x || fail "Can't create x"
cat > x/BUILD << EOF
genrule(
name = "sleepy",
srcs = [],
outs = ["sleepy.out"],
local = 1,
cmd = "echo 'hi test' > $testfifo; cat $sleepyfifo; sleep 9999"
)
EOF
mkfifo $testfifo $sleepyfifo || fail "Couldn't create FIFOs under x"
set -m
bazel $startup_opt build --experimental_ui_debug_all_events \
--package_path . //x:sleepy >& $TEST_log &
local pid=$!
echo "${PRODUCT_NAME} running in background with pid $pid"
local testfifocontents=$(cat $testfifo)
echo "hi sleepy" > $sleepyfifo
echo "Interrupting pid $pid"
kill -INT $pid; sleep 3
status=0
# We expect the wait instruction to fail given that the build is interrupted.
wait $pid || status=$?
assert_equals 8 $status # Interruption exit code
assert_equals "hi test" "$testfifocontents"
set +m
}
function tear_down() {
bazel shutdown
rm -rf x
}
function assert_sigint_stops_build() {
runbazel $1
# Must have loaded package 'x':
expect_log 'Loading package: x'
expect_log 'Elapsed time'
expect_log 'build interrupted'
}
function test_sigint_server_mode() {
assert_sigint_stops_build "--nobatch"
}
function test_sigint_batch_mode() {
assert_sigint_stops_build "--batch"
}
run_suite "Tests of SIGINT on ${PRODUCT_NAME}"