aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test
diff options
context:
space:
mode:
authorGravatar Damien Martin-Guillerez <dmarting@google.com>2017-08-23 12:19:25 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-08-23 13:31:53 +0200
commitda1d416f83942dc1b1b203cdd4d79c47fce7335f (patch)
treed46df885e930a4a90e6bb9df4a85fc969c3eb963 /src/test
parent68776e8ed7768d66ae6cf9a5221a973321d79fc5 (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/BUILD12
-rw-r--r--src/test/shell/bazel/bazel_determinism_test.sh71
-rwxr-xr-xsrc/test/shell/testenv.sh2
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 " "
}