Android CDM: Removed secure stop tests.
[ Merge of http://go/wvgerrit/158720 ] Support for secure stop licenses have been dropped. The MediaDRM APIs have already documented their deprecation. Before support can be removed from the plugin and CDM core implementation, the tests associated with them must be removed. This CL removes secure stop tests from the Android CDM integration test `request_license_test` and from the MediaDRM plugin test `libwvdrmdrmplugin_hal_test` and `libwvdrmdrmplugin_hidl_test`. Bug: 242289743 Test: libwvdrmdrmplugin_hal_test request_license_test Change-Id: Idb7ee53ab8115ce9b9a173eaf0a00f54325863a2
This commit is contained in:
@@ -984,68 +984,6 @@ TEST_F(WvCdmExtendedDurationTest, DecryptionCloseSessionConcurrencyTest) {
|
||||
decryptor_->CloseSession(session_id);
|
||||
}
|
||||
|
||||
// TODO(rfrias): Rewite this test when OEMCrypto v13 is the minimum version
|
||||
// supported. The limitation of 50 usage entries are no longer present
|
||||
// when using usage table header+entries.
|
||||
TEST_F(WvCdmExtendedDurationTest, DISABLED_UsageOverflowTest) {
|
||||
Provision();
|
||||
TestWvCdmClientPropertySet client_property_set;
|
||||
TestWvCdmClientPropertySet* property_set = nullptr;
|
||||
|
||||
CdmSecurityLevel security_level = GetDefaultSecurityLevel();
|
||||
FileSystem file_system;
|
||||
DeviceFiles handle(&file_system);
|
||||
EXPECT_TRUE(handle.Init(security_level));
|
||||
std::vector<std::string> provider_session_tokens;
|
||||
EXPECT_TRUE(handle.DeleteAllUsageInfoForApp(
|
||||
DeviceFiles::GetUsageInfoFileName(""), &provider_session_tokens));
|
||||
|
||||
for (size_t i = 0; i < kMaxUsageTableSize + 100; ++i) {
|
||||
decryptor_->OpenSession(config_.key_system(), property_set,
|
||||
kDefaultCdmIdentifier, nullptr, &session_id_);
|
||||
std::string key_id = wvutil::a2bs_hex(
|
||||
"000000427073736800000000" // blob size and pssh
|
||||
"EDEF8BA979D64ACEA3C827DCD51D21ED00000022" // Widevine system id
|
||||
"08011a0d7769646576696e655f74657374220f73" // pssh data
|
||||
"747265616d696e675f636c697035");
|
||||
|
||||
GenerateKeyRequest(key_id, kLicenseTypeStreaming);
|
||||
VerifyKeyRequestResponse(config_.license_server(), config_.client_auth(),
|
||||
false);
|
||||
decryptor_->CloseSession(session_id_);
|
||||
}
|
||||
|
||||
CdmUsageInfo usage_info;
|
||||
CdmUsageInfoReleaseMessage release_msg;
|
||||
CdmResponseType status =
|
||||
decryptor_->GetUsageInfo("", kDefaultCdmIdentifier, &usage_info);
|
||||
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
||||
int error_count = 0;
|
||||
while (usage_info.size() > 0) {
|
||||
for (size_t i = 0; i < usage_info.size(); ++i) {
|
||||
release_msg = GetUsageInfoResponse(config_.license_server(),
|
||||
config_.client_auth(), usage_info[i]);
|
||||
EXPECT_EQ(NO_ERROR,
|
||||
decryptor_->ReleaseUsageInfo(release_msg, kDefaultCdmIdentifier))
|
||||
<< i << "/" << usage_info.size() << " (err " << (error_count++) << ")"
|
||||
<< release_msg;
|
||||
}
|
||||
ASSERT_LE(error_count, 100); // Give up after 100 failures.
|
||||
status = decryptor_->GetUsageInfo("", kDefaultCdmIdentifier, &usage_info);
|
||||
switch (status) {
|
||||
case KEY_MESSAGE:
|
||||
EXPECT_FALSE(usage_info.empty());
|
||||
break;
|
||||
case NO_ERROR:
|
||||
EXPECT_TRUE(usage_info.empty());
|
||||
break;
|
||||
default:
|
||||
FAIL() << "GetUsageInfo failed with error " << static_cast<int>(status);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This test verifies that sessions allocated internally during key release
|
||||
// message generation are deallocated after their time to live period expires
|
||||
// by timer events (if other sessions are open).
|
||||
@@ -1342,215 +1280,6 @@ TEST_P(WvCdmStreamingNoPstTest, UsageTest) {
|
||||
INSTANTIATE_TEST_CASE_P(Cdm, WvCdmStreamingNoPstTest,
|
||||
::testing::Values(0, 1, 2));
|
||||
|
||||
class WvCdmStreamingPstTest : public WvCdmExtendedDurationTest,
|
||||
public ::testing::WithParamInterface<size_t> {};
|
||||
|
||||
TEST_P(WvCdmStreamingPstTest, UsageTest) {
|
||||
Unprovision();
|
||||
Provision();
|
||||
|
||||
decryptor_->OpenSession(config_.key_system(), nullptr, kDefaultCdmIdentifier,
|
||||
nullptr, &session_id_);
|
||||
GenerateKeyRequest(kStreamingClip8PstInitData, kLicenseTypeStreaming);
|
||||
VerifyKeyRequestResponse(config_.license_server(), config_.client_auth(),
|
||||
false);
|
||||
|
||||
ValidateResponse(video_widevine::STREAMING, true);
|
||||
|
||||
int64_t initial_license_duration_remaining = 0;
|
||||
int64_t initial_playback_duration_remaining = 0;
|
||||
QueryKeyStatus(true, false, &initial_license_duration_remaining,
|
||||
&initial_playback_duration_remaining);
|
||||
|
||||
sleep(kMinute);
|
||||
int64_t expected_seconds_since_license_received = kMinute;
|
||||
int64_t expected_seconds_since_initial_playback = 0;
|
||||
int64_t expected_seconds_since_last_playback = 0;
|
||||
|
||||
for (size_t i = 0; i < GetParam(); ++i) {
|
||||
// Decrypt data
|
||||
SubSampleInfo* data = &kEncryptedStreamingClip8SubSample;
|
||||
for (size_t i = 0; i < data->num_of_subsamples; i++) {
|
||||
std::vector<uint8_t> decrypt_buffer((data + i)->encrypt_data.size());
|
||||
CdmDecryptionParameters decryption_parameters(
|
||||
&(data + i)->key_id, &(data + i)->encrypt_data.front(),
|
||||
(data + i)->encrypt_data.size(), &(data + i)->iv,
|
||||
(data + i)->block_offset, &decrypt_buffer[0]);
|
||||
decryption_parameters.is_encrypted = (data + i)->is_encrypted;
|
||||
decryption_parameters.is_secure = (data + i)->is_secure;
|
||||
decryption_parameters.subsample_flags = (data + i)->subsample_flags;
|
||||
EXPECT_EQ(NO_ERROR,
|
||||
decryptor_->Decrypt(session_id_, (data + i)->validate_key_id,
|
||||
decryption_parameters));
|
||||
|
||||
EXPECT_EQ((data + i)->decrypt_data, decrypt_buffer);
|
||||
}
|
||||
|
||||
sleep(kMinute);
|
||||
expected_seconds_since_license_received += kMinute;
|
||||
expected_seconds_since_initial_playback += kMinute;
|
||||
expected_seconds_since_last_playback = kMinute;
|
||||
}
|
||||
|
||||
// Query and validate usage information
|
||||
int64_t license_duration_remaining = 0;
|
||||
int64_t playback_duration_remaining = 0;
|
||||
QueryKeyStatus(true, false, &license_duration_remaining,
|
||||
&playback_duration_remaining);
|
||||
|
||||
if (initial_license_duration_remaining == kUnlimitedDurationValue) {
|
||||
EXPECT_EQ(license_duration_remaining, kUnlimitedDurationValue);
|
||||
} else {
|
||||
EXPECT_NEAR(initial_license_duration_remaining - license_duration_remaining,
|
||||
expected_seconds_since_license_received, kClockTolerance)
|
||||
<< "initial_license_duration_remaining = "
|
||||
<< initial_license_duration_remaining
|
||||
<< ", license_duration_remaining = " << license_duration_remaining;
|
||||
}
|
||||
|
||||
if (initial_playback_duration_remaining == kUnlimitedDurationValue) {
|
||||
EXPECT_EQ(playback_duration_remaining, kUnlimitedDurationValue);
|
||||
} else {
|
||||
EXPECT_NEAR(initial_playback_duration_remaining - playback_duration_remaining,
|
||||
expected_seconds_since_initial_playback, kClockTolerance)
|
||||
<< "initial_playback_duration_remaining = "
|
||||
<< initial_playback_duration_remaining
|
||||
<< ", playback_duration_remaining = " << playback_duration_remaining;
|
||||
}
|
||||
|
||||
decryptor_->CloseSession(session_id_);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Cdm, WvCdmStreamingPstTest, ::testing::Values(0, 1, 2));
|
||||
|
||||
class WvCdmStreamingUsageReportTest
|
||||
: public WvCdmExtendedDurationTest,
|
||||
public ::testing::WithParamInterface<size_t> {};
|
||||
|
||||
TEST_P(WvCdmStreamingUsageReportTest, UsageTest) {
|
||||
Unprovision();
|
||||
Provision();
|
||||
|
||||
decryptor_->OpenSession(config_.key_system(), nullptr, kDefaultCdmIdentifier,
|
||||
nullptr, &session_id_);
|
||||
GenerateKeyRequest(kStreamingClip8PstInitData, kLicenseTypeStreaming);
|
||||
VerifyKeyRequestResponse(config_.license_server(), config_.client_auth(),
|
||||
false);
|
||||
|
||||
ValidateResponse(video_widevine::STREAMING, true);
|
||||
|
||||
int64_t initial_license_duration_remaining = 0;
|
||||
int64_t initial_playback_duration_remaining = 0;
|
||||
QueryKeyStatus(true, false, &initial_license_duration_remaining,
|
||||
&initial_playback_duration_remaining);
|
||||
|
||||
sleep(kMinute);
|
||||
int64_t expected_seconds_since_license_received = kMinute;
|
||||
int64_t expected_seconds_since_initial_playback = 0;
|
||||
int64_t expected_seconds_since_last_playback = 0;
|
||||
|
||||
for (size_t i = 0; i < GetParam(); ++i) {
|
||||
// Decrypt data
|
||||
SubSampleInfo* data = &kEncryptedStreamingClip8SubSample;
|
||||
for (size_t i = 0; i < data->num_of_subsamples; i++) {
|
||||
std::vector<uint8_t> decrypt_buffer((data + i)->encrypt_data.size());
|
||||
CdmDecryptionParameters decryption_parameters(
|
||||
&(data + i)->key_id, &(data + i)->encrypt_data.front(),
|
||||
(data + i)->encrypt_data.size(), &(data + i)->iv,
|
||||
(data + i)->block_offset, &decrypt_buffer[0]);
|
||||
decryption_parameters.is_encrypted = (data + i)->is_encrypted;
|
||||
decryption_parameters.is_secure = (data + i)->is_secure;
|
||||
decryption_parameters.subsample_flags = (data + i)->subsample_flags;
|
||||
EXPECT_EQ(NO_ERROR,
|
||||
decryptor_->Decrypt(session_id_, (data + i)->validate_key_id,
|
||||
decryption_parameters));
|
||||
|
||||
EXPECT_EQ((data + i)->decrypt_data, decrypt_buffer);
|
||||
}
|
||||
|
||||
sleep(kMinute);
|
||||
expected_seconds_since_license_received += kMinute;
|
||||
expected_seconds_since_initial_playback += kMinute;
|
||||
expected_seconds_since_last_playback = kMinute;
|
||||
}
|
||||
|
||||
// Query and validate usage information
|
||||
int64_t license_duration_remaining = 0;
|
||||
int64_t playback_duration_remaining = 0;
|
||||
QueryKeyStatus(true, false, &license_duration_remaining,
|
||||
&playback_duration_remaining);
|
||||
|
||||
// For unlimited "rental durations", the "license duration" will
|
||||
// effectively be unlimited. Remaining license duration in this
|
||||
// case is represented by |kUnlimitedDurationValue| and will not
|
||||
// change over time.
|
||||
if (initial_license_duration_remaining == kUnlimitedDurationValue) {
|
||||
EXPECT_EQ(license_duration_remaining, kUnlimitedDurationValue);
|
||||
} else {
|
||||
EXPECT_NEAR(initial_license_duration_remaining - license_duration_remaining,
|
||||
expected_seconds_since_license_received, kClockTolerance)
|
||||
<< "initial_license_duration_remaining = "
|
||||
<< initial_license_duration_remaining
|
||||
<< ", license_duration_remaining = " << license_duration_remaining;
|
||||
}
|
||||
|
||||
if (initial_playback_duration_remaining == kUnlimitedDurationValue) {
|
||||
EXPECT_EQ(playback_duration_remaining, kUnlimitedDurationValue);
|
||||
} else {
|
||||
EXPECT_NEAR(initial_playback_duration_remaining - playback_duration_remaining,
|
||||
expected_seconds_since_initial_playback, kClockTolerance)
|
||||
<< "initial_playback_duration_remaining = "
|
||||
<< initial_playback_duration_remaining
|
||||
<< ", playback_duration_remaining = " << playback_duration_remaining;
|
||||
}
|
||||
|
||||
decryptor_->CloseSession(session_id_);
|
||||
|
||||
// Create usage report and validate
|
||||
CdmUsageInfo usage_info;
|
||||
CdmUsageInfoReleaseMessage release_msg;
|
||||
CdmResponseType status =
|
||||
decryptor_->GetUsageInfo("", kDefaultCdmIdentifier, &usage_info);
|
||||
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
||||
int error_count = 0;
|
||||
while (usage_info.size() > 0) {
|
||||
for (size_t i = 0; i < usage_info.size(); ++i) {
|
||||
ValidateReleaseRequest(usage_info[i],
|
||||
expected_seconds_since_initial_playback != 0,
|
||||
expected_seconds_since_license_received,
|
||||
expected_seconds_since_initial_playback,
|
||||
expected_seconds_since_last_playback);
|
||||
release_msg = GetUsageInfoResponse(config_.license_server(),
|
||||
config_.client_auth(), usage_info[i]);
|
||||
EXPECT_EQ(NO_ERROR,
|
||||
decryptor_->ReleaseUsageInfo(release_msg, kDefaultCdmIdentifier))
|
||||
<< i << "/" << usage_info.size() << " (err " << (error_count++) << ")"
|
||||
<< release_msg;
|
||||
}
|
||||
ASSERT_LE(error_count, 100); // Give up after 100 failures.
|
||||
status = decryptor_->GetUsageInfo("", kDefaultCdmIdentifier, &usage_info);
|
||||
switch (status) {
|
||||
case KEY_MESSAGE:
|
||||
EXPECT_FALSE(usage_info.empty());
|
||||
break;
|
||||
case NO_ERROR:
|
||||
EXPECT_TRUE(usage_info.empty());
|
||||
break;
|
||||
default:
|
||||
FAIL() << "GetUsageInfo failed with error " << static_cast<int>(status);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Validate that update usage table entry is exercised.
|
||||
drm_metrics::WvCdmMetrics metrics;
|
||||
ASSERT_EQ(NO_ERROR, decryptor_->GetMetrics(kDefaultCdmIdentifier, &metrics));
|
||||
ValidateHasUpdateUsageEntry(metrics);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Cdm, WvCdmStreamingUsageReportTest,
|
||||
::testing::Values(0, 1, 2));
|
||||
|
||||
class WvCdmOfflineUsageReportTest
|
||||
: public WvCdmExtendedDurationTest,
|
||||
public ::testing::WithParamInterface<size_t> {};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user