Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 686965ba authored by Lukacs T. Berki's avatar Lukacs T. Berki
Browse files

Speed up Soong integration tests.

This is done by running a build before the first test case, tarring up
$TOP (including out/) then untarring it for every test case instead of
rebuilding soong_build each time.

The speedup is approximately 2x.

Also add some cute ANSI escape sequences and delineation of individual
test cases.

Test: The aforementioned integration tests.
Change-Id: I6a98660cfe6a40bcaa978e8d7544cdffad86a7fa
parent 017a1bb7
Loading
Loading
Loading
Loading
+50 −16
Original line number Diff line number Diff line
@@ -6,8 +6,39 @@ HARDWIRED_MOCK_TOP=

REAL_TOP="$(readlink -f "$(dirname "$0")"/../../..)"

if [[ ! -z "$HARDWIRED_MOCK_TOP" ]]; then
  MOCK_TOP="$HARDWIRED_MOCK_TOP"
else
  MOCK_TOP=$(mktemp -t -d st.XXXXX)
  trap cleanup_mock_top EXIT
fi

WARMED_UP_MOCK_TOP=$(mktemp -t soong_integration_tests_warmup.XXXXXX.tar.gz)
trap 'rm -f "$WARMED_UP_MOCK_TOP"' EXIT

function warmup_mock_top {
  info "Warming up mock top ..."
  info "Mock top warmup archive: $WARMED_UP_MOCK_TOP"
  cleanup_mock_top
  mkdir -p "$MOCK_TOP"
  cd "$MOCK_TOP"

  create_mock_soong
  run_soong
  tar czf "$WARMED_UP_MOCK_TOP" *
}

function cleanup_mock_top {
  cd /
  rm -fr "$MOCK_TOP"
}

function info {
  echo -e "\e[92;1m[TEST HARNESS INFO]\e[0m" $*
}

function fail {
  echo ERROR: $1
  echo -e "\e[91;1mFAILED:\e[0m" $*
  exit 1
}

@@ -47,19 +78,7 @@ function symlink_directory() {
  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 'cd / && rm -fr "$MOCK_TOP"' EXIT
  fi

  echo "Test case: ${FUNCNAME[1]}, mock top path: $MOCK_TOP"
  cd "$MOCK_TOP"

function create_mock_soong {
  copy_directory build/blueprint
  copy_directory build/soong

@@ -68,12 +87,27 @@ function setup() {
  symlink_directory external/golang-protobuf

  touch "$MOCK_TOP/Android.bp"
}

  export ALLOW_MISSING_DEPENDENCIES=true
function setup() {
  cleanup_mock_top
  mkdir -p "$MOCK_TOP"

  echo
  echo ----------------------------------------------------------------------------
  info "Running test case ${FUNCNAME[1]}"
  cd "$MOCK_TOP"

  mkdir -p out/soong
  tar xzf "$WARMED_UP_MOCK_TOP"
}

function run_soong() {
  build/soong/soong_ui.bash --make-mode --skip-ninja --skip-make --skip-soong-tests
}

info "Starting Soong integration test suite $(basename $0)"
info "Mock top: $MOCK_TOP"


export ALLOW_MISSING_DEPENDENCIES=true
warmup_mock_top
+2 −2
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@

source "$(dirname "$0")/lib.sh"

function setup_bazel() {
function create_mock_bazel() {
  copy_directory build/bazel

  symlink_directory prebuilts/bazel
@@ -20,7 +20,7 @@ function setup_bazel() {

function test_bazel_smoke {
  setup
  setup_bazel
  create_mock_bazel

  tools/bazel info
}