From 65d52908aff81469c1d969278cc4bd3f03ac1f2c Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Thu, 4 May 2023 21:18:06 -0700 Subject: [PATCH] Expect failure on license load for expired LDL license Merge from Widevine repo of http://go/wvgerrit/170970 RenewOnLicenseLoad.Case2 tests are failing because they are expecting to load an expired license. However, the spec says that the license should return KEY_EXPIRED. The test is being updated. Some other RenewOnLicenseLoad tests were failing because they forgot to request the renewal. Bug: 278750980 Test: Run tests on Luci Change-Id: I7196db11fcf43859ba9310b87fd8ccb609e47039 --- libwvdrmengine/cdm/core/test/duration_use_case_test.cpp | 8 ++++++-- libwvdrmengine/cdm/core/test/license_holder.cpp | 7 +++++++ libwvdrmengine/cdm/core/test/license_holder.h | 3 +++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/libwvdrmengine/cdm/core/test/duration_use_case_test.cpp b/libwvdrmengine/cdm/core/test/duration_use_case_test.cpp index eb19cfe3..1f1df36b 100644 --- a/libwvdrmengine/cdm/core/test/duration_use_case_test.cpp +++ b/libwvdrmengine/cdm/core/test/duration_use_case_test.cpp @@ -1557,6 +1557,7 @@ TEST_P(CdmUseCase_RenewOnLicenseLoad, Case1S) { SleepUntil(start_of_playback_); LoadLicense(); SleepUntilRenewalNeeded(); + RequestRenewal(kRenewOnLicenseLoad); const uint64_t start = 15; // time of first decrypt const uint64_t load_renewal = 20; const uint64_t stop = 45; @@ -1569,6 +1570,7 @@ TEST_P(CdmUseCase_RenewOnLicenseLoad, Case1M) { SleepUntil(start_of_playback_); LoadLicense(); SleepUntilRenewalNeeded(); + RequestRenewal(kRenewOnLicenseLoad); const uint64_t start = 20; // time of first decrypt const uint64_t load_renewal = 20; const uint64_t stop = 45; // end of decrypt @@ -1591,8 +1593,9 @@ TEST_P(CdmUseCase_RenewOnLicenseLoad, Case1L) { // License loaded after rental duration window and playback should fail. TEST_P(CdmUseCase_RenewOnLicenseLoad, Case2) { - start_of_playback_ = EndOfRentalWindow() + 1; - ForbidPlayback(start_of_playback_); + start_of_playback_ = EndOfRentalWindow() + kFudge; + SleepUntil(start_of_playback_); + license_holder_.FailLoadLicense(); } // License loaded within rental duration window but renewal not received. @@ -1637,6 +1640,7 @@ TEST_P(CdmUseCase_RenewOnLicenseLoad, Case4) { SleepUntil(start_of_playback_); LoadLicense(); SleepUntilRenewalNeeded(); + RequestRenewal(kRenewOnLicenseLoad); const uint64_t start = 20; // time of first decrypt const uint64_t load_renewal = 20; const uint64_t stop = 45; // end of decrypt diff --git a/libwvdrmengine/cdm/core/test/license_holder.cpp b/libwvdrmengine/cdm/core/test/license_holder.cpp index d37b8e96..317dfdd6 100644 --- a/libwvdrmengine/cdm/core/test/license_holder.cpp +++ b/libwvdrmengine/cdm/core/test/license_holder.cpp @@ -55,6 +55,13 @@ void LicenseHolder::LoadLicense() { } } +void LicenseHolder::FailLoadLicense() { + CdmLicenseType license_type; + ASSERT_NE(KEY_ADDED, cdm_engine_->AddKey(session_id_, key_response_, + &license_type, &key_set_id_)) + << "Unexpected success loading license for " << content_id(); +} + void LicenseHolder::ReloadLicense() { CdmResponseType status = cdm_engine_->RestoreKey(session_id_, key_set_id_); ASSERT_EQ(KEY_ADDED, status) diff --git a/libwvdrmengine/cdm/core/test/license_holder.h b/libwvdrmengine/cdm/core/test/license_holder.h index 3e317f21..914e8d22 100644 --- a/libwvdrmengine/cdm/core/test/license_holder.h +++ b/libwvdrmengine/cdm/core/test/license_holder.h @@ -59,6 +59,9 @@ class LicenseHolder { // Load the license response into the CDM engine. A call to FetchLicense() // must be made first. void LoadLicense(); + // Attempt to load the license response into the CDM engine, but expect a + // failure. + void FailLoadLicense(); // Reload the license. Call OpenSession() before calling // ReloadLicense(). Also, the key_set_id must have been set previously. The // key_set_id is set by calling LoadLicense(), or by calling set_key_set_id().