blob: 33b9f30aeac53004a1f2021337e8ab53f290b48e [file] [log] [blame]
#!/usr/bin/env bash
if [[ ! ($# == 1) ]]; then
echo "$0: usage: coverage.sh OUTPUT_DIR"
exit 1
fi
if [ -z $ANDROID_BUILD_TOP ]; then
echo "You need to source and lunch before you can use this script"
exit 1
fi
cd "$(dirname $0)" #cd to directory containing this script
REPORTER_JAR=$ANDROID_HOST_OUT/framework/jacoco-cli.jar
OUTPUT_DIR=$1
echo "Running tests and generating coverage report"
echo "Output dir: $OUTPUT_DIR"
REMOTE_COVERAGE_OUTPUT_FILE=/data/data/com.android.server.wifi.test/files/coverage.ec
COVERAGE_OUTPUT_FILE=$OUTPUT_DIR/wifi_coverage.ec
set -e # fail early
set -x # print commands
# build this module so we can run its tests, and
# build system/core so we can invoke `adb`, and
# build jacoco-cli.jar so we can generate the report
$ANDROID_BUILD_TOP/build/soong/soong_ui.bash --make-mode \
EMMA_INSTRUMENT=true \
EMMA_INSTRUMENT_FRAMEWORK=false \
EMMA_INSTRUMENT_STATIC=true \
ANDROID_COMPILE_WITH_JACK=false \
SKIP_BOOT_JARS_CHECK=true \
MODULES-IN-frameworks-opt-net-wifi-tests \
MODULES-IN-system-core \
MODULES-IN-external-jacoco \
FrameworksWifiTests
adb root
adb wait-for-device
adb shell rm -f $REMOTE_COVERAGE_OUTPUT_FILE
adb install -r -g "$OUT/data/app/FrameworksWifiTests/FrameworksWifiTests.apk"
adb shell am instrument -e coverage true --no-hidden-api-checks -w 'com.android.server.wifi.test/com.android.server.wifi.CustomTestRunner'
mkdir -p $OUTPUT_DIR
adb pull $REMOTE_COVERAGE_OUTPUT_FILE $COVERAGE_OUTPUT_FILE
java -jar $REPORTER_JAR \
report \
--classfiles $ANDROID_PRODUCT_OUT/../../common/obj/APPS/FrameworksWifiTests_intermediates/jacoco/report-resources/jacoco-report-classes.jar \
--html $OUTPUT_DIR \
--sourcefiles $ANDROID_BUILD_TOP/frameworks/opt/net/wifi/tests/wifitests/src \
--sourcefiles $ANDROID_BUILD_TOP/frameworks/opt/net/wifi/service/java \
--name wifi-coverage \
$COVERAGE_OUTPUT_FILE
echo Created report at $OUTPUT_DIR/index.html