Merge "Address Cdm Extended Duration Test failures" into pi-dev am: aa536ec97f

am: 410f28186b

Change-Id: Iab78f1b96044629b73ee71278707dd4e5097fcab
This commit is contained in:
Rahul Frias
2018-05-14 15:43:49 -07:00
committed by android-build-merger
3 changed files with 32 additions and 18 deletions

View File

@@ -139,6 +139,7 @@ CdmResponseType CdmEngine::OpenSession(
return sts; return sts;
} }
CdmSessionId id = new_session->session_id(); CdmSessionId id = new_session->session_id();
LOGI("CdmEngine::OpenSession: %s", id.c_str());
session_map_.Add(id, new_session.release()); session_map_.Add(id, new_session.release());
if (session_id) *session_id = id; if (session_id) *session_id = id;
@@ -1669,7 +1670,9 @@ void CdmEngine::OnTimerEvent() {
(*iter)->reset_usage_flags(); (*iter)->reset_usage_flags();
switch ((*iter)->get_usage_support_type()) { switch ((*iter)->get_usage_support_type()) {
case kUsageEntrySupport: case kUsageEntrySupport:
(*iter)->UpdateUsageEntryInformation(); if ((*iter)->has_provider_session_token()) {
(*iter)->UpdateUsageEntryInformation();
}
break; break;
case kUsageTableSupport: case kUsageTableSupport:
if (!has_usage_been_updated) { if (!has_usage_been_updated) {

View File

@@ -299,7 +299,8 @@ CdmResponseType WvContentDecryptionModule::Decrypt(
// key sharing, the shared session will still be in the same CdmEngine. // key sharing, the shared session will still be in the same CdmEngine.
CdmEngine* cdm_engine = GetCdmForSessionId(session_id); CdmEngine* cdm_engine = GetCdmForSessionId(session_id);
if (!cdm_engine) { if (!cdm_engine) {
LOGE("WvContentDecryptionModule::Decrypt: not found"); LOGE("WvContentDecryptionModule::Decrypt: session not found: %s",
session_id.c_str());
return SESSION_NOT_FOUND_18; return SESSION_NOT_FOUND_18;
} }
@@ -310,7 +311,8 @@ CdmResponseType WvContentDecryptionModule::Decrypt(
cdm_engine->GetMetrics()->cdm_engine_find_session_for_key_.Increment( cdm_engine->GetMetrics()->cdm_engine_find_session_for_key_.Increment(
status); status);
if (!status && parameters.is_encrypted) { if (!status && parameters.is_encrypted) {
LOGE("WvContentDecryptionModule::Decrypt: unable to find session"); LOGE("WvContentDecryptionModule::Decrypt: unable to find session: %s",
session_id.c_str());
return KEY_NOT_FOUND_IN_SESSION; return KEY_NOT_FOUND_IN_SESSION;
} }
} }

View File

@@ -92,7 +92,7 @@ SubSampleInfo kEncryptedStreamingNoPstSubSample = {
"08a899cd760ff0899a1170c2f224b9c52997a0785b7fe170805fd3e8b1127659"), "08a899cd760ff0899a1170c2f224b9c52997a0785b7fe170805fd3e8b1127659"),
wvcdm::a2b_hex("f6f4b1e600a5b67813ed2bded913ba9f"), 0, 3}; wvcdm::a2b_hex("f6f4b1e600a5b67813ed2bded913ba9f"), 0, 3};
SubSampleInfo kEncryptedStreamingClip1SubSample = { SubSampleInfo kEncryptedStreamingClip8SubSample = {
true, 1, true, true, false, true, 1, true, true, false,
wvcdm::a2bs_hex("E82DDD1D07CBB31CDD31EBAAE0894609"), wvcdm::a2bs_hex("E82DDD1D07CBB31CDD31EBAAE0894609"),
wvcdm::a2b_hex( wvcdm::a2b_hex(
@@ -161,11 +161,11 @@ SubSampleInfo kEncryptedOfflineClip2SubSample = {
"944B5080B998BB0FE6E566AAFAE2328B37FD189F1920A964434ECF18E11AC81E"), "944B5080B998BB0FE6E566AAFAE2328B37FD189F1920A964434ECF18E11AC81E"),
wvcdm::a2b_hex("7362b5140c4ce0cd5f863858668d3f1a"), 0, 3}; wvcdm::a2b_hex("7362b5140c4ce0cd5f863858668d3f1a"), 0, 3};
std::string kStreamingClip1PstInitData = wvcdm::a2bs_hex( std::string kStreamingClip8PstInitData = wvcdm::a2bs_hex(
"000000427073736800000000" // blob size and pssh "000000427073736800000000" // blob size and pssh
"EDEF8BA979D64ACEA3C827DCD51D21ED00000022" // Widevine system id "EDEF8BA979D64ACEA3C827DCD51D21ED00000022" // Widevine system id
"08011a0d7769646576696e655f74657374220f73" // pssh data "08011a0d7769646576696e655f74657374220f73" // pssh data
"747265616d696e675f636c697033"); "747265616d696e675f636c697038");
std::string kOfflineClip2PstInitData = wvcdm::a2bs_hex( std::string kOfflineClip2PstInitData = wvcdm::a2bs_hex(
"000000427073736800000000" // blob size and pssh "000000427073736800000000" // blob size and pssh
@@ -529,6 +529,7 @@ class WvCdmExtendedDurationTest : public WvCdmTestBase {
} }
void ValidateReleaseRequest(std::string& usage_msg, void ValidateReleaseRequest(std::string& usage_msg,
bool license_used,
int64_t expected_seconds_since_license_received, int64_t expected_seconds_since_license_received,
int64_t expected_seconds_since_first_playback, int64_t expected_seconds_since_first_playback,
int64_t expected_seconds_since_last_playback) { int64_t expected_seconds_since_last_playback) {
@@ -572,7 +573,8 @@ class WvCdmExtendedDurationTest : public WvCdmTestBase {
Unpacked_PST_Report usage_report(buffer); Unpacked_PST_Report usage_report(buffer);
EXPECT_EQ(usage_report.report_size(), EXPECT_EQ(usage_report.report_size(),
existing_license.session_usage_table_entry().size()); existing_license.session_usage_table_entry().size());
EXPECT_EQ(kInactiveUsed, usage_report.status()); EXPECT_EQ(license_used ? kInactiveUsed : kInactiveUnused,
usage_report.status());
EXPECT_EQ(id.provider_session_token().size(), EXPECT_EQ(id.provider_session_token().size(),
usage_report.pst_length()); usage_report.pst_length());
std::string pst(reinterpret_cast<char *>(usage_report.pst()), std::string pst(reinterpret_cast<char *>(usage_report.pst()),
@@ -595,10 +597,12 @@ class WvCdmExtendedDurationTest : public WvCdmTestBase {
EXPECT_NEAR(seconds_since_license_received, EXPECT_NEAR(seconds_since_license_received,
expected_seconds_since_license_received, kClockTolerance); expected_seconds_since_license_received, kClockTolerance);
EXPECT_NEAR(seconds_since_first_decrypt, if (license_used) {
expected_seconds_since_first_playback, kClockTolerance); EXPECT_NEAR(seconds_since_first_decrypt,
EXPECT_NEAR(seconds_since_last_decrypt, expected_seconds_since_first_playback, kClockTolerance);
expected_seconds_since_last_playback, kClockTolerance); EXPECT_NEAR(seconds_since_last_decrypt,
expected_seconds_since_last_playback, kClockTolerance);
}
EXPECT_EQ(::video_widevine::LicenseRequest_RequestType_RELEASE, EXPECT_EQ(::video_widevine::LicenseRequest_RequestType_RELEASE,
license_renewal.type()); license_renewal.type());
@@ -937,12 +941,15 @@ TEST_F(WvCdmExtendedDurationTest, DecryptionCloseSessionConcurrencyTest) {
switch (status) { switch (status) {
case SESSION_NOT_FOUND_FOR_DECRYPT: case SESSION_NOT_FOUND_FOR_DECRYPT:
case SESSION_NOT_FOUND_18:
// Session was closed before decrypt was called. This is expected
// occasionally as we are testing resilience to concurrency.
break; break;
case NO_ERROR: case NO_ERROR:
EXPECT_EQ((data + i)->decrypt_data, decrypt_buffer); EXPECT_EQ((data + i)->decrypt_data, decrypt_buffer);
break; break;
default: default:
EXPECT_TRUE(false); EXPECT_TRUE(false) << " Unexpected decrypt result: " << status;
} }
} }
} }
@@ -1115,7 +1122,7 @@ TEST_F(WvCdmExtendedDurationTest, AutomatedOfflineSessionReleaseOnOpenSession) {
sleep(kMinute + kClockTolerance); sleep(kMinute + kClockTolerance);
EXPECT_GT( EXPECT_EQ(
QueryStatus(kLevelDefault, wvcdm::QUERY_KEY_NUMBER_OF_OPEN_SESSIONS), QueryStatus(kLevelDefault, wvcdm::QUERY_KEY_NUMBER_OF_OPEN_SESSIONS),
initial_open_sessions); initial_open_sessions);
@@ -1297,7 +1304,7 @@ TEST_P(WvCdmStreamingPstTest, UsageTest) {
decryptor_.OpenSession(g_key_system, NULL, kDefaultCdmIdentifier, NULL, decryptor_.OpenSession(g_key_system, NULL, kDefaultCdmIdentifier, NULL,
&session_id_); &session_id_);
GenerateKeyRequest(kStreamingClip1PstInitData, kLicenseTypeStreaming); GenerateKeyRequest(kStreamingClip8PstInitData, kLicenseTypeStreaming);
VerifyKeyRequestResponse(g_license_server, g_client_auth, false); VerifyKeyRequestResponse(g_license_server, g_client_auth, false);
ValidateResponse(video_widevine::STREAMING, true); ValidateResponse(video_widevine::STREAMING, true);
@@ -1314,7 +1321,7 @@ TEST_P(WvCdmStreamingPstTest, UsageTest) {
for (size_t i = 0; i < GetParam(); ++i) { for (size_t i = 0; i < GetParam(); ++i) {
// Decrypt data // Decrypt data
SubSampleInfo* data = &kEncryptedStreamingClip1SubSample; SubSampleInfo* data = &kEncryptedStreamingClip8SubSample;
for (size_t i = 0; i < data->num_of_subsamples; i++) { for (size_t i = 0; i < data->num_of_subsamples; i++) {
std::vector<uint8_t> decrypt_buffer((data + i)->encrypt_data.size()); std::vector<uint8_t> decrypt_buffer((data + i)->encrypt_data.size());
CdmDecryptionParameters decryption_parameters( CdmDecryptionParameters decryption_parameters(
@@ -1363,7 +1370,7 @@ TEST_P(WvCdmStreamingUsageReportTest, UsageTest) {
decryptor_.OpenSession(g_key_system, NULL, kDefaultCdmIdentifier, NULL, decryptor_.OpenSession(g_key_system, NULL, kDefaultCdmIdentifier, NULL,
&session_id_); &session_id_);
GenerateKeyRequest(kStreamingClip1PstInitData, kLicenseTypeStreaming); GenerateKeyRequest(kStreamingClip8PstInitData, kLicenseTypeStreaming);
VerifyKeyRequestResponse(g_license_server, g_client_auth, false); VerifyKeyRequestResponse(g_license_server, g_client_auth, false);
ValidateResponse(video_widevine::STREAMING, true); ValidateResponse(video_widevine::STREAMING, true);
@@ -1380,7 +1387,7 @@ TEST_P(WvCdmStreamingUsageReportTest, UsageTest) {
for (size_t i = 0; i < GetParam(); ++i) { for (size_t i = 0; i < GetParam(); ++i) {
// Decrypt data // Decrypt data
SubSampleInfo* data = &kEncryptedStreamingClip1SubSample; SubSampleInfo* data = &kEncryptedStreamingClip8SubSample;
for (size_t i = 0; i < data->num_of_subsamples; i++) { for (size_t i = 0; i < data->num_of_subsamples; i++) {
std::vector<uint8_t> decrypt_buffer((data + i)->encrypt_data.size()); std::vector<uint8_t> decrypt_buffer((data + i)->encrypt_data.size());
CdmDecryptionParameters decryption_parameters( CdmDecryptionParameters decryption_parameters(
@@ -1426,6 +1433,7 @@ TEST_P(WvCdmStreamingUsageReportTest, UsageTest) {
while (usage_info.size() > 0) { while (usage_info.size() > 0) {
for (size_t i = 0; i < usage_info.size(); ++i) { for (size_t i = 0; i < usage_info.size(); ++i) {
ValidateReleaseRequest(usage_info[i], ValidateReleaseRequest(usage_info[i],
expected_seconds_since_initial_playback != 0,
expected_seconds_since_license_received, expected_seconds_since_license_received,
expected_seconds_since_initial_playback, expected_seconds_since_initial_playback,
expected_seconds_since_last_playback); expected_seconds_since_last_playback);
@@ -1556,7 +1564,8 @@ TEST_P(WvCdmOfflineUsageReportTest, UsageTest) {
session_id_.clear(); session_id_.clear();
key_set_id_.clear(); key_set_id_.clear();
GenerateKeyRelease(key_set_id); GenerateKeyRelease(key_set_id);
ValidateReleaseRequest(key_msg_, expected_seconds_since_license_received, ValidateReleaseRequest(key_msg_, expected_seconds_since_initial_playback != 0,
expected_seconds_since_license_received,
expected_seconds_since_initial_playback, expected_seconds_since_initial_playback,
expected_seconds_since_last_playback); expected_seconds_since_last_playback);
key_set_id_ = key_set_id; key_set_id_ = key_set_id;