diff options
author | Laszlo Csomor <laszlocsomor@google.com> | 2018-08-14 07:55:31 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-14 07:57:23 -0700 |
commit | 0d480f69e8c934fb4b789e0b5d72fb42405fafe0 (patch) | |
tree | 10ddbc48668f621b999c05de4cc2fcd9350d1828 | |
parent | d12db5975687a87b6d36543747234200d0cdc3b5 (diff) |
Windows,tests: port nonincremental_builds_test
//src/test/shell/integration:nonincremental_builds_test
now runs on Windows.
See https://github.com/bazelbuild/bazel/issues/4292
Change-Id: I06fcc0ca713cbc65c677f23dee4171b9be4d7b11
Closes #5884.
Change-Id: I06fcc0ca713cbc65c677f23dee4171b9be4d7b11
PiperOrigin-RevId: 208646495
-rw-r--r-- | src/test/shell/integration/BUILD | 2 | ||||
-rwxr-xr-x | src/test/shell/integration/nonincremental_builds_test.sh | 99 |
2 files changed, 73 insertions, 28 deletions
diff --git a/src/test/shell/integration/BUILD b/src/test/shell/integration/BUILD index 6adab3550c..731ecaad06 100644 --- a/src/test/shell/integration/BUILD +++ b/src/test/shell/integration/BUILD @@ -321,8 +321,8 @@ sh_test( data = [ ":discard_graph_edges_lib.sh", ":test-deps", + "@bazel_tools//tools/bash/runfiles", ], - tags = ["no_windows"], ) sh_test( diff --git a/src/test/shell/integration/nonincremental_builds_test.sh b/src/test/shell/integration/nonincremental_builds_test.sh index 7baff15acc..430740fd6f 100755 --- a/src/test/shell/integration/nonincremental_builds_test.sh +++ b/src/test/shell/integration/nonincremental_builds_test.sh @@ -15,14 +15,55 @@ # limitations under the License. # # nonincremental_builds_test.sh: tests for the --keep_state_after_build flag. -CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -source "${CURRENT_DIR}/../integration_test_setup.sh" \ + +# --- begin runfiles.bash initialization --- +# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). +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; } -source "${CURRENT_DIR}/discard_graph_edges_lib.sh" \ - || { echo "${CURRENT_DIR}/discard_graph_edges_lib.sh not found!" >&2; exit 1; } -#### SETUP ############################################################# -set -e +# `uname` returns the current platform, e.g "MSYS_NT-10.0" or "Linux". +# `tr` converts all upper case letters to lower case. +# `case` matches the result if the `uname | tr` expression to string prefixes +# that use the same wildcards as names do in Bash, i.e. "msys*" matches strings +# starting with "msys", and "*" matches everything (it's the default case). +case "$(uname -s | tr [:upper:] [:lower:])" in +msys*) + # As of 2018-08-14, Bazel on Windows only supports MSYS Bash. + declare -r is_windows=true + ;; +*) + declare -r is_windows=false + ;; +esac + +if "$is_windows"; then + # Disable MSYS path conversion that converts path-looking command arguments to + # Windows paths (even if they arguments are not in fact paths). + export MSYS_NO_PATHCONV=1 + export MSYS2_ARG_CONV_EXCL="*" +fi + function tear_down() { bazel shutdown || fail "Failed to shut down bazel" @@ -30,9 +71,9 @@ function tear_down() { #### TESTS ############################################################# function create_minimal_target() { - rm -rf simpletarget - mkdir simpletarget - cat > simpletarget/BUILD <<EOF || fail "Couldn't make BUILD file" + local -r pkg=$1 + mkdir $pkg + cat > $pkg/BUILD <<EOF || fail "Couldn't make BUILD file" genrule( name = 'top', outs = ['final.out'], @@ -40,21 +81,22 @@ genrule( cmd = 'touch \$@' ) EOF - INCREMENTAL_ANALYSIS_LOGLINE="Analysed target //simpletarget:top (0 packages loaded)" - NONINCREMENTAL_ANALYSIS_LOGLINE="Analysed target //simpletarget:top ([1-9][0-9]* packages loaded)" + INCREMENTAL_ANALYSIS_LOGLINE="Analysed target //$pkg:top (0 packages loaded)" + NONINCREMENTAL_ANALYSIS_LOGLINE="Analysed target //$pkg:top ([1-9][0-9]* packages loaded)" } # Test that the execution is not repeated, test to validate the test case # for the nonincremental test below. function test_build_is_incremental_with_keep_state() { - create_minimal_target - bazel build simpletarget:top &> "$TEST_log" \ - || fail "Couldn't build simpletarget" + local -r pkg=$FUNCNAME + create_minimal_target $pkg + bazel build $pkg:top &> "$TEST_log" \ + || fail "Couldn't build $pkg" expect_log_once $NONINCREMENTAL_ANALYSIS_LOGLINE \ "First build expected to execute the target." - bazel build simpletarget:top &> "$TEST_log" \ - || fail "Couldn't build simpletarget" + bazel build $pkg:top &> "$TEST_log" \ + || fail "Couldn't build $pkg" expect_log_once $INCREMENTAL_ANALYSIS_LOGLINE \ "Second build not expected to reexecute." } @@ -62,23 +104,25 @@ function test_build_is_incremental_with_keep_state() { # Test that the execution is actually repeated, indirect test that the state # was not reused. function test_build_is_nonincremental_with_nokeep_state() { - create_minimal_target - bazel build --nokeep_state_after_build simpletarget:top &> "$TEST_log" \ - || fail "Couldn't build simpletarget" + local -r pkg=$FUNCNAME + create_minimal_target $pkg + bazel build --nokeep_state_after_build $pkg:top &> "$TEST_log" \ + || fail "Couldn't build $pkg" expect_log_once $NONINCREMENTAL_ANALYSIS_LOGLINE \ "First build expected to execute the target." - bazel build simpletarget:top &> "$TEST_log" \ - || fail "Couldn't build simpletarget" + bazel build $pkg:top &> "$TEST_log" \ + || fail "Couldn't build $pkg" expect_log_once $NONINCREMENTAL_ANALYSIS_LOGLINE \ "Second build should not use the cached state." } # Test directly that the inmemory state does persist after the build by default. function test_inmemory_state_present_after_build() { - create_minimal_target - bazel build simpletarget:top &> "$TEST_log" \ - || fail "Couldn't build simpletarget" + local -r pkg=$FUNCNAME + create_minimal_target $pkg + bazel build $pkg:top &> "$TEST_log" \ + || fail "Couldn't build $pkg" local server_pid="$(bazel info server_pid 2>> "$TEST_log")" "$bazel_javabase"/bin/jmap -histo:live "$server_pid" > histo.txt @@ -89,9 +133,10 @@ function test_inmemory_state_present_after_build() { # Test directly that the inmemory state does not persist after the build. function test_inmemory_state_absent_after_build_with_nokeep_state() { - create_minimal_target - bazel build --nokeep_state_after_build simpletarget:top &> "$TEST_log" \ - || fail "Couldn't build simpletarget" + local -r pkg=$FUNCNAME + create_minimal_target $pkg + bazel build --nokeep_state_after_build $pkg:top &> "$TEST_log" \ + || fail "Couldn't build $pkg" local server_pid="$(bazel info server_pid 2>> "$TEST_log")" "$bazel_javabase"/bin/jmap -histo:live "$server_pid" > histo.txt |