#!/bin/bash
# Copyright (C) 2018 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.
#
# Run Android Runtime APEX tests.
SCRIPT_DIR=$(dirname $0)
# Status of whole test script.
exit_status=0
# Status of current test suite.
test_status=0
function say {
echo "$0: $*"
}
function die {
echo "$0: $*"
exit 1
}
[[ -n "$ANDROID_PRODUCT_OUT" ]] \
|| die "You need to source and lunch before you can use this script."
[[ -n "$ANDROID_HOST_OUT" ]] \
|| die "You need to source and lunch before you can use this script."
if [ ! -e "$ANDROID_HOST_OUT/bin/debugfs" ] ; then
say "Could not find debugfs, building now."
make debugfs-host || die "Cannot build debugfs"
fi
# Fail early.
set -e
build_apex_p=true
list_image_files_p=false
print_image_tree_p=false
function usage {
cat <<EOF
Usage: $0 [OPTION]
Build (optional) and run tests on Android Runtime APEX package (on host).
-s, --skip-build skip the build step
-l, --list-files list the contents of the ext4 image (\`find\`-like style)
-t, --print-tree list the contents of the ext4 image (\`tree\`-like style)
-h, --help display this help and exit
EOF
exit
}
while [[ $# -gt 0 ]]; do
case "$1" in
(-s|--skip-build) build_apex_p=false;;
(-l|--list-files) list_image_files_p=true;;
(-t|--print-tree) print_image_tree_p=true;;
(-h|--help) usage;;
(*) die "Unknown option: '$1'
Try '$0 --help' for more information.";;
esac
shift
done
# build_apex APEX_MODULES
# -----------------------
# Build APEX packages APEX_MODULES.
function build_apex {
if $build_apex_p; then
say "Building $@" && make "$@" || die "Cannot build $@"
fi
}
# maybe_list_apex_contents_apex APEX TMPDIR [other]
function maybe_list_apex_contents_apex {
# List the contents of the apex in list form.
if $list_image_files_p; then
say "Listing image files"
$SCRIPT_DIR/art_apex_test.py --list $@
fi
# List the contents of the apex in tree form.
if $print_image_tree_p; then
say "Printing image tree"
$SCRIPT_DIR/art_apex_test.py --tree $@
fi
}
function fail_check {
echo "$0: FAILED: $*"
test_status=1
exit_status=1
}
# Test all modules
apex_modules=(
"com.android.runtime.release"
"com.android.runtime.debug"
"com.android.runtime.host"
)
# Build the APEX packages (optional).
build_apex ${apex_modules[@]}
# Clean-up.
function cleanup {
rm -rf "$work_dir"
}
# Garbage collection.
function finish {
# Don't fail early during cleanup.
set +e
cleanup
}
for apex_module in ${apex_modules[@]}; do
test_status=0
say "Checking APEX package $apex_module"
work_dir=$(mktemp -d)
trap finish EXIT
art_apex_test_args="--tmpdir $work_dir"
test_only_args=""
if [[ $apex_module = *.host ]]; then
apex_path="$ANDROID_HOST_OUT/apex/${apex_module}.zipapex"
art_apex_test_args="$art_apex_test_args --host"
test_only_args="--debug"
else
apex_path="$ANDROID_PRODUCT_OUT/system/apex/${apex_module}.apex"
art_apex_test_args="$art_apex_test_args --debugfs $ANDROID_HOST_OUT/bin/debugfs"
[[ $apex_module = *.debug ]] && test_only_args="--debug"
fi
# List the contents of the APEX image (optional).
maybe_list_apex_contents_apex $art_apex_test_args $apex_path
# Run tests on APEX package.
$SCRIPT_DIR/art_apex_test.py $art_apex_test_args $test_only_args $apex_path \
|| fail_check "Checks failed on $apex_module"
# Clean up.
trap - EXIT
cleanup
[[ "$test_status" = 0 ]] && say "$apex_module tests passed"
echo
done
[[ "$exit_status" = 0 ]] && say "All Android Runtime APEX tests passed"
exit $exit_status