From a9e26bdc2b0240ed93502693f0483f0f68eef501 Mon Sep 17 00:00:00 2001 From: Alex Dale Date: Fri, 25 Jun 2021 13:18:19 -0700 Subject: [PATCH] Updated integration test to handle unlimited license durations. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Merge of http://go/wvgerrit/128046 ] Test case WvCdmStreamingUsageReportTest.WvCdmStreamingUsageReportTest was failing comparing "license duration" values returned when querying for key information for licenses with unlimited "rental duration". This is due to the new license duration model used for V16 licenses. From the Widevine MediaDrm doc for "LicenseDurationRemaining": For OEMCrypto v16+ (Android 11 and later), license duration is no longer being enforced. If rental duration is set to never expire, ”9223372036854775807” (LLONG_MAX) will be returned. Similarly, the test has been updated for "playback duration" queries of the same case. Bug: 163542905 Test: cdm_extended_duration_test Change-Id: I57e0e435631a151fac45c963d865de256a773644 --- .../cdm/test/cdm_extended_duration_test.cpp | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp b/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp index e1ab605f..13764cc6 100644 --- a/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp +++ b/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp @@ -4,6 +4,8 @@ #include #include +#include + #include #include @@ -43,6 +45,8 @@ const uint32_t kClockTolerance = 10; const uint32_t kMaxUsageTableSize = 50; const std::string kEmptyServiceCertificate; +constexpr int64_t kUnlimitedDurationValue = LLONG_MAX; + // TODO(rfrias): refactor to print out the decryption test names struct SubSampleInfo { bool retrieve_key; @@ -1438,10 +1442,29 @@ TEST_P(WvCdmStreamingUsageReportTest, UsageTest) { QueryKeyStatus(true, false, &license_duration_remaining, &playback_duration_remaining); - EXPECT_NEAR(initial_license_duration_remaining - license_duration_remaining, - expected_seconds_since_license_received, kClockTolerance); - EXPECT_NEAR(initial_playback_duration_remaining - playback_duration_remaining, - expected_seconds_since_initial_playback, kClockTolerance); + // 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_);