1#!/usr/bin/env bash 2 3##### App specific parameters ##### 4 5PACKAGE_NAME='com.android.libraries.entitlement' 6MODULE_NAME='service-entitlement' 7MODULE_PATH='frameworks/libs/service_entitlement' 8 9TEST_PACKAGE='com.android.libraries.entitlement.tests' 10TEST_MODULE_NAME='service-entitlement-tests' 11TEST_MODULE_PATH='frameworks/libs/service_entitlement/tests' 12TEST_MODULE_INSTALL_PATH="testcases/$TEST_MODULE_NAME/arm64/$TEST_MODULE_NAME.apk" 13TEST_RUNNER="$TEST_PACKAGE/androidx.test.runner.AndroidJUnitRunner" 14 15##### End app specific parameters ##### 16 17if [[ $# != 0 && ! ($# == 1 && ($1 == "html" || $1 == "xml" || $1 == "csv")) ]]; then 18 echo "$0: usage: coverage.sh [REPORT_TYPE]" 19 echo "REPORT_TYPE [html | xml | csv] : the type of the report (default is html)" 20 exit 1 21fi 22 23REPORT_TYPE=${1:-html} 24 25if [ -z $ANDROID_BUILD_TOP ]; then 26 echo "You need to source and lunch before you can use this script" 27 exit 1 28fi 29 30REPORTER_JAR="$ANDROID_BUILD_TOP/out/soong/host/linux-x86/framework/jacoco-cli.jar" 31 32OUTPUT_DIR="$ANDROID_BUILD_TOP/out/coverage/$MODULE_NAME" 33 34echo "Running tests and generating coverage report" 35echo "Output dir: $OUTPUT_DIR" 36echo "Report type: $REPORT_TYPE" 37 38# location on the device to store coverage results, need to be accessible by the app 39REMOTE_COVERAGE_OUTPUT_FILE="/data/user/0/$TEST_PACKAGE/files/coverage.ec" 40 41COVERAGE_OUTPUT_FILE="$ANDROID_BUILD_TOP/out/$PACKAGE_NAME.ec" 42OUT_COMMON="$ANDROID_BUILD_TOP/out/target/common" 43COVERAGE_CLASS_FILE="$OUT/obj/JAVA_LIBRARIES/${MODULE_NAME}_intermediates/javalib.jar" 44 45source $ANDROID_BUILD_TOP/build/envsetup.sh 46 47set -e # fail early 48 49echo "" 50echo "BUILDING PACKAGE $PACKAGE_NAME" 51echo "============================================" 52(cd "$ANDROID_BUILD_TOP/$MODULE_PATH" && EMMA_INSTRUMENT=true EMMA_INSTRUMENT_STATIC=true mma -j32) 53echo "============================================" 54 55echo "" 56echo "BUILDING TEST PACKAGE $TEST_MODULE_NAME" 57echo "============================================" 58(cd "$ANDROID_BUILD_TOP/$TEST_MODULE_PATH" && EMMA_INSTRUMENT=true EMMA_INSTRUMENT_STATIC=true mma -j32) 59echo "============================================" 60 61#set -x # print commands 62 63adb root 64adb wait-for-device 65 66adb shell rm -f "$REMOTE_COVERAGE_OUTPUT_FILE" 67 68adb install -r -g "$OUT/$TEST_MODULE_INSTALL_PATH" 69 70echo "" 71echo "RUNNING TESTS $TEST_RUNNER" 72echo "============================================" 73adb shell am instrument -e coverage true -w $TEST_RUNNER 74echo "============================================" 75 76mkdir -p "$OUTPUT_DIR" 77 78adb pull "$REMOTE_COVERAGE_OUTPUT_FILE" "$COVERAGE_OUTPUT_FILE" 79 80java -jar "$REPORTER_JAR" \ 81 report "$COVERAGE_OUTPUT_FILE" \ 82 --$REPORT_TYPE "$OUTPUT_DIR" \ 83 --classfiles "$COVERAGE_CLASS_FILE" \ 84 --sourcefiles "$ANDROID_BUILD_TOP/$MODULE_PATH/java" 85 86#set +x 87 88# Echo the file as URI to quickly open the result using ctrl-click in terminal 89if [[ REPORT_TYPE == html ]] ; then 90 echo "COVERAGE RESULTS IN:" 91 echo "file://$OUTPUT_DIR/index.html" 92fi 93