diff --git a/bootstrap_test.sh b/tests/bootstrap_test.sh similarity index 78% rename from bootstrap_test.sh rename to tests/bootstrap_test.sh index 9d8769780..b2f7b2bbb 100755 --- a/bootstrap_test.sh +++ b/tests/bootstrap_test.sh @@ -3,106 +3,13 @@ # This test exercises the bootstrapping process of the build system # in a source tree that only contains enough files for Bazel and Soong to work. -HARDWIRED_MOCK_TOP= -# Uncomment this to be able to view the source tree after a test is run -# HARDWIRED_MOCK_TOP=/tmp/td - -REAL_TOP="$(readlink -f "$(dirname "$0")"/../..)" - -function fail { - echo ERROR: $1 - exit 1 -} - -function copy_directory() { - local dir="$1" - local parent="$(dirname "$dir")" - - mkdir -p "$MOCK_TOP/$parent" - cp -R "$REAL_TOP/$dir" "$MOCK_TOP/$parent" -} - -function symlink_file() { - local file="$1" - - mkdir -p "$MOCK_TOP/$(dirname "$file")" - ln -s "$REAL_TOP/$file" "$MOCK_TOP/$file" -} - -function symlink_directory() { - local dir="$1" - - mkdir -p "$MOCK_TOP/$dir" - # We need to symlink the contents of the directory individually instead of - # using one symlink for the whole directory because finder.go doesn't follow - # symlinks when looking for Android.bp files - for i in $(ls "$REAL_TOP/$dir"); do - local target="$MOCK_TOP/$dir/$i" - local source="$REAL_TOP/$dir/$i" - - if [[ -e "$target" ]]; then - if [[ ! -d "$source" || ! -d "$target" ]]; then - fail "Trying to symlink $dir twice" - fi - else - ln -s "$REAL_TOP/$dir/$i" "$MOCK_TOP/$dir/$i"; - fi - done -} - -function setup_bazel() { - copy_directory build/bazel - - symlink_directory prebuilts/bazel - symlink_directory prebuilts/jdk - - symlink_file WORKSPACE - symlink_file tools/bazel -} - -function setup() { - if [[ ! -z "$HARDWIRED_MOCK_TOP" ]]; then - MOCK_TOP="$HARDWIRED_MOCK_TOP" - rm -fr "$MOCK_TOP" - mkdir -p "$MOCK_TOP" - else - MOCK_TOP=$(mktemp -t -d st.XXXXX) - trap 'echo cd / && echo rm -fr "$MOCK_TOP"' EXIT - fi - - echo "Test case: ${FUNCNAME[1]}, mock top path: $MOCK_TOP" - cd "$MOCK_TOP" - - copy_directory build/blueprint - copy_directory build/soong - - symlink_directory prebuilts/go - symlink_directory prebuilts/build-tools - symlink_directory external/golang-protobuf - - touch "$MOCK_TOP/Android.bp" - - export ALLOW_MISSING_DEPENDENCIES=true - - mkdir -p out/soong -} - -function run_soong() { - build/soong/soong_ui.bash --make-mode --skip-ninja --skip-make --skip-soong-tests -} +source "$(dirname "$0")/lib.sh" function test_smoke { setup run_soong } -function test_bazel_smoke { - setup - setup_bazel - - tools/bazel info - -} function test_null_build() { setup run_soong @@ -410,7 +317,6 @@ function test_dump_json_module_graph() { fi } -test_bazel_smoke test_smoke test_null_build test_null_build_after_docs diff --git a/tests/lib.sh b/tests/lib.sh new file mode 100644 index 000000000..3c97e141c --- /dev/null +++ b/tests/lib.sh @@ -0,0 +1,79 @@ +#!/bin/bash -eu + +HARDWIRED_MOCK_TOP= +# Uncomment this to be able to view the source tree after a test is run +# HARDWIRED_MOCK_TOP=/tmp/td + +REAL_TOP="$(readlink -f "$(dirname "$0")"/../../..)" + +function fail { + echo ERROR: $1 + exit 1 +} + +function copy_directory() { + local dir="$1" + local parent="$(dirname "$dir")" + + mkdir -p "$MOCK_TOP/$parent" + cp -R "$REAL_TOP/$dir" "$MOCK_TOP/$parent" +} + +function symlink_file() { + local file="$1" + + mkdir -p "$MOCK_TOP/$(dirname "$file")" + ln -s "$REAL_TOP/$file" "$MOCK_TOP/$file" +} + +function symlink_directory() { + local dir="$1" + + mkdir -p "$MOCK_TOP/$dir" + # We need to symlink the contents of the directory individually instead of + # using one symlink for the whole directory because finder.go doesn't follow + # symlinks when looking for Android.bp files + for i in $(ls "$REAL_TOP/$dir"); do + local target="$MOCK_TOP/$dir/$i" + local source="$REAL_TOP/$dir/$i" + + if [[ -e "$target" ]]; then + if [[ ! -d "$source" || ! -d "$target" ]]; then + fail "Trying to symlink $dir twice" + fi + else + ln -s "$REAL_TOP/$dir/$i" "$MOCK_TOP/$dir/$i"; + fi + done +} + +function setup() { + if [[ ! -z "$HARDWIRED_MOCK_TOP" ]]; then + MOCK_TOP="$HARDWIRED_MOCK_TOP" + rm -fr "$MOCK_TOP" + mkdir -p "$MOCK_TOP" + else + MOCK_TOP=$(mktemp -t -d st.XXXXX) + trap 'echo cd / && echo rm -fr "$MOCK_TOP"' EXIT + fi + + echo "Test case: ${FUNCNAME[1]}, mock top path: $MOCK_TOP" + cd "$MOCK_TOP" + + copy_directory build/blueprint + copy_directory build/soong + + symlink_directory prebuilts/go + symlink_directory prebuilts/build-tools + symlink_directory external/golang-protobuf + + touch "$MOCK_TOP/Android.bp" + + export ALLOW_MISSING_DEPENDENCIES=true + + mkdir -p out/soong +} + +function run_soong() { + build/soong/soong_ui.bash --make-mode --skip-ninja --skip-make --skip-soong-tests +} diff --git a/tests/mixed_mode_test.sh b/tests/mixed_mode_test.sh new file mode 100755 index 000000000..54f06897c --- /dev/null +++ b/tests/mixed_mode_test.sh @@ -0,0 +1,28 @@ +#!/bin/bash -eu + +# 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 setup_bazel() { + copy_directory build/bazel + + symlink_directory prebuilts/bazel + symlink_directory prebuilts/jdk + + symlink_file WORKSPACE + symlink_file tools/bazel +} + +function test_bazel_smoke { + setup + setup_bazel + + tools/bazel info +} + +test_bazel_smoke diff --git a/tests/run_integration_tests.sh b/tests/run_integration_tests.sh new file mode 100755 index 000000000..db2403797 --- /dev/null +++ b/tests/run_integration_tests.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +TOP="$(readlink -f "$(dirname "$0")"/../../..)" +"$TOP/build/soong/tests/bootstrap_test.sh" +"$TOP/build/soong/tests/mixed_mode_test.sh" +