| #!/usr/bin/env bash |
| # |
| # Copyright 2019, The Android Open Source Project |
| # |
| # 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. |
| |
| # Variables that will be used inside of containers. |
| SRCTOP="/home/$USER/aosp" |
| TARGET="aosp_cf_x86_phone-userdebug" |
| # Variables that will be used when creating docker image. |
| IMAGE="aosp/asuite" |
| DOCKERFILE_DIR=$(realpath $(dirname $0)/..) |
| |
| # The core functional tests for AIDEGen. |
| function run_functiontests() { |
| local target="aidegen_functional_test" |
| if ! m $target; then |
| echo -e "\n[Error] Fail to build $target.\n" |
| exit 1 |
| fi |
| if ! ${target}-dev -b; then |
| echo -e "\n[Error] Fail to run ${target}-dev.\n" |
| exit 1 |
| fi |
| } |
| |
| # Initialize $ANDROID_BUILD_TOP in container and install m(). |
| function check_env() { |
| if [[ -z "$ANDROID_BUILD_TOP" ]]; then |
| if [[ "$IS_CONTAINER" = "true" ]]; then |
| pushd "$SRCTOP" |
| source build/envsetup.sh && lunch $TARGET |
| popd |
| else |
| echo -ne "\n[Error] Missing \$ANDROID_BUILD_TOP variable. " |
| echo -e "Please run 'lunch' first.\n" |
| exit 1 |
| fi |
| fi |
| function m() { |
| echo "[Info] m $@" |
| ${ANDROID_BUILD_TOP}/build/soong/soong_ui.bash --make-mode "$@" |
| } |
| [[ $(uname -s) = "Darwin" ]] && export IS_CONTAINER=true |
| } |
| |
| # TODO: Move this method to asuite.sh. |
| function build_docker_image() { |
| echo "[Info] Start building Docker image $IMAGE..." |
| build_cmd="docker build --rm --force-rm --no-cache \ |
| --build-arg USER=$USER \ |
| --build-arg UID=$UID \ |
| --build-arg SRCTOP=$SRCTOP \ |
| -t $IMAGE $DOCKERFILE_DIR" |
| if ! eval $build_cmd; then |
| echo -e "\n[Error] Failed to build docker image." |
| exit 1 |
| fi |
| } |
| |
| # TODO: Move this method to asuite.sh. |
| function run_docker_instance() { |
| echo "[Info] Start a Docker container..." |
| docker run --rm -v $ANDROID_BUILD_TOP:$SRCTOP $IMAGE prebuilts/asuite/aidegen/smoke_tests |
| } |
| |
| # TODO: Move this method to asuite.sh. |
| function has_docker() { |
| [[ "$IS_CONTAINER" = "true" ]] && return 1 |
| if ! systemctl is-active docker -q; then |
| echo "[Error] Docker daemon not running." |
| exit 1 |
| elif ! docker ps -q 2>/dev/null; then |
| echo "[Error] $USER not in docker group." |
| exit 1 |
| fi |
| } |
| |
| # TODO: Move this method to asuite.sh. |
| function has_docker_image() { |
| image_id=$(docker images --filter=reference=$IMAGE --format "{{.ID}}") |
| if [[ -z $image_id ]]; then |
| echo "[Info] Docker image $IMAGE not found." |
| return 1 |
| fi |
| } |
| |
| function helper() { |
| cat << END |
| Usage: |
| |
| smoke_tests: run aidegen functional tests. If docker is unavailable, run |
| functional test directly; otherwise build necessary image before |
| running tests. |
| smoke_tests -m: force rebuilding a new image and running smoke testing, |
| especially after a new Dockerfile has been updated. |
| |
| Whenever needs to access the instance for investigation, please issue: |
| docker run -it -v $ANDROID_BUILD_TOP:$SRCTOP $IMAGE bash |
| |
| END |
| exit 0 |
| } |
| |
| # Run functional tests directly when in MacOS or in a container. |
| # Pass IS_CONTAINER=true to run functional tests when Docker is installed on Linux. |
| function main() { |
| check_env |
| while getopts ":m" opt; do |
| case "$opt" in |
| m) has_docker && build_docker_image;; |
| *) helper;; |
| esac |
| done |
| if ! has_docker; then |
| m clean |
| run_functiontests |
| else |
| if ! has_docker_image; then |
| build_docker_image |
| fi |
| run_docker_instance |
| fi |
| } |
| |
| main "$@" |