blob: 4e2982a3948e61e75e18fe9daedec67f7d12e1c3 [file] [log] [blame]
Chris Parsons9402ca82023-02-23 17:28:06 -05001#!/bin/bash -eu
2
3# Copyright (C) 2023 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17set -o pipefail
18
19source "$(dirname "$0")/lib.sh"
20
21# This test verifies that adding USE_PERSISTENT_BAZEL creates a Bazel process
22# that outlasts the build process.
23# This test should only be run in sandboxed environments (because this test
24# verifies a Bazel process using global process list, and may spawn lingering
25# Bazel processes).
26function test_persistent_bazel {
27 setup
28
29 # Ensure no existing Bazel process.
30 if [[ -e out/bazel/output/server/server.pid.txt ]]; then
31 kill $(cat out/bazel/output/server/server.pid.txt) 2>/dev/null || true
32 if kill -0 $(cat out/bazel/output/server/server.pid.txt) 2>/dev/null ; then
33 fail "Error killing pre-setup bazel"
34 fi
35 fi
36
37 USE_PERSISTENT_BAZEL=1 run_soong nothing
38
39 if ! kill -0 $(cat out/bazel/output/server/server.pid.txt) 2>/dev/null ; then
40 fail "Persistent bazel process expected, but not found after first build"
41 fi
42 BAZEL_PID=$(cat out/bazel/output/server/server.pid.txt)
43
44 USE_PERSISTENT_BAZEL=1 run_soong nothing
45
46 if ! kill -0 $BAZEL_PID 2>/dev/null ; then
47 fail "Bazel pid $BAZEL_PID was killed after second build"
48 fi
49
50 kill $BAZEL_PID 2>/dev/null
51 if ! kill -0 $BAZEL_PID 2>/dev/null ; then
52 fail "Error killing bazel on shutdown"
53 fi
54}
55
56# Verifies that USE_PERSISTENT_BAZEL mode operates as expected in the event
57# that there are Bazel failures.
58function test_bazel_failure {
59 setup
60
61 # Ensure no existing Bazel process.
62 if [[ -e out/bazel/output/server/server.pid.txt ]]; then
63 kill $(cat out/bazel/output/server/server.pid.txt) 2>/dev/null || true
64 if kill -0 $(cat out/bazel/output/server/server.pid.txt) 2>/dev/null ; then
65 fail "Error killing pre-setup bazel"
66 fi
67 fi
68
69 # Introduce a syntax error in a BUILD file which is used in every build
70 # (Note this is a BUILD file which is copied as part of test setup, so this
71 # has no effect on sources outside of this test.
72 rm -rf build/bazel/rules
73
74 USE_PERSISTENT_BAZEL=1 run_soong nothing 1>out/failurelog.txt 2>&1 && fail "Expected build failure" || true
75
76 if ! grep -sq "'build/bazel/rules' is not a package" out/failurelog.txt ; then
77 fail "Expected error to contain 'build/bazel/rules' is not a package, instead got:\n$(cat out/failurelog.txt)"
78 fi
79
80 kill $(cat out/bazel/output/server/server.pid.txt) 2>/dev/null || true
81}
82
83scan_and_run_tests