1#!/bin/sh 2 3# A shell script to generate a coverage report for opt/net/wifi 4 5if [[ ! ($# == 1) ]]; then 6 echo "$0: usage: coverage.sh OUTPUT_DIR" 7 exit 1 8fi 9 10if [ -z $ANDROID_BUILD_TOP ]; then 11 echo "You need to source and lunch before you can use this script" 12 exit 1 13fi 14 15# Make the output directory and get its full name 16OUTPUT_DIR="$1" 17mkdir -p $OUTPUT_DIR || exit 1 18OUTPUT_DIR="`(cd $OUTPUT_DIR && pwd)`" 19BUILD_OUT_DIR=$OUTPUT_DIR/out 20echo "Output dir: $OUTPUT_DIR" 21 22cd "$(dirname $0)" #cd to directory containing this script 23 24echo "Checking jacoco patterns" 25class_patterns_from_filenames () { 26 sed -e 's/[.]java$//' -e 's@/@.@g' | 27 while read x; do 28 printf ' "%s",\n' "$x" 29 printf ' "%s$*",\n' "$x" 30 printf ' "%s.**",\n' "$x" 31 done 32} 33 34generate_new_bp () ( 35 sed -n -e p -e '/include_filter:/q' < Android.bp 36 (cd ../../service/java && find * -name \*.java) | 37 LC_ALL=C sort | 38 class_patterns_from_filenames 39 tail -n 3 Android.bp 40) 41 42generate_new_bp > $OUTPUT_DIR/bp 43 44diff -u Android.bp $OUTPUT_DIR/bp || { 45 mv $OUTPUT_DIR/bp Android.bp 46 echo "Android.bp has been updated. Please review and check in the new version" 47 exit 1 48} 49rm -f $OUTPUT_DIR/bp 50 51REMOTE_COVERAGE_OUTPUT_FILE=/data/data/com.android.server.wifi.test/files/coverage.ec 52COVERAGE_OUTPUT_FILE=$OUTPUT_DIR/wifi_coverage.ec 53 54# Note - the $VARs in the following are expanded by the here-file redirection! 55echo "Building for coverage report" 56bash <<END_OF_BUILD_SCRIPT || { exit 1; } 57 cd $ANDROID_BUILD_TOP 58 source build/make/envsetup.sh 59 lunch ${TARGET_PRODUCT}-${TARGET_BUILD_VARIANT} 60 export OUT_DIR=${BUILD_OUT_DIR} 61 export EMMA_INSTRUMENT=true 62 export EMMA_INSTRUMENT_FRAMEWORK=false 63 export EMMA_INSTRUMENT_STATIC=true 64 export ANDROID_COMPILE_WITH_JACK=false 65 export SKIP_BOOT_JARS_CHECK=true 66 m FrameworksWifiTests jacoco-cli 67END_OF_BUILD_SCRIPT 68 69APK_NAME="$(find $BUILD_OUT_DIR/target/product -name FrameworksWifiTests.apk | \ 70 grep -v /symbols/)" 71REPORTER_JAR="$(find $BUILD_OUT_DIR/host -name jacoco-cli.jar)" 72 73echo "Running tests and generating coverage report" 74 75set -e # fail early 76set -x # print commands 77test -f "$APK_NAME" 78test -f "$REPORTER_JAR" 79 80adb root 81adb wait-for-device 82 83adb shell rm -f $REMOTE_COVERAGE_OUTPUT_FILE 84 85adb install -r -g "$APK_NAME" 86 87adb shell am instrument -e coverage true --no-hidden-api-checks \ 88 -w 'com.android.server.wifi.test/com.android.server.wifi.CustomTestRunner' 89 90adb pull $REMOTE_COVERAGE_OUTPUT_FILE $COVERAGE_OUTPUT_FILE 91 92java -jar $REPORTER_JAR \ 93 report \ 94 --html $OUTPUT_DIR \ 95 --classfiles $BUILD_OUT_DIR/target/common/obj/APPS/FrameworksWifiTests_intermediates/jacoco-report-classes.jar \ 96 --sourcefiles $ANDROID_BUILD_TOP/frameworks/opt/net/wifi/service/java \ 97 --name wifi-coverage \ 98 $COVERAGE_OUTPUT_FILE 99set +x 100 101echo Created report at file://$OUTPUT_DIR/index.html 102 103