blob: 1676d8ed1965f756d007ebf95f9509de1e36fb0a [file] [log] [blame]
#!/bin/bash
# Copyright 2018 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.
#
# Tests of the bazel client.
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; }
function set_up() {
write_default_bazelrc
# Print client log statements to stderr so they get picked up by the test log
# in the event of a failure.
add_to_bazelrc "startup --client_debug"
add_to_bazelrc "startup --nobatch"
}
function tear_down() {
bazel --nobatch shutdown
}
#### TESTS #############################################################
function test_client_debug() {
# Test that --client_debug sends log statements to stderr.
bazel --client_debug version >&$TEST_log || fail "'bazel version' failed"
expect_log "Debug logging requested"
bazel --client_debug --batch version >&$TEST_log || fail "'bazel version' failed"
expect_log "Debug logging requested"
# Test that --client_debug can be disabled
bazel --noclient_debug version >&$TEST_log || fail "'bazel version' failed"
expect_not_log "Debug logging requested"
bazel --noclient_debug --batch version >&$TEST_log || fail "'bazel version' failed"
expect_not_log "Debug logging requested"
# Test that --client_debug is off by default.
bazel --ignore_all_rc_files version >&$TEST_log || fail "'bazel version' failed"
expect_not_log "Debug logging requested"
bazel --ignore_all_rc_files --batch version >&$TEST_log || fail "'bazel version' failed"
expect_not_log "Debug logging requested"
}
function test_client_debug_change_does_not_restart_server() {
local server_pid1=$(bazel --client_debug info server_pid 2>$TEST_log)
local server_pid2=$(bazel info server_pid 2>$TEST_log)
assert_equals "$server_pid1" "$server_pid2"
expect_not_log "WARNING.* Running B\\(azel\\|laze\\) server needs to be killed"
}
function test_server_restart_due_to_startup_options() {
local server_pid1=$(bazel --write_command_log info server_pid 2>$TEST_log)
local server_pid2=$(bazel --nowrite_command_log info server_pid 2>$TEST_log)
assert_not_equals "$server_pid1" "$server_pid2" # pid changed.
expect_log "WARNING.* Running B\\(azel\\|laze\\) server needs to be killed"
}
function test_multiple_requests_same_server() {
local server_pid1=$(bazel info server_pid 2>$TEST_log)
local server_pid2=$(bazel info server_pid 2>$TEST_log)
assert_equals "$server_pid1" "$server_pid2"
expect_not_log "WARNING.* Running B\\(azel\\|laze\\) server needs to be killed"
}
function test_shutdown() {
local server_pid1=$(bazel info server_pid 2>$TEST_log)
bazel shutdown >& $TEST_log || fail "Expected success"
local server_pid2=$(bazel info server_pid 2>$TEST_log)
assert_not_equals "$server_pid1" "$server_pid2"
expect_not_log "WARNING.* Running B\\(azel\\|laze\\) server needs to be killed"
}
function test_server_restart_due_to_startup_options_with_client_debug_information() {
# Using --write_command_log for no particular reason, if that flag is removed, another startup
# option will do just fine.
local server_pid1=$(bazel --client_debug --write_command_log info server_pid 2>$TEST_log)
local server_pid2=$(bazel --client_debug --nowrite_command_log info server_pid 2>$TEST_log)
assert_not_equals "$server_pid1" "$server_pid2" # pid changed.
expect_log "\\[bazel WARNING .*\\] Running B\\(azel\\|laze\\) server needs to be killed"
expect_log "\\[bazel INFO .*\\] Args from the running server that are not included in the current request:"
expect_log "\\[bazel INFO .*\\] --write_command_log"
expect_log "\\[bazel INFO .*\\] Args from the current request that were not included when creating the server:"
expect_log "\\[bazel INFO .*\\] --nowrite_command_log"
}
function test_exit_code() {
bazel query not_a_query >/dev/null &>$TEST_log &&
fail "bazel query: expected nonzero exit"
expect_log "'not_a_query'"
}
function test_output_base() {
out=$(bazel --output_base=$TEST_TMPDIR/output info output_base 2>$TEST_log)
assert_equals $TEST_TMPDIR/output "$out"
}
function test_output_base_is_file() {
bazel --output_base=/dev/null &>$TEST_log && fail "Expected non-zero exit"
expect_log "FATAL.* Output base directory '/dev/null' could not be created.*exists"
}
function test_cannot_create_output_base() {
bazel --output_base=/foo &>$TEST_log && fail "Expected non-zero exit"
expect_log "FATAL.* Output base directory '/foo' could not be created"
}
function test_nonwritable_output_base() {
bazel --output_base=/ &>$TEST_log && fail "Expected non-zero exit"
expect_log "FATAL.* Output base directory '/' must be readable and writable."
}
function test_no_arguments() {
bazel >&$TEST_log || fail "Expected zero exit"
expect_log "Usage: b\\(laze\\|azel\\)"
}
function test_max_idle_secs() {
local server_pid1=$(bazel --max_idle_secs=1 info server_pid 2>$TEST_log)
sleep 5
local server_pid2=$(bazel info server_pid 2>$TEST_log)
assert_not_equals "$server_pid1" "$server_pid2" # pid changed.
expect_not_log "WARNING: Running B\\(azel\\|laze\\) server needs to be killed"
}
function test_dashdash_before_command() {
bazel -- info &>$TEST_log && "Expected failure"
exitcode=$?
assert_equals 2 $exitcode
expect_log "\\[bazel FATAL .*\\] Unknown startup option: '--'."
}
function test_dashdash_after_command() {
bazel info -- &>$TEST_log || fail "info -- failed"
}
function test_nobatch() {
local pid1=$(bazel --batch --nobatch info server_pid 2> $TEST_log)
local pid2=$(bazel --batch --nobatch info server_pid 2> $TEST_log)
assert_equals "$pid1" "$pid2"
expect_not_log "WARNING.* Running B\\(azel\\|laze\\) server needs to be killed"
expect_not_log "WARNING.* --batch mode is deprecated."
}
# Regression test for #1875189, "bazel client should pass through '--help' like
# a command".
function test_bazel_dash_dash_help_is_passed_through() {
bazel --help >&$TEST_log
expect_log "Usage: b\\(azel\\|laze\\) <command> <options> ..."
expect_not_log "Unknown startup option: '--help'."
}
function test_bazel_dash_help() {
bazel -help >&$TEST_log
expect_log "Usage: b\\(azel\\|laze\\) <command> <options> ..."
}
function test_bazel_dash_h() {
bazel -h >&$TEST_log
expect_log "Usage: b\\(azel\\|laze\\) <command> <options> ..."
}
function test_bazel_dash_s_is_not_parsed() {
bazel -s --help >&$TEST_log && fail "Expected failure"
expect_log "Unknown startup option: '-s'."
}
function test_batch() {
local pid1=$(bazel info server_pid 2> $TEST_log)
local pid2=$(bazel --batch info server_pid 2> $TEST_log)
assert_not_equals "$pid1" "$pid2"
expect_log "WARNING.* Running B\\(azel\\|laze\\) server needs to be killed"
expect_log "WARNING.* --batch mode is deprecated."
}
function test_cmdline_not_written_in_batch_mode() {
OUTPUT_BASE=$(bazel --batch info output_base 2> $TEST_log)
rm -f $OUTPUT_BASE/server/cmdline
OUTPUT_BASE2=$(bazel --batch info output_base 2> $TEST_log)
assert_equals "$OUTPUT_BASE" "$OUTPUT_BASE2"
[[ ! -e $OUTPUT_BASE/server/cmdline ]] || fail "Command line file written."
}
function test_bad_command_batch() {
bazel --batch notacommand &> $TEST_log && "Expected failure"
exitcode=$?
assert_equals 2 "$exitcode"
expect_log "Command 'notacommand' not found."
}
function test_bad_command_nobatch() {
bazel --nobatch notacommand &> $TEST_log && "Expected failure"
exitcode=$?
assert_equals 2 "$exitcode"
expect_log "Command 'notacommand' not found."
}
run_suite "Tests of the bazel client."