platform_build_soong/tests/mixed_mode_test.sh

99 lines
2.4 KiB
Bash
Raw Normal View History

#!/bin/bash -eu
set -o pipefail
# This test exercises mixed builds where Soong and Bazel cooperate in building
# Android.
#
# When the execroot is deleted, the Bazel server process will automatically
# terminate itself.
source "$(dirname "$0")/lib.sh"
function test_bazel_smoke {
setup
run_soong bp2build
run_bazel info --config=bp2build
}
function test_add_irrelevant_file {
setup
mkdir -p soong_tests/a/b
touch soong_tests/a/b/c.txt
cat > soong_tests/a/b/Android.bp <<'EOF'
filegroup {
name: "c",
srcs: ["c.txt"],
bazel_module: { bp2build_available: true },
}
EOF
run_soong --bazel-mode-staging nothing
if [[ ! -e out/soong/bp2build/soong_tests/a/b/BUILD.bazel ]]; then
fail "BUILD.bazel not created"
fi
if [[ ! -e out/soong/build.ninja ]]; then
fail "build.ninja not created"
fi
local mtime_build1=$(stat -c "%y" out/soong/bp2build/soong_tests/a/b/BUILD.bazel)
local mtime_ninja1=$(stat -c "%y" out/soong/build.ninja)
touch soong_tests/a/irrelevant.txt
run_soong --bazel-mode-staging nothing
local mtime_build2=$(stat -c "%y" out/soong/bp2build/soong_tests/a/b/BUILD.bazel)
local mtime_ninja2=$(stat -c "%y" out/soong/build.ninja)
if [[ "$mtime_build1" != "$mtime_build2" ]]; then
fail "BUILD.bazel was generated"
fi
if [[ "$mtime_ninja1" != "$mtime_ninja2" ]]; then
fail "build.ninja was regenerated"
fi
if [[ ! -e out/soong/workspace/soong_tests/a/irrelevant.txt ]]; then
fail "new file was not symlinked"
fi
}
function test_force_enabled_modules {
setup
# b/273910287 - test force enable modules
mkdir -p soong_tests/a/b
cat > soong_tests/a/b/Android.bp <<'EOF'
genrule {
name: "touch-file",
out: ["fake-out.txt"],
cmd: "touch $(out)",
bazel_module: { bp2build_available: true },
}
genrule {
name: "unenabled-touch-file",
out: ["fake-out2.txt"],
cmd: "touch $(out)",
bazel_module: { bp2build_available: false },
}
EOF
run_soong --bazel-mode-staging --bazel-force-enabled-modules=touch-file nothing
local bazel_contained=`grep out/soong/.intermediates/soong_tests/a/b/touch-file/gen/fake-out.txt out/soong/build.ninja`
if [[ $bazel_contained == '' ]]; then
fail "Bazel actions not found for force-enabled module"
fi
local exit_code=`run_soong --bazel-force-enabled-modules=unenabled-touch-file nothing`
if [[ $exit_code -ne 1 ]]; then
fail "Expected failure due to force-enabling an unenabled module "
fi
}
scan_and_run_tests