diff options
author | Damien Martin-Guillerez <dmarting@google.com> | 2017-08-23 12:19:25 +0200 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2017-08-23 13:31:53 +0200 |
commit | da1d416f83942dc1b1b203cdd4d79c47fce7335f (patch) | |
tree | d46df885e930a4a90e6bb9df4a85fc969c3eb963 /src/test | |
parent | 68776e8ed7768d66ae6cf9a5221a973321d79fc5 (diff) |
Add a Bazel test testing determinism of `bazel build //src:bazel`
- Test if hash(bazel1) == hash(bazel2)
This ensure that the build of bazel is a fixed point.
Change-Id: I422dfc7ec5b95aa054a2677e59427cbd8cd4ef01
PiperOrigin-RevId: 166180529
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/shell/bazel/BUILD | 12 | ||||
-rw-r--r-- | src/test/shell/bazel/bazel_determinism_test.sh | 71 | ||||
-rwxr-xr-x | src/test/shell/testenv.sh | 2 |
3 files changed, 84 insertions, 1 deletions
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD index 8203e3d36c..fdc493cfd5 100644 --- a/src/test/shell/bazel/BUILD +++ b/src/test/shell/bazel/BUILD @@ -452,6 +452,18 @@ sh_test( ) sh_test( + name = "bazel_determinism_test", + timeout = "eternal", + srcs = ["bazel_determinism_test.sh"], + args = ["$(location //:bazel-distfile)"], + data = [ + ":test-deps", + "//:bazel-distfile", + ], + tags = ["jdk8"], +) + +sh_test( name = "rule_test_test", size = "medium", srcs = ["rule_test_test.sh"], diff --git a/src/test/shell/bazel/bazel_determinism_test.sh b/src/test/shell/bazel/bazel_determinism_test.sh new file mode 100644 index 0000000000..7de2205112 --- /dev/null +++ b/src/test/shell/bazel/bazel_determinism_test.sh @@ -0,0 +1,71 @@ +#!/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 that bootstrapping bazel is a fixed point +# + +set -u +DISTFILE=$(rlocation io_bazel/${1#./}) +shift 1 + +if [ "${JAVA_VERSION:-}" == "1.7" ] ; then + echo "Warning: bootstrapping not tested for java 1.7" + exit 0 +fi + +# Load the test setup defined in the parent directory +source $(rlocation io_bazel/src/test/shell/integration_test_setup.sh) \ + || { echo "integration_test_setup.sh not found!" >&2; exit 1; } + +function hash_outputs() { + [ -n "${BAZEL_TEST_XTRACE:-}" ] && set +x # Avoid garbage in the output + # runfiles/MANIFEST & runfiles_manifest contain absolute path, ignore. + # ar on OS-X is non-deterministic, ignore .a files. + for i in $(find bazel-bin/ -type f -a \! -name MANIFEST -a \! -name '*.runfiles_manifest' -a \! -name '*.a'); do + sha256sum $i + done + for i in $(find bazel-genfiles/ -type f); do + sha256sum $i + done + [ -n "${BAZEL_TEST_XTRACE:-}" ] && set -x +} + +function get_outputs_sum() { + hash_outputs | sort -k 2 +} + +function test_determinism() { + local olddir=$(pwd) + WRKDIR=$(mktemp -d ${TEST_TMPDIR}/bazelbootstrap.XXXXXXXX) + mkdir -p "${WRKDIR}" || fail "Could not create workdir" + trap "rm -rf \"$WRKDIR\"" EXIT + cd "${WRKDIR}" || fail "Could not change to work directory" + unzip -q ${DISTFILE} + # Compile bazel a first time + bazel build --nostamp src:bazel + cp bazel-bin/src/bazel bazel1 + get_outputs_sum >"${TEST_TMPDIR}/sum1" + ./bazel1 clean --expunge + ./bazel1 build --nostamp src:bazel + get_outputs_sum >"${TEST_TMPDIR}/sum2" + if ! (diff -q "${TEST_TMPDIR}/sum1" "${TEST_TMPDIR}/sum2"); then + diff -U0 "${TEST_TMPDIR}/sum1" "${TEST_TMPDIR}/sum2" >$TEST_log + fail "Non deterministic outputs found!" + fi +} + +run_suite "determinism test" diff --git a/src/test/shell/testenv.sh b/src/test/shell/testenv.sh index 7791a91c4e..1906811515 100755 --- a/src/test/shell/testenv.sh +++ b/src/test/shell/testenv.sh @@ -269,7 +269,7 @@ exit 1; # A uniform SHA-256 commands that works accross platform # case "${PLATFORM}" in - darwin) + darwin|freebsd) function sha256sum() { cat "$1" | shasum -a 256 | cut -f 1 -d " " } |