Merge "Address Cdm Extended Duration Test failures" into pi-dev am: aa536ec97f
am: 410f28186b
Change-Id: Iab78f1b96044629b73ee71278707dd4e5097fcab
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user