|
|
|
|
@@ -4,6 +4,8 @@
|
|
|
|
|
|
|
|
|
|
#include <errno.h>
|
|
|
|
|
#include <getopt.h>
|
|
|
|
|
#include <limits.h>
|
|
|
|
|
|
|
|
|
|
#include <sstream>
|
|
|
|
|
|
|
|
|
|
#include <gmock/gmock.h>
|
|
|
|
|
@@ -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;
|
|
|
|
|
@@ -1304,10 +1308,25 @@ TEST_P(WvCdmStreamingNoPstTest, UsageTest) {
|
|
|
|
|
QueryKeyStatus(true, true, &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);
|
|
|
|
|
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_);
|
|
|
|
|
}
|
|
|
|
|
@@ -1371,10 +1390,25 @@ TEST_P(WvCdmStreamingPstTest, 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);
|
|
|
|
|
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_);
|
|
|
|
|
}
|
|
|
|
|
@@ -1438,10 +1472,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_);
|
|
|
|
|
|
|
|
|
|
@@ -1533,11 +1586,29 @@ TEST_P(WvCdmOfflineUsageReportTest, UsageTest) {
|
|
|
|
|
QueryKeyStatus(false, true, &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);
|
|
|
|
|
if (initial_license_duration_remaining == kUnlimitedDurationValue) {
|
|
|
|
|
EXPECT_EQ(license_duration_remaining, kUnlimitedDurationValue)
|
|
|
|
|
<< "i = " << i;
|
|
|
|
|
} 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
|
|
|
|
|
<< ", i = " << i;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (initial_playback_duration_remaining == kUnlimitedDurationValue) {
|
|
|
|
|
EXPECT_EQ(playback_duration_remaining, kUnlimitedDurationValue)
|
|
|
|
|
<< "i = " << i;
|
|
|
|
|
} 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
|
|
|
|
|
<< ", i = " << i;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Decrypt data
|
|
|
|
|
SubSampleInfo* data = &kEncryptedOfflineClip2SubSample;
|
|
|
|
|
@@ -1577,10 +1648,25 @@ TEST_P(WvCdmOfflineUsageReportTest, UsageTest) {
|
|
|
|
|
QueryKeyStatus(false, true, &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);
|
|
|
|
|
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_);
|
|
|
|
|
|
|
|
|
|
|