From 83a72425bf7db7c9ee1ca5333d10222e775e1e33 Mon Sep 17 00:00:00 2001 From: Edwin Wong Date: Wed, 15 Jun 2022 23:55:21 +0000 Subject: [PATCH] Add missing properties in query test. [Merged from: http://go/wvgerrit/153549] Test: adb shell LD_LIBRARY_PATH=/vendor/lib64 /data/nativetest/libwvdrmdrmplugin_hal_test Bug: 235885663 Change-Id: Ie2885d4f2a54d0bb7c58ed4657a3d7b7c779b0da --- .../mediadrm/test/WVDrmPlugin_hal_test.cpp | 97 ++++++++++++++++++- 1 file changed, 95 insertions(+), 2 deletions(-) diff --git a/libwvdrmengine/mediadrm/test/WVDrmPlugin_hal_test.cpp b/libwvdrmengine/mediadrm/test/WVDrmPlugin_hal_test.cpp index c05fd6b4..630ec29e 100644 --- a/libwvdrmengine/mediadrm/test/WVDrmPlugin_hal_test.cpp +++ b/libwvdrmengine/mediadrm/test/WVDrmPlugin_hal_test.cpp @@ -17,14 +17,14 @@ #include "WVErrors.h" #include "cdm_client_property_set.h" -#include "gmock/gmock.h" -#include "gtest/gtest.h" #include "media/stagefright/MediaErrors.h" #include "media/stagefright/foundation/ABase.h" #include "string_conversions.h" #include "wv_cdm_constants.h" #include "wv_cdm_types.h" #include "wv_content_decryption_module.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" namespace { typedef std::vector<::aidl::android::hardware::drm::KeyValue> KeyedVector; @@ -109,20 +109,29 @@ using wvcdm::kLicenseTypeStreaming; using wvcdm::kSecurityLevelL1; using wvcdm::kSecurityLevelL3; using wvcdm::NEVER_EXPIRES; +using wvcdm::QUERY_KEY_ANALOG_OUTPUT_CAPABILITIES; +using wvcdm::QUERY_KEY_CAN_DISABLE_ANALOG_OUTPUT; +using wvcdm::QUERY_KEY_CURRENT_HDCP_LEVEL; using wvcdm::QUERY_KEY_CURRENT_SRM_VERSION; using wvcdm::QUERY_KEY_DECRYPT_HASH_SUPPORT; using wvcdm::QUERY_KEY_DEVICE_ID; +using wvcdm::QUERY_KEY_MAX_HDCP_LEVEL; using wvcdm::QUERY_KEY_MAX_NUMBER_OF_SESSIONS; +using wvcdm::QUERY_KEY_MAX_USAGE_TABLE_ENTRIES; using wvcdm::QUERY_KEY_NUMBER_OF_OPEN_SESSIONS; +using wvcdm::QUERY_KEY_OEMCRYPTO_API_MINOR_VERSION; using wvcdm::QUERY_KEY_OEMCRYPTO_API_VERSION; using wvcdm::QUERY_KEY_OEMCRYPTO_BUILD_INFORMATION; using wvcdm::QUERY_KEY_OEMCRYPTO_SESSION_ID; +using wvcdm::QUERY_KEY_PRODUCTION_READY; using wvcdm::QUERY_KEY_PROVISIONING_ID; using wvcdm::QUERY_KEY_PROVISIONING_MODEL; using wvcdm::QUERY_KEY_RESOURCE_RATING_TIER; using wvcdm::QUERY_KEY_SECURITY_LEVEL; using wvcdm::QUERY_KEY_SRM_UPDATE_SUPPORT; using wvcdm::QUERY_KEY_SYSTEM_ID; +using wvcdm::QUERY_KEY_USAGE_SUPPORT; +using wvcdm::QUERY_KEY_WATERMARKING_SUPPORT; using wvcdm::QUERY_KEY_WVCDM_VERSION; using wvcdm::QUERY_VALUE_SECURITY_LEVEL_L1; using wvcdm::QUERY_VALUE_SECURITY_LEVEL_L3; @@ -1047,11 +1056,16 @@ TEST_F(WVDrmPluginHalTest, ReturnsExpectedPropertyValues) { CdmQueryMap l3Map; l3Map[QUERY_KEY_SECURITY_LEVEL] = QUERY_VALUE_SECURITY_LEVEL_L3; + static const std::string analogOutputCap = wvcdm::QUERY_VALUE_CGMS_A; + static const std::string currentHdcpLevel = wvcdm::QUERY_VALUE_HDCP_NONE; + static const std::string maxHdcpLevel = wvcdm::QUERY_VALUE_HDCP_V2_3; static const std::string systemId = "The Universe"; static const std::string provisioningId("Life\0&Everything", 16); static const std::string openSessions = "42"; static const std::string maxSessions = "54"; + static const std::string maxUsageEntries = "256"; static const std::string oemCryptoApiVersion = "13"; + static const std::string oemCryptoApiMinorVersion = "2"; static const std::string currentSRMVersion = "1"; static const std::string mCdmVersion = "Infinity Minus 1"; static const std::string resourceRatingTier = "1"; @@ -1095,6 +1109,10 @@ TEST_F(WVDrmPluginHalTest, ReturnsExpectedPropertyValues) { .WillOnce(DoAll(SetArgPointee<2>(oemCryptoApiVersion), testing::Return(wvcdm::NO_ERROR))); + EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_OEMCRYPTO_API_MINOR_VERSION, _)) + .WillOnce(DoAll(SetArgPointee<2>(oemCryptoApiMinorVersion), + testing::Return(wvcdm::NO_ERROR))); + EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_SRM_UPDATE_SUPPORT, _)) .WillOnce( DoAll(SetArgPointee<2>("True"), testing::Return(wvcdm::NO_ERROR))); @@ -1126,6 +1144,38 @@ TEST_F(WVDrmPluginHalTest, ReturnsExpectedPropertyValues) { .WillOnce(DoAll(SetArgPointee<2>(provisioningModel), testing::Return(wvcdm::NO_ERROR))); + EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_ANALOG_OUTPUT_CAPABILITIES, _)) + .WillOnce(DoAll(SetArgPointee<2>(analogOutputCap), + testing::Return(wvcdm::NO_ERROR))); + + EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_CAN_DISABLE_ANALOG_OUTPUT, _)) + .WillOnce( + DoAll(SetArgPointee<2>("True"), testing::Return(wvcdm::NO_ERROR))); + + EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_CURRENT_HDCP_LEVEL, _)) + .WillOnce(DoAll(SetArgPointee<2>(currentHdcpLevel), + testing::Return(wvcdm::NO_ERROR))); + + EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_MAX_HDCP_LEVEL, _)) + .WillOnce(DoAll(SetArgPointee<2>(maxHdcpLevel), + testing::Return(wvcdm::NO_ERROR))); + + EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_MAX_USAGE_TABLE_ENTRIES, _)) + .WillOnce(DoAll(SetArgPointee<2>(maxUsageEntries), + testing::Return(wvcdm::NO_ERROR))); + + EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_PRODUCTION_READY, _)) + .WillOnce(DoAll(SetArgPointee<2>(wvcdm::QUERY_VALUE_TRUE), + testing::Return(wvcdm::NO_ERROR))); + + EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_USAGE_SUPPORT, _)) + .WillOnce( + DoAll(SetArgPointee<2>("True"), testing::Return(wvcdm::NO_ERROR))); + + EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_WATERMARKING_SUPPORT, _)) + .WillOnce(DoAll(SetArgPointee<2>(wvcdm::QUERY_VALUE_NOT_SUPPORTED), + testing::Return(wvcdm::NO_ERROR))); + EXPECT_CALL(*mCdm, GetMetrics(_, _)) .WillOnce(DoAll(SetArgPointee<1>(expected_metrics), testing::Return(wvcdm::NO_ERROR))); @@ -1188,6 +1238,11 @@ TEST_F(WVDrmPluginHalTest, ReturnsExpectedPropertyValues) { EXPECT_TRUE(ret.isOk()); EXPECT_STREQ(oemCryptoApiVersion.c_str(), stringResult.c_str()); + ret = mPlugin->getPropertyString(std::string("oemCryptoApiMinorVersion"), + &stringResult); + EXPECT_TRUE(ret.isOk()); + EXPECT_STREQ(oemCryptoApiMinorVersion.c_str(), stringResult.c_str()); + ret = mPlugin->getPropertyString(std::string("SRMUpdateSupport"), &stringResult); EXPECT_TRUE(ret.isOk()); @@ -1227,6 +1282,44 @@ TEST_F(WVDrmPluginHalTest, ReturnsExpectedPropertyValues) { EXPECT_TRUE(ret.isOk()); EXPECT_EQ(provisioningModel, stringResult); + ret = mPlugin->getPropertyString(std::string("analogOutputCapabilities"), + &stringResult); + EXPECT_TRUE(ret.isOk()); + EXPECT_EQ(analogOutputCap, stringResult.c_str()); + + ret = mPlugin->getPropertyString(std::string("canDisableAnalogOutput"), + &stringResult); + EXPECT_TRUE(ret.isOk()); + EXPECT_STREQ("True", stringResult.c_str()); + + ret = mPlugin->getPropertyString(std::string("hdcpLevel"), &stringResult); + EXPECT_TRUE(ret.isOk()); + EXPECT_EQ(currentHdcpLevel, stringResult.c_str()); + + ret = mPlugin->getPropertyString(std::string("maxHdcpLevel"), &stringResult); + EXPECT_TRUE(ret.isOk()); + EXPECT_EQ(maxHdcpLevel, stringResult.c_str()); + + ret = mPlugin->getPropertyString(std::string("maxUsageEntriesSupported"), + &stringResult); + EXPECT_TRUE(ret.isOk()); + EXPECT_EQ(maxUsageEntries, stringResult.c_str()); + + ret = mPlugin->getPropertyString(std::string("usageReportingSupport"), + &stringResult); + EXPECT_TRUE(ret.isOk()); + EXPECT_STREQ("True", stringResult.c_str()); + + ret = + mPlugin->getPropertyString(std::string("productionReady"), &stringResult); + EXPECT_TRUE(ret.isOk()); + EXPECT_EQ(wvcdm::QUERY_VALUE_TRUE, stringResult.c_str()); + + ret = mPlugin->getPropertyString(std::string("watermarkingSupport"), + &stringResult); + EXPECT_TRUE(ret.isOk()); + EXPECT_EQ(wvcdm::QUERY_VALUE_NOT_SUPPORTED, stringResult.c_str()); + // This call occurs before any open session or other call. This means // that the mCdm identifier is not yet sealed, and metrics return empty // metrics data.