#!/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.
#
# An end-to-end test that Bazel's UI produces reasonable output.

# --- begin runfiles.bash initialization ---
set -euo pipefail
if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
  if [[ -f "$0.runfiles_manifest" ]]; then
    export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
  elif [[ -f "$0.runfiles/MANIFEST" ]]; then
    export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST"
  elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
    export RUNFILES_DIR="$0.runfiles"
  fi
fi
if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
  source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
  source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
            "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
else
  echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
  exit 1
fi
# --- end runfiles.bash initialization ---

source "$(rlocation "io_bazel/src/test/shell/integration_test_setup.sh")" \
  || { echo "integration_test_setup.sh not found!" >&2; exit 1; }

case "$(uname -s | tr [:upper:] [:lower:])" in
msys*|mingw*|cygwin*)
  declare -r is_windows=true
  ;;
*)
  declare -r is_windows=false
  ;;
esac

if "$is_windows"; then
  export MSYS_NO_PATHCONV=1
  export MSYS2_ARG_CONV_EXCL="*"
fi

#### SETUP #############################################################

add_to_bazelrc "build --genrule_strategy=local"
add_to_bazelrc "test --test_strategy=standalone"

function set_up() {
  if [[ -d pkg ]]; then
    # All tests share these scratch packages. No need to recreate them if they
    # already exist.
    return
  fi

  add_rules_shell "MODULE.bazel"
  add_rules_cc "MODULE.bazel"

  mkdir -p pkg
  touch remote_file
  cat > pkg/true.sh <<EOF
#!/bin/sh
exit 0
EOF
  chmod 755 pkg/true.sh
  cat > pkg/slow.sh <<EOF
#!/bin/sh
sleep 3
exit 0
EOF
  chmod 755 pkg/slow.sh
  cat > pkg/false.sh <<EOF
#!/bin/sh
exit 1
EOF
  chmod 755 pkg/false.sh
  cat > pkg/output.sh <<EOF
#!/bin/sh
`which echo` -n foo
sleep 1
`which echo` -n bar
exit 0
EOF
  chmod 755 pkg/output.sh
  cat > pkg/do_output.sh <<EOF
#!/bin/sh
echo Beginning \$1
for _ in \`seq 1 10240\`
do echo '1234567890'
done
echo Ending \$1
EOF
  chmod 755 pkg/do_output.sh
  cat > pkg/BUILD <<EOF
load("@rules_shell//shell:sh_test.bzl", "sh_test")
load("@rules_shell//shell:sh_library.bzl", "sh_library")

sh_test(
  name = "true",
  srcs = ["true.sh"],
)
sh_test(
  name = "slow",
  srcs = ["slow.sh"],
)
sh_test(
  name = "false",
  srcs = ["false.sh"],
)
sh_test(
  name = "output",
  srcs = ["output.sh"],
)
genrule(
  name = "gentext",
  outs = ["gentext.txt"],
  cmd = "echo here be dragons > \"\$@\""
)
genrule(
  name = "withOutputA",
  outs = ["a"],
  tools = [":do_output.sh"],
  cmd = "\$(location :do_output.sh) A && touch \"\$@\"",
)
genrule(
  name = "withOutputB",
  outs = ["b"],
  tools = [":do_output.sh"],
  cmd = "\$(location :do_output.sh) B && touch \$@",
)
sh_library(
  name = "outputlib",
  data = [":withOutputA", ":withOutputB"],
)
sh_test(
  name = "truedependingonoutput",
  srcs = ["true.sh"],
  deps = [":outputlib"],
)
EOF
  mkdir -p error
  cat > error/BUILD <<'EOF'
genrule(
  name = "failwitherror",
  outs = ["fail.txt"],
  cmd = "echo Here is the error message; exit 1",
)
EOF
  mkdir -p pkg/errorAfterWarning
  cat > pkg/errorAfterWarning/BUILD <<'EOF'
load("@rules_cc//cc:cc_binary.bzl", "cc_binary")

RANGE = range(500)

[ genrule(
    name = "true%s_c" % i,
    outs = ["true%s.c" % i],
    cmd = "echo Build Warning...; echo 'int main(int argc, char **argv) { return 0; }' > $@",
) for i in RANGE]

[ cc_binary(
    name = "true_%s" % i,
    srcs = ["true%s.c" % i],
) for i in RANGE]

genrule(
  name = "failing",
  outs = ["failing.txt"],
  srcs = ["true_%s" % i for i in RANGE],
  cmd = "echo This is the error message; false",
)
EOF
  chmod -w pkg/* # prevent accidental editing
  # keep directories writable though, so that test clean up can work
  chmod 755 error
  chmod 755 pkg/errorAfterWarning
  mkdir -p pkg/debugMessages
  cat > pkg/debugMessages/rule.bzl <<'EOF'
def _impl(ctx):
  print("static debug message")
  ctx.actions.write(ctx.outputs.out, "Hello World")

withdebug = rule(
  implementation = _impl,
  attrs = {},
  outputs = {"out" : "%{name}.txt"},
)
EOF
  cat > pkg/debugMessages/BUILD <<'EOF'
load("//pkg/debugMessages:rule.bzl", "withdebug")

[ withdebug(name = "target%d" % (i,)) for i in range(50) ]
EOF
  mkdir -p bzl
  touch bzl/BUILD
  cat > bzl/bzl.bzl <<'EOF'
x = invalidsyntax
EOF
  mkdir -p pkgloadingerror
  cat > pkgloadingerror/BUILD <<'EOF'
load("//bzl:bzl.bzl", "x")
EOF
  mkdir -p fancyOutput
  cat > fancyOutput/BUILD <<'EOF'
genrule(
  name = "withFancyOutput",
  outs = ["out.txt"],
  cmd = "echo $$'\\xF0\\x9F\\x8D\\x83'; echo Hello World > $@",
)
EOF
}

function create_pkg() {
  local -r pkg=$1
  mkdir -p $pkg
  cat > $pkg/true.sh <<EOF
#!/bin/sh
exit 0
EOF
  chmod 755 $pkg/true.sh
  cat > $pkg/BUILD <<EOF
load("@rules_shell//shell:sh_test.bzl", "sh_test")

sh_test(
  name = "true",
  srcs = ["true.sh"],
)
EOF
}

#### TESTS #############################################################

function test_basic_progress() {
  bazel clean || fail "${PRODUCT_NAME} clean failed"
  bazel test --curses=yes --color=yes pkg:true 2>$TEST_log \
    || fail "${PRODUCT_NAME} test failed"
  # some progress indicator is shown
  expect_log '\[[0-9,]* / [0-9,]*\]'
  # curses are used to delete at least one line
  expect_log $'\x1b\[1A\x1b\[K'
  # As precisely one target is specified, it should be reported during
  # analysis phase.
  expect_log 'Analy.*pkg:true'
}

function test_line_wrapping() {
  local -r pkg=$FUNCNAME
  create_pkg $pkg
  bazel test --curses=yes --color=yes --terminal_columns=5 $pkg:true 2>$TEST_log || fail "bazel test failed"
  # curses are used to delete at least one line
  expect_log $'\x1b\[1A\x1b\[K'
  # something is written in green
  expect_log $'\x1b\[32m'
  # lines are wrapped, hence at least one line should end with backslash
  expect_log '\\'$'\r''$\|\\$'
}

function test_noshow_progress() {
  bazel clean || fail "${PRODUCT_NAME} clean failed"
  bazel test --noshow_progress --curses=yes --color=yes \
    pkg:true 2>$TEST_log || fail "${PRODUCT_NAME} test failed"
  # Info messages should still go through
  expect_log 'Elapsed time'
  # no progress indicator is shown
  expect_not_log '\[[0-9,]* / [0-9,]*\]'
}

function test_basic_progress_no_curses() {
  bazel clean || fail "${PRODUCT_NAME} clean failed"
  # --experimental_ui_debug_all_events is necessary so that we don't miss the
  # progress indicator event which is only shown once a second when curses is
  # disabled
  bazel test --curses=no --color=yes --experimental_ui_debug_all_events \
    pkg:true 2>$TEST_log \
    || fail "${PRODUCT_NAME} test failed"
  # some progress indicator is shown
  expect_log '\[[0-9,]* / [0-9,]*\]'
  # cursor is not moved up
  expect_not_log $'\x1b\[1A'
  # no line is deleted
  expect_not_log $'\x1b\[K'
  # but some green color is used
  expect_log $'\x1b\[32m'
}

function test_no_curses_no_linebreak() {
  bazel clean || fail "${PRODUCT_NAME} clean failed"
  # --experimental_ui_debug_all_events is necessary so that we don't miss the
  # progress indicator event which is only shown once a second when curses is
  # disabled
  bazel test --curses=no --color=yes --experimental_ui_debug_all_events \
    pkg:true 2>$TEST_log || fail "${PRODUCT_NAME} test failed"
  # expect a long-ish status line
  expect_log '\[[0-9,]* / [0-9,]*\]......'
}

function test_pass() {
  bazel test --curses=yes --color=yes pkg:true >$TEST_log \
    || fail "${PRODUCT_NAME} test failed"
  # PASS is written in green on the same line as the test target
  expect_log 'pkg:true.*'$'\x1b\[32m''.*PASS'
}

function test_fail() {
  bazel test --curses=yes --color=yes pkg:false >$TEST_log \
    && fail "expected failure"
  # FAIL is written in red bold on the same line as the test target
  expect_log 'pkg:false.*'$'\x1b\[31m\x1b\[1m''.*FAIL'
}

function test_timestamp() {
  bazel test --show_timestamps pkg:true 2>$TEST_log \
    || fail "${PRODUCT_NAME} test failed"
  # expect something that looks like HH:mm:ss
  expect_log '[0-2][0-9]:[0-5][0-9]:[0-6][0-9]'
}

function test_skymeld_ui() {
  bazel build --experimental_merged_skyframe_analysis_execution pkg:true &> "$TEST_log" \
    || fail "${PRODUCT_NAME} test failed."
  expect_log 'Build completed successfully'
}

# Regression test for b/244163231.
function test_skymeld_ui_with_starlark_flags() {
  local -r pkg=$FUNCNAME
  create_pkg $pkg
  mkdir -p "${pkg}/flags"

  cat > "${pkg}/flags/flags.bzl" <<EOF
def _impl(ctx):
  pass

string_flag = rule(
    implementation = _impl,
    build_setting = config.string(flag = True),
)
EOF

  cat > "${pkg}/flags/BUILD" <<EOF
load('//${pkg}/flags:flags.bzl', 'string_flag')

string_flag(
    name = "flag",
    build_setting_default = "a",
)
EOF

  bazel build --experimental_merged_skyframe_analysis_execution \
      --//$pkg/flags:flag=a \
      $pkg:true &> "$TEST_log" || fail "${PRODUCT_NAME} test failed."
  expect_log 'Build completed successfully'
}

# Regression test for b/244163231.
function test_skymeld_ui_works_with_timestamps() {
  bazel build --experimental_merged_skyframe_analysis_execution --show_timestamps \
    pkg:true &> "$TEST_log" \
    || fail "${PRODUCT_NAME} test failed."
  expect_log 'Build completed successfully'
}

function test_info_spacing() {
  # Verify that the output of "bazel info" is suitable for backtick escapes,
  # in particular free carriage-return characters.
  BAZEL_INFO_OUTPUT=XXX`bazel info workspace`XXX
  echo "$BAZEL_INFO_OUTPUT" | grep -q 'XXX[^'$'\r'']*XXX' \
    || fail "${PRODUCT_NAME} info output spaced as $BAZEL_INFO_OUTPUT"
}

function test_query_spacing() {
  # Verify that the output of "bazel query" is suitable for consumption by
  # other tools, i.e., contains only result lines, separated only by newlines.
  BAZEL_QUERY_OUTPUT=`bazel query 'deps(//pkg:true)'`
  echo "$BAZEL_QUERY_OUTPUT" | grep -q -v '^[@/]' \
   && fail "bazel query output is >$BAZEL_QUERY_OUTPUT<" || true
  if ! $is_windows; then
    echo "$BAZEL_QUERY_OUTPUT" | grep -q $'\r' \
     && fail "bazel query output is >$BAZEL_QUERY_OUTPUT<" || true
  fi
}

function test_query_progress() {
  # Verify that some form of progress is reported during bazel query
  bazel query 'deps(//pkg:true)' 2> "${TEST_log}"
  expect_log 'Loading:.*packages loaded'
}

function test_clean_nobuild {
  bazel clean 2>$TEST_log \
   || fail "bazel shutdown failed"
  expect_not_log "actions running"
  expect_not_log "Building"
}

function test_clean_color_nobuild {
  bazel clean --color=yes 2>$TEST_log \
   || fail "bazel shutdown failed"
  expect_not_log "actions running"
  expect_not_log "Building"
}

function test_help_nobuild {
  bazel help 2>$TEST_log \
   || fail "bazel help failed"
  expect_not_log "actions running"
  expect_not_log "Building"
}

function test_help_color_nobuild {
  bazel help --color=yes 2>$TEST_log \
   || fail "bazel help failed"
  expect_not_log "actions running"
  expect_not_log "Building"
}

function test_version_nobuild {
  bazel version --curses=yes 2>$TEST_log \
   || fail "bazel version failed"
  expect_not_log "action"
  expect_not_log "Building"
}

function test_version_nobuild_announce_rc {
  bazel version --curses=yes --announce_rc 2>$TEST_log \
   || fail "bazel version failed"
  expect_not_log "action"
  expect_not_log "Building"
}

function test_subcommand {
  bazel clean || fail "${PRODUCT_NAME} clean failed"
  bazel build -s pkg:gentext 2>$TEST_log \
    || fail "bazel build failed"
  expect_log "here be dragons"
}

function test_subcommand_notdefault {
  bazel clean || fail "${PRODUCT_NAME} clean failed"
  bazel build pkg:gentext 2>$TEST_log \
    || fail "bazel build failed"
  expect_not_log "dragons"
}

function test_loading_progress {
  bazel clean || fail "${PRODUCT_NAME} clean failed"
  bazel test pkg:true 2>$TEST_log \
    || fail "${PRODUCT_NAME} test failed"
  # some progress indicator is shown during loading
  expect_log 'Loading.*[0-9,]* packages'
}

function test_failure_scrollback_buffer_curses {
  bazel clean || fail "${PRODUCT_NAME} clean failed"
  bazel test --curses=yes --color=yes \
    --nocache_test_results pkg:false pkg:slow 2>$TEST_log \
    && fail "expected failure"
  # Some line starts with FAIL in red bold.
  expect_log '^'$'\(.*\x1b\[K\)*\x1b\[31m\x1b\[1mFAIL:'
}

function test_terminal_title {
  bazel test --curses=yes \
    --progress_in_terminal_title pkg:true \
    2>$TEST_log || fail "${PRODUCT_NAME} test failed"
  # The terminal title is changed
  expect_log $'\x1b\]0;.*\x07'
}

function test_failure_scrollback_buffer {
  bazel clean || fail "${PRODUCT_NAME} clean failed"
  bazel test --curses=no --color=yes \
    --nocache_test_results pkg:false pkg:slow 2>$TEST_log \
    && fail "expected failure"
  # Some line starts with FAIL in red bold.
  expect_log '^'$'\x1b\[31m\x1b\[1mFAIL:'
}

function test_streamed {
  bazel test --curses=yes --color=yes \
    --nocache_test_results --test_output=streamed pkg:output >$TEST_log \
    || fail "expected success"
  expect_log 'foobar'
}

function test_stdout_bundled {
    # Verify that the error message is part of the error event
    bazel build --experimental_ui_debug_all_events \
          error:failwitherror > "${TEST_log}" 2>&1 \
    && fail "expected failure" || :
    grep -A1 '^ERROR' "${TEST_log}" \
        | grep -q "with STDOUT: Here is the error message" \
        || fail "Error message not bundled"
}

function test_experimental_ui_attempt_to_print_relative_paths_failing_action() {
  # On the BazelCI Windows environment, `pwd` returns a string that uses a
  # lowercase drive letter and unix-style path separators (e.g. '/c/') with
  # a lowercase drive letter. But internally in Bazel, Path#toString
  # unconditionally uses an uppercase drive letter (see
  # WindowsOsPathPolicy#normalize). I want these tests to check for exact
  # string contents (that's the entire goal of the flag being tested), but I
  # don't want them to be brittle across different Windows environments, so
  # I've disabled them for now.
  # TODO(nharmata): Fix this.
  [[ "$is_windows" == "true" ]] && return 0

  bazel clean || fail "${PRODUCT_NAME} clean failed"

  bazel build --attempt_to_print_relative_paths=false \
      error:failwitherror > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_log "^ERROR: $(pwd)/error/BUILD:1:8: Executing genrule //error:failwitherror failed: "

  bazel build --attempt_to_print_relative_paths=true \
      error:failwitherror > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_log "^ERROR: error/BUILD:1:8: Executing genrule //error:failwitherror failed: "
  expect_not_log "$(pwd)/error/BUILD"
}

function test_experimental_ui_attempt_to_print_relative_paths_pkg_error() {
  # See the note in the test case above for why this is disabled on Windows.
  # TODO(nharmata): Fix this.
  [[ "$is_windows" == "true" ]] && return 0

  bazel clean || fail "${PRODUCT_NAME} clean failed"

  bazel build --attempt_to_print_relative_paths=false \
      pkgloadingerror:all > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_log "^ERROR: $(pwd)/bzl/bzl.bzl:1:5: name 'invalidsyntax' is not defined"

  bazel build --attempt_to_print_relative_paths=true \
      pkgloadingerror:all > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_log "^ERROR: bzl/bzl.bzl:1:5: name 'invalidsyntax' is not defined"
  expect_not_log "$(pwd)/bzl/bzl.bzl"
}

function test_fancy_symbol_encoding() {
    bazel build //fancyOutput:withFancyOutput > "${TEST_log}" 2>&1 \
        || fail "expected success"
    expect_log $'\xF0\x9F\x8D\x83'
}

function test_ui_events_filters() {
  bazel clean || fail "${PRODUCT_NAME} clean failed"

  bazel build pkgloadingerror:all > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_log "^ERROR: .*/bzl/bzl.bzl:1:5: name 'invalidsyntax' is not defined"
  expect_log "^WARNING: Target pattern parsing failed."
  expect_log "^INFO: Elapsed time"

  bazel build --ui_event_filters=-error pkgloadingerror:all > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_not_log "^ERROR: .*bzl/bzl.bzl:1:5: name 'invalidsyntax' is not defined"
  expect_log "^WARNING: Target pattern parsing failed."
  expect_log "^INFO: Elapsed time"

  bazel build --ui_event_filters=info pkgloadingerror:all > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_not_log "^ERROR: .*/bzl/bzl.bzl:1:5: name 'invalidsyntax' is not defined"
  expect_not_log "^WARNING: Target pattern parsing failed."
  expect_log "^INFO: Elapsed time"

  bazel build --ui_event_filters= pkgloadingerror:all > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_not_log "^ERROR: .*/bzl/bzl.bzl:1:5: name 'invalidsyntax' is not defined"
  expect_not_log "^WARNING: Target pattern parsing failed."
  expect_not_log "^INFO: Elapsed time"

  bazel build --ui_event_filters=-error --ui_event_filters=+error \
      pkgloadingerror:all > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_log "^ERROR: .*bzl/bzl.bzl:1:5: name 'invalidsyntax' is not defined"
  expect_log "^WARNING: Target pattern parsing failed."
  expect_log "^INFO: Elapsed time"

  bazel build --ui_event_filters= --ui_event_filters=+info pkgloadingerror:all > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_not_log "^ERROR: .*/bzl/bzl.bzl:1:5: name 'invalidsyntax' is not defined"
  expect_not_log "^WARNING: Target pattern parsing failed."
  expect_log "^INFO: Elapsed time"

  bazel build --ui_event_filters=warning --ui_event_filters=info --ui_event_filters=+error \
      pkgloadingerror:all > "${TEST_log}" 2>&1 && fail "expected failure"
  expect_log "^ERROR: .*/bzl/bzl.bzl:1:5: name 'invalidsyntax' is not defined"
  expect_not_log "^WARNING: Target pattern parsing failed."
  expect_log "^INFO: Elapsed time"
}

function test_max_stdouterr_bytes_capping_behavior() {
  mkdir -p outs
  cat >outs/BUILD <<'EOF'
genrule(
  name = "short-stdout",
  outs = ["short-stdout.txt"],
  cmd = "echo 'abc'; touch $@",
)
genrule(
  name = "short-stderr",
  outs = ["short-stderr.txt"],
  cmd = "echo 'abc' 1>&2; touch $@",
)
genrule(
  name = "long-stdout",
  outs = ["long-stdout.txt"],
  cmd = "echo 'long line of text'; touch $@",
)
genrule(
  name = "long-stderr",
  outs = ["long-stderr.txt"],
  cmd = "echo 'long line of text' 1>&2; touch $@",
)
genrule(
  name = "short-stdout-long-stderr",
  outs = ["short-stdout-long-stderr.txt"],
  cmd = "echo 'abc'; echo 'long line of text' 1>&2; touch $@",
)
genrule(
  name = "long-stdout-short-stderr",
  outs = ["long-stdout-short-stderr.txt"],
  cmd = "echo 'abc' 1>&2; echo 'long line of text'; touch $@",
)
EOF

  for n in stdout stderr; do
    bazel build --experimental_ui_max_stdouterr_bytes=5 "//outs:short-$n" \
        >"${TEST_log}" 2>&1 || fail "build failed"
    expect_log 'abc'
    expect_not_log 'exceeds maximum size'

    bazel build --experimental_ui_max_stdouterr_bytes=5 "//outs:long-$n" \
        >"${TEST_log}" 2>&1 || fail "build failed"
    expect_not_log 'long line of text'
    expect_log 'exceeds maximum size'
  done

  bazel build --experimental_ui_max_stdouterr_bytes=5 \
      //outs:short-stdout-long-stderr \
      >"${TEST_log}" 2>&1 || fail "build failed"
  expect_log 'abc'
  expect_log 'stderr .*/actions/stderr-.* exceeds maximum size'

  bazel build --experimental_ui_max_stdouterr_bytes=5 \
      //outs:long-stdout-short-stderr \
      >"${TEST_log}" 2>&1 || fail "build failed"
  expect_log 'abc'
  expect_log 'stdout .*/actions/stdout-.* exceeds maximum size'
}

function test_max_stdouterr_bytes_is_for_individual_outputs() {
  mkdir -p outs
  cat >>outs/BUILD <<'EOF'
[genrule(
    name = "out-%d" % i,
    outs = [("out-%d.txt") % i],
    cmd = ("echo '>>>%d<<<'; touch $@") % i,
) for i in range(1000)]
EOF
  # Set --experimental_ui_max_stdouterr_bytes to a low-enough number that
  # tolerates a single stdout and run many concurrent jobs at once to ensure
  # that this limit applies to individual outputs even if we are trying to read
  # all files concurrently.
  bazel build --experimental_ui_max_stdouterr_bytes=20 --jobs=200 //outs/... \
      >"${TEST_log}" 2>&1 || fail "build failed"
  for i in $(seq 0 999); do
    expect_log ">>>${i}<<<"
  done
}

function test_interleaved_errors_and_progress() {
  # Background process necessary to interrupt Bazel doesn't go well on Windows.
  [[ "$is_windows" == true ]] && return
  mkdir -p foo
  cat > foo/BUILD <<'EOF'
genrule(name = 'sleep', outs = ['sleep.out'], cmd = 'sleep 10000')
genrule(name = 'fail',
        outs = ['fail.out'],
        srcs = [':multiline.sh'],
        cmd = '$(location :multiline.sh)'
)
EOF
  cat > foo/multiline.sh <<'EOF'
echo "This
is
a
multiline error message
before
failure"
false
EOF
  chmod +x foo/multiline.sh
  bazel build -k //foo:all --curses=yes >& "$TEST_log" &
  pid="$!"
  while ! grep -q "multiline error message" "$TEST_log" ; do
    sleep 1
  done
  while ! grep -q 'Executing genrule //foo:sleep' "$TEST_log" ; do
    sleep 1
  done
  kill -SIGINT "$pid"
  wait "$pid" || exit_code="$?"
  [[ "$exit_code" == 8 ]] || fail "Should have been interrupted: $exit_code"
  tr -s <"$TEST_log" '\n' '@' |
      grep -q 'Executing genrule //foo:fail failed:[^@]*@This@is@a@multiline error message@before@failure@.*Executing genrule //foo:sleep;' \
      || fail "Unified genrule error message not found"
  # Make sure server is still usable.
  bazel info server_pid >& "$TEST_log" || fail "Couldn't use server"
}

function test_progress_bar_after_stderr() {
  mkdir -p foo
  cat > foo/BUILD <<'EOF'
genrule(name = 'fail', outs = ['fail.out'], cmd = 'false')
sh_test(name = 'foo', data = [':fail'], srcs = ['foo.sh'])
EOF
  touch foo/foo.sh
  chmod +x foo/foo.sh
  # Build event file needed so UI considers build to continue after failure.
  ! bazel test --build_event_json_file=bep.json --curses=yes --color=yes \
      //foo:foo &> "$TEST_log" || fail "Expected failure"
  # Expect to see exactly one failure message.
  expect_log_n '\[31m\[1mERROR: \[0mBuild did NOT complete successfully' 1
}

function test_bazel_run_error_visible() {
  mkdir -p foo
  cat > foo/BUILD <<'EOF'
load("@rules_shell//shell:sh_test.bzl", "sh_test")

sh_test(
  name = 'foo',
  srcs = ['foo.sh'],
  shard_count = 2,
)
EOF
  touch foo/foo.sh
  chmod +x foo/foo.sh
  bazel run --curses=yes //foo &> "$TEST_log" && "Expected failure"
  expect_log "ERROR: 'run' only works with tests with one shard"
  # If we would print this again after the run failed, we would overwrite the
  # error message above.
  expect_log_n "INFO: Build completed successfully, [4567] total actions" 1
}

function test_exit_code_reported() {
  bazel build --curses=yes --color=yes error:failwitherror 2>$TEST_log \
    && fail "${PRODUCT_NAME} build passed"
  expect_log '//error:failwitherror failed: (Exit 1): '

  bazel test --curses=yes --color=yes pkg:false 2>$TEST_log \
    && fail "${PRODUCT_NAME} test passed"
  expect_log '//pkg:false (Exit 1) (see'
}

function test_quiet_mode() {
  mkdir -p foo
  cat > foo/BUILD <<'EOF'
genrule(name="g", srcs=[], outs=["go"], cmd="echo GO > $@")
EOF

  bazel shutdown
  bazel --quiet build &> "$TEST_log" || fail "build failed"
  expect_not_log "and connecting to it"
  expect_not_log "Analyzed"
  expect_not_log "Build completed successfully"

}
run_suite "Integration tests for ${PRODUCT_NAME}'s UI"
