aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Laszlo Csomor <laszlocsomor@google.com>2018-08-14 07:55:31 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-14 07:57:23 -0700
commit0d480f69e8c934fb4b789e0b5d72fb42405fafe0 (patch)
tree10ddbc48668f621b999c05de4cc2fcd9350d1828
parentd12db5975687a87b6d36543747234200d0cdc3b5 (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/BUILD2
-rwxr-xr-xsrc/test/shell/integration/nonincremental_builds_test.sh99
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