From f2463075ac30b1fdf66bd83b61fdddca6d1c3367 Mon Sep 17 00:00:00 2001 From: "John W. Bruce" Date: Wed, 29 Mar 2017 19:01:04 -0700 Subject: [PATCH] Fix & Improve Test-Building and -Running Scripts (This is a merge of wvgerrit/24922) This contains several fixes and improvements to the build_and_run_all_unit_tests.sh and run_all_unit_tests.sh scripts: * All tests are now identified as vendor binaries and thus are stored in the /vendor/bin/ directory instead of /system/bin/. Previously, some tests had moved to /vendor/bin/ but the scripts had not been updated, causing these tests to fail to run. * The -j parameter can now be passed to build_and_run_all_unit_tests.sh, for those who want to speed up their build by using multiple cores. * The 64-bit library directories are now added to the library search path, in anticipation of devices with 64-bit DRM Plugins. * Checking for Verity protection is now done in build_and_run_all_unit_tests.sh (which is the script that actually modifies the file system) instead of just in run_all_unit_tests.sh. * The library search path is no longer set unnecessarily for libwvdrmengine_hidl_test. * The Treble-only tests and non-Treble-only tests now only run on devices that meet their respective criteria. Bug: 36071236 Test: Ran build_and_run_all_unit_tests.sh Change-Id: Iea236880c4445858111c801dfa278a528bca0f6c --- .../build_and_run_all_unit_tests.sh | 95 ++++++++++++------- libwvdrmengine/cdm/test/unit-test.mk | 4 + libwvdrmengine/mediacrypto/test/Android.mk | 8 ++ libwvdrmengine/mediadrm/test/Android.mk | 8 ++ libwvdrmengine/oemcrypto/test/Android.mk | 4 + libwvdrmengine/run_all_unit_tests.sh | 22 +++-- 6 files changed, 99 insertions(+), 42 deletions(-) diff --git a/libwvdrmengine/build_and_run_all_unit_tests.sh b/libwvdrmengine/build_and_run_all_unit_tests.sh index e1ef862a..a0df822a 100755 --- a/libwvdrmengine/build_and_run_all_unit_tests.sh +++ b/libwvdrmengine/build_and_run_all_unit_tests.sh @@ -3,72 +3,99 @@ set -e if [ -z "$ANDROID_BUILD_TOP" ]; then - echo "Android build environment not set" - exit -1 + echo "Android build environment not set" + exit -1 fi +# Read arguments in case the user wants to do a multicore build +NUM_CORES=1 +while getopts "j:" opt; do + case $opt in + j) + NUM_CORES=$OPTARG + ;; + esac +done + +# Define the relevant aliases . $ANDROID_BUILD_TOP/build/envsetup.sh +# Build all the targets cd $ANDROID_BUILD_TOP/vendor/widevine/libwvdrmengine pwd -mm || mma +mm -j $NUM_CORES || mma -j $NUM_CORES cd $ANDROID_BUILD_TOP/vendor/widevine/libwvdrmengine/test/unit pwd -mm || mma +mm -j $NUM_CORES || mma -j $NUM_CORES cd $ANDROID_BUILD_TOP/vendor/widevine/libwvdrmengine/cdm/test pwd -mm || mma +mm -j $NUM_CORES || mma -j $NUM_CORES cd $ANDROID_BUILD_TOP/vendor/widevine/libwvdrmengine/mediacrypto/test pwd -mm || mma +mm -j $NUM_CORES || mma -j $NUM_CORES cd $ANDROID_BUILD_TOP/vendor/widevine/libwvdrmengine/mediadrm/test pwd -mm || mma +mm -j $NUM_CORES || mma -j $NUM_CORES cd $ANDROID_BUILD_TOP/vendor/widevine/libwvdrmengine/oemcrypto/test pwd -mm || mma +mm -j $NUM_CORES || mma -j $NUM_CORES +# Detect the device and check if Verity is going to stop the script from working echo "waiting for device" -adb root && adb wait-for-device remount +ADB_OUTPUT=`adb root && adb wait-for-device remount` +echo $ADB_OUTPUT +if echo $ADB_OUTPUT | grep -qi "verity"; then + echo + echo "ERROR: This device has Verity enabled. build_and_run_all_unit_tests.sh " + echo "does not work if Verity is enabled. Please disable Verity with" + echo "\"adb disable-verity\" and try again." + exit -1 +fi +# Push the files to the device + +# Given a local path to a file, this will first try to push it to /vendor/bin +# and then, if that fails, to /data/widevine_tests. try_adb_push() { # Swallow the error message -- assume it is a read-only file system. - if ! adb push $@ /system/bin > /dev/null; then + if ! adb push $@ /vendor/bin &> /dev/null; then adb shell mkdir -p /data/widevine_tests # If this fails, the user will get the error message. adb push $@ /data/widevine_tests fi } -try_adb_push $OUT/system/bin/oemcrypto_test -try_adb_push $OUT/system/bin/request_license_test -try_adb_push $OUT/system/bin/cdm_extended_duration_test -try_adb_push $OUT/system/bin/policy_engine_unittest -try_adb_push $OUT/system/bin/policy_engine_constraints_unittest -try_adb_push $OUT/system/bin/libwvdrmmediacrypto_test -try_adb_push $OUT/system/bin/libwvdrmmediacrypto_hidl_test -try_adb_push $OUT/system/bin/libwvdrmdrmplugin_test -try_adb_push $OUT/system/bin/libwvdrmdrmplugin_hidl_test -try_adb_push $OUT/system/bin/cdm_engine_test -try_adb_push $OUT/system/bin/cdm_session_unittest -try_adb_push $OUT/system/bin/file_store_unittest -try_adb_push $OUT/system/bin/file_utils_unittest -try_adb_push $OUT/system/bin/license_unittest -try_adb_push $OUT/system/bin/license_keys_unittest -try_adb_push $OUT/system/bin/initialization_data_unittest -try_adb_push $OUT/system/bin/device_files_unittest -try_adb_push $OUT/system/bin/service_certificate_unittest -try_adb_push $OUT/system/bin/timer_unittest -try_adb_push $OUT/system/bin/libwvdrmengine_test -try_adb_push $OUT/system/bin/libwvdrmengine_hidl_test -try_adb_push $OUT/system/bin/buffer_reader_test -try_adb_push $OUT/system/bin/distribution_test -try_adb_push $OUT/system/bin/event_metric_test +# Push the tests to the device +try_adb_push $OUT/vendor/bin/oemcrypto_test +try_adb_push $OUT/vendor/bin/request_license_test +try_adb_push $OUT/vendor/bin/cdm_extended_duration_test +try_adb_push $OUT/vendor/bin/policy_engine_unittest +try_adb_push $OUT/vendor/bin/policy_engine_constraints_unittest +try_adb_push $OUT/vendor/bin/libwvdrmmediacrypto_test +try_adb_push $OUT/vendor/bin/libwvdrmmediacrypto_hidl_test +try_adb_push $OUT/vendor/bin/libwvdrmdrmplugin_test +try_adb_push $OUT/vendor/bin/libwvdrmdrmplugin_hidl_test +try_adb_push $OUT/vendor/bin/cdm_engine_test +try_adb_push $OUT/vendor/bin/cdm_session_unittest +try_adb_push $OUT/vendor/bin/file_store_unittest +try_adb_push $OUT/vendor/bin/file_utils_unittest +try_adb_push $OUT/vendor/bin/license_unittest +try_adb_push $OUT/vendor/bin/license_keys_unittest +try_adb_push $OUT/vendor/bin/initialization_data_unittest +try_adb_push $OUT/vendor/bin/device_files_unittest +try_adb_push $OUT/vendor/bin/service_certificate_unittest +try_adb_push $OUT/vendor/bin/timer_unittest +try_adb_push $OUT/vendor/bin/libwvdrmengine_test +try_adb_push $OUT/vendor/bin/libwvdrmengine_hidl_test +try_adb_push $OUT/vendor/bin/buffer_reader_test +try_adb_push $OUT/vendor/bin/distribution_test +try_adb_push $OUT/vendor/bin/event_metric_test +# Run the tests using run_all_unit_tests.sh cd $ANDROID_BUILD_TOP/vendor/widevine/libwvdrmengine ./run_all_unit_tests.sh diff --git a/libwvdrmengine/cdm/test/unit-test.mk b/libwvdrmengine/cdm/test/unit-test.mk index a61a3a73..d5abfc69 100644 --- a/libwvdrmengine/cdm/test/unit-test.mk +++ b/libwvdrmengine/cdm/test/unit-test.mk @@ -50,6 +50,10 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_CFLAGS += -DUNIT_TEST +LOCAL_MODULE_OWNER := widevine + +LOCAL_PROPRIETARY_MODULE := true + LOCAL_MODULE_TARGET_ARCH := arm x86 mips include $(BUILD_EXECUTABLE) diff --git a/libwvdrmengine/mediacrypto/test/Android.mk b/libwvdrmengine/mediacrypto/test/Android.mk index 3b931376..3fbf53d1 100644 --- a/libwvdrmengine/mediacrypto/test/Android.mk +++ b/libwvdrmengine/mediacrypto/test/Android.mk @@ -45,6 +45,10 @@ LOCAL_MODULE := libwvdrmmediacrypto_test LOCAL_MODULE_TAGS := tests +LOCAL_MODULE_OWNER := widevine + +LOCAL_PROPRIETARY_MODULE := true + LOCAL_MODULE_TARGET_ARCH := arm x86 mips include $(BUILD_EXECUTABLE) @@ -106,6 +110,10 @@ LOCAL_MODULE := libwvdrmmediacrypto_hidl_test LOCAL_MODULE_TAGS := tests +LOCAL_MODULE_OWNER := widevine + +LOCAL_PROPRIETARY_MODULE := true + LOCAL_MODULE_TARGET_ARCH := arm x86 mips include $(BUILD_EXECUTABLE) diff --git a/libwvdrmengine/mediadrm/test/Android.mk b/libwvdrmengine/mediadrm/test/Android.mk index 95a0e97f..8fdaca28 100644 --- a/libwvdrmengine/mediadrm/test/Android.mk +++ b/libwvdrmengine/mediadrm/test/Android.mk @@ -46,6 +46,10 @@ LOCAL_MODULE := libwvdrmdrmplugin_test LOCAL_MODULE_TAGS := tests +LOCAL_MODULE_OWNER := widevine + +LOCAL_PROPRIETARY_MODULE := true + LOCAL_MODULE_TARGET_ARCH := arm x86 mips include $(BUILD_EXECUTABLE) @@ -108,6 +112,10 @@ LOCAL_MODULE := libwvdrmdrmplugin_hidl_test LOCAL_MODULE_TAGS := tests +LOCAL_MODULE_OWNER := widevine + +LOCAL_PROPRIETARY_MODULE := true + LOCAL_MODULE_TARGET_ARCH := arm x86 mips include $(BUILD_EXECUTABLE) diff --git a/libwvdrmengine/oemcrypto/test/Android.mk b/libwvdrmengine/oemcrypto/test/Android.mk index 56e6fff6..20ef7c34 100644 --- a/libwvdrmengine/oemcrypto/test/Android.mk +++ b/libwvdrmengine/oemcrypto/test/Android.mk @@ -5,6 +5,10 @@ include $(CLEAR_VARS) LOCAL_MODULE:=oemcrypto_test LOCAL_MODULE_TAGS := tests +LOCAL_MODULE_OWNER := widevine + +LOCAL_PROPRIETARY_MODULE := true + LOCAL_MODULE_TARGET_ARCH := arm x86 mips include $(LOCAL_PATH)/common.mk diff --git a/libwvdrmengine/run_all_unit_tests.sh b/libwvdrmengine/run_all_unit_tests.sh index 110ac16e..bb23ff2f 100755 --- a/libwvdrmengine/run_all_unit_tests.sh +++ b/libwvdrmengine/run_all_unit_tests.sh @@ -19,12 +19,12 @@ fi adb_shell_run() { local test_file=$1 shift - if adb shell ls /data/widevine_tests/$test_file; then + if adb shell ls /data/widevine_tests/$test_file &> /dev/null; then test_file=/data/widevine_tests/$test_file else - test_file=/system/bin/$test_file - echo $test_file + test_file=/vendor/bin/$test_file fi + echo $test_file local tmp_log="$OUT/mediadrmtest.log" local adb_error="[ADB SHELL] $@ $test_file failed" adb shell "GTEST_FILTER=$GTEST_FILTER $@ $test_file" \|\| echo "$adb_error" | tee "$tmp_log" @@ -88,12 +88,18 @@ adb_shell_run buffer_reader_test adb_shell_run distribution_test adb_shell_run event_metric_test -library_path="/system/vendor/lib/mediadrm/ " -adb_shell_run libwvdrmengine_test LD_LIBRARY_PATH=$library_path +# Run the non-Treble test on non-Treble devices +if adb shell ls /vendor/lib/mediadrm/libwvdrmengine.so &> /dev/null || + adb shell ls /vendor/lib64/mediadrm/libwvdrmengine.so &> /dev/null; then + library_path="/vendor/lib/mediadrm/:/vendor/lib64/mediadrm/" + adb_shell_run libwvdrmengine_test LD_LIBRARY_PATH=$library_path +fi -library_path="/system/vendor/lib/hw/ " -adb_shell_run libwvdrmengine_hidl_test LD_LIBRARY_PATH=$library_path +# Run the Treble test on Treble devices +if adb shell ls /vendor/lib/libwvhidl.so &> /dev/null || + adb shell ls /vendor/lib64/libwvhidl.so &> /dev/null; then + adb_shell_run libwvdrmengine_hidl_test +fi # Re-enable DroidGuard set_droidguard enable -