diff --git a/libwvdrmengine/build_all_unit_tests.sh b/libwvdrmengine/build_all_unit_tests.sh index b09aa39b..091147e3 100755 --- a/libwvdrmengine/build_all_unit_tests.sh +++ b/libwvdrmengine/build_all_unit_tests.sh @@ -30,6 +30,7 @@ done # it does not run very long tests or tests needing special setup. WV_TEST_TARGETS="base64_test \ buffer_reader_test \ + cdm_coverage_test \ cdm_engine_test \ cdm_engine_metrics_decorator_unittest \ cdm_feature_test \ diff --git a/libwvdrmengine/cdm/test/Android.mk b/libwvdrmengine/cdm/test/Android.mk index 7c2e0a24..5bb1c3fd 100644 --- a/libwvdrmengine/cdm/test/Android.mk +++ b/libwvdrmengine/cdm/test/Android.mk @@ -50,6 +50,9 @@ test_src_dir := ../core/test test_main := ../core/test/test_main.cpp include $(LOCAL_PATH)/integration-test.mk +# coverage-test.mk will define test name. +include $(LOCAL_PATH)/coverage-test.mk + test_name := counter_metric_unittest test_src_dir := ../metrics/test include $(LOCAL_PATH)/unit-test.mk diff --git a/libwvdrmengine/cdm/test/cdm_coverage_main.cpp b/libwvdrmengine/cdm/test/cdm_coverage_main.cpp new file mode 100644 index 00000000..e7c1ad67 --- /dev/null +++ b/libwvdrmengine/cdm/test/cdm_coverage_main.cpp @@ -0,0 +1,49 @@ +// Copyright 2022 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine License +// Agreement. +#include + +#include + +#include "gtest/gtest.h" + +#include "log.h" + +namespace wvcdm { +namespace { +void UpdateGtestFilter() { + const std::string initial_filter = ::testing::GTEST_FLAG(filter); + if (!initial_filter.empty()) { + LOGW("Ignoring provided GTEST filter: %s", initial_filter.c_str()); + } + std::string final_filter("-"); + // Sleepy tests. + final_filter.append("*VerifyUsageTimes*:*Refresh*:*TimingTest*"); + final_filter.append(":*KeyDuration*:*CdmUseCase*"); + final_filter.append(":*ExtendedDurationTest*"); + // Slow tests. + final_filter.append(":*OEMCryptoMemory*:*Huge*:*NonceFlood*"); + final_filter.append( + ":*TwoHundredEntries*:*ManyUsageEntries*:*UsageTableDefrag*"); + final_filter.append( + ":*DecryptMax*:*MaxTotalKeys*:*OEMCryptoSessionTestsDecryptTests*"); + final_filter.append(":*SharedMutex*:*Parallel*"); + // Flacky tests. + final_filter.append(":*Repeated/ParallelCdmTest*"); + // L1 only tests. + final_filter.append(":*Level1Required"); + ::testing::GTEST_FLAG(filter) = final_filter; +} +} // namespace +} // namespace wvcdm + +int main(int argc, char** argv) { + LOGI("Running Android CDM tests"); + testing::InitGoogleTest(&argc, argv); + wvcdm::UpdateGtestFilter(); + const int status = RUN_ALL_TESTS(); + LOGD("CDM coverage test complete with status %d", status); + // Test is for coverage information only, actual test failure + // should not change the final result of the test executable. + return EXIT_SUCCESS; +} diff --git a/libwvdrmengine/cdm/test/cdm_test_main.cpp b/libwvdrmengine/cdm/test/cdm_test_main.cpp deleted file mode 100644 index 8bbf6221..00000000 --- a/libwvdrmengine/cdm/test/cdm_test_main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2021 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine License -// Agreement. -#include - -#include "gtest/gtest.h" - -#include "log.h" - -int main(int argc, char** argv) { - LOGI("Running Android CDM tests"); - testing::InitGoogleTest(&argc, argv); - const int status = RUN_ALL_TESTS(); - LOGD("CDM test complete with status %d", status); - exit(status); // Explicit call to exit() is required for code coverage. - return status; -} diff --git a/libwvdrmengine/cdm/test/coverage-test.mk b/libwvdrmengine/cdm/test/coverage-test.mk new file mode 100644 index 00000000..74d91857 --- /dev/null +++ b/libwvdrmengine/cdm/test/coverage-test.mk @@ -0,0 +1,89 @@ +# ---------------------------------------------------------------- +# Builds CDM Coverage Test. +# +include $(CLEAR_VARS) + +LOCAL_LICENSE_CONDITIONS := by_exception_only +LOCAL_LICENSE_KINDS := legacy_by_exception_only +LOCAL_MODULE := cdm_coverage_test +LOCAL_MODULE_TAGS := tests + +LOCAL_SRC_FILES := \ + ./cdm_coverage_main.cpp \ + ../core/test/buffer_reader_test.cpp \ + ../core/test/config_test_env.cpp \ + ../core/test/device_files_unittest.cpp \ + ../core/test/fake_provisioning_server.cpp \ + ../core/test/http_socket.cpp \ + ../core/test/initialization_data_unittest.cpp \ + ../core/test/license_keys_unittest.cpp \ + ../core/test/license_request.cpp \ + ../core/test/service_certificate_unittest.cpp \ + ../core/test/test_base.cpp \ + ../core/test/test_printers.cpp \ + ../core/test/url_request.cpp \ + ../metrics/test/counter_metric_unittest.cpp \ + ../metrics/test/distribution_unittest.cpp \ + ../metrics/test/event_metric_unittest.cpp \ + ../metrics/test/metrics_collections_unittest.cpp \ + ../metrics/test/value_metric_unittest.cpp \ + ../util/test/base64_test.cpp \ + ../util/test/cdm_random_unittest.cpp \ + ../util/test/file_store_unittest.cpp \ + ../util/test/file_utils_unittest.cpp \ + ../util/test/test_sleep.cpp \ + ../../oemcrypto/test/oec_device_features.cpp \ + ../../oemcrypto/test/oec_key_deriver.cpp \ + ../../oemcrypto/test/oec_session_util.cpp \ + +LOCAL_C_INCLUDES := \ + vendor/widevine/libwvdrmengine/android/cdm/test \ + vendor/widevine/libwvdrmengine/cdm/core/include \ + vendor/widevine/libwvdrmengine/cdm/core/test \ + vendor/widevine/libwvdrmengine/cdm/include \ + vendor/widevine/libwvdrmengine/cdm/metrics/include \ + vendor/widevine/libwvdrmengine/cdm/util/include \ + vendor/widevine/libwvdrmengine/cdm/util/test \ + vendor/widevine/libwvdrmengine/oemcrypto/include \ + vendor/widevine/libwvdrmengine/oemcrypto/test \ + vendor/widevine/libwvdrmengine/oemcrypto/test/fuzz_tests \ + vendor/widevine/libwvdrmengine/oemcrypto/odk/include \ + vendor/widevine/libwvdrmengine/oemcrypto/odk/kdo/include \ + +LOCAL_C_INCLUDES += external/protobuf/src + +LOCAL_STATIC_LIBRARIES := \ + libcdm \ + libcdm_protos \ + libcdm_utils \ + libjsmn \ + libgmock \ + libgtest \ + libwvlevel3 \ + libwv_kdo \ + libwv_odk \ + +LOCAL_SHARED_LIBRARIES := \ + libbase \ + libcrypto \ + libdl \ + libhidlbase \ + liblog \ + libmedia_omx \ + libprotobuf-cpp-lite \ + libssl \ + libstagefright_foundation \ + libutils \ + +LOCAL_CFLAGS += -DUNIT_TEST + +LOCAL_MODULE_OWNER := widevine +LOCAL_PROPRIETARY_MODULE := true + +LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/nativetest + +ifneq ($(TARGET_ENABLE_MEDIADRM_64), true) +LOCAL_MODULE_TARGET_ARCH := arm x86 mips +endif + +include $(BUILD_EXECUTABLE) diff --git a/libwvdrmengine/cdm/test/unit-test.mk b/libwvdrmengine/cdm/test/unit-test.mk index 70963ac3..98401333 100644 --- a/libwvdrmengine/cdm/test/unit-test.mk +++ b/libwvdrmengine/cdm/test/unit-test.mk @@ -22,7 +22,6 @@ LOCAL_SRC_FILES := \ ../core/test/url_request.cpp \ ../../oemcrypto/test/oec_device_features.cpp \ ../util/test/test_sleep.cpp \ - ./cdm_test_main.cpp \ LOCAL_C_INCLUDES := \ vendor/widevine/libwvdrmengine/android/cdm/test \ @@ -47,6 +46,7 @@ LOCAL_STATIC_LIBRARIES := \ libjsmn \ libgmock \ libgtest \ + libgtest_main \ libwvlevel3 \ LOCAL_SHARED_LIBRARIES := \