|
|
|
|
@@ -434,14 +434,14 @@ class MockCryptoSession : public TestCryptoSession {
|
|
|
|
|
public:
|
|
|
|
|
MockCryptoSession(metrics::CryptoMetrics* metrics)
|
|
|
|
|
: TestCryptoSession(metrics) {}
|
|
|
|
|
MOCK_METHOD(CdmResponseType, Open, (wvcdm::RequestedSecurityLevel), (override));
|
|
|
|
|
MOCK_METHOD(CdmResponseType, Open, (SecurityLevel), (override));
|
|
|
|
|
// Usage Table Header.
|
|
|
|
|
MOCK_METHOD(CdmResponseType, CreateUsageTableHeader,
|
|
|
|
|
(wvcdm::RequestedSecurityLevel, CdmUsageTableHeader*), (override));
|
|
|
|
|
(SecurityLevel, CdmUsageTableHeader*), (override));
|
|
|
|
|
MOCK_METHOD(CdmResponseType, LoadUsageTableHeader,
|
|
|
|
|
(wvcdm::RequestedSecurityLevel, const CdmUsageTableHeader&), (override));
|
|
|
|
|
(SecurityLevel, const CdmUsageTableHeader&), (override));
|
|
|
|
|
MOCK_METHOD(CdmResponseType, ShrinkUsageTableHeader,
|
|
|
|
|
(wvcdm::RequestedSecurityLevel, uint32_t, CdmUsageTableHeader*), (override));
|
|
|
|
|
(SecurityLevel, uint32_t, CdmUsageTableHeader*), (override));
|
|
|
|
|
// Usage Entry.
|
|
|
|
|
MOCK_METHOD(CdmResponseType, CreateUsageEntry, (uint32_t*), (override));
|
|
|
|
|
MOCK_METHOD(CdmResponseType, LoadUsageEntry, (uint32_t, const CdmUsageEntry&),
|
|
|
|
|
@@ -450,11 +450,11 @@ class MockCryptoSession : public TestCryptoSession {
|
|
|
|
|
(CdmUsageTableHeader*, CdmUsageEntry*), (override));
|
|
|
|
|
MOCK_METHOD(CdmResponseType, MoveUsageEntry, (uint32_t), (override));
|
|
|
|
|
MOCK_METHOD(CdmResponseType, GetNumberOfOpenSessions,
|
|
|
|
|
(wvcdm::RequestedSecurityLevel, size_t*), (override));
|
|
|
|
|
(SecurityLevel, size_t*), (override));
|
|
|
|
|
|
|
|
|
|
// Fake method for testing. Having an EXPECT_CALL causes complexities
|
|
|
|
|
// for getting table capacity during initialization.
|
|
|
|
|
bool GetMaximumUsageTableEntries(RequestedSecurityLevel /*security_level*/,
|
|
|
|
|
bool GetMaximumUsageTableEntries(SecurityLevel /*security_level*/,
|
|
|
|
|
size_t* number_of_entries) override {
|
|
|
|
|
if (number_of_entries == nullptr || !maximum_usage_table_entries_set_)
|
|
|
|
|
return false;
|
|
|
|
|
@@ -609,13 +609,13 @@ class UsageTableHeaderInitializationTest
|
|
|
|
|
public:
|
|
|
|
|
static void SetUpTestCase() { InitVectorConstants(); }
|
|
|
|
|
|
|
|
|
|
RequestedSecurityLevel GetSecurityLevel() const {
|
|
|
|
|
SecurityLevel GetSecurityLevel() const {
|
|
|
|
|
return (GetParam() == kSecurityLevelL3) ? kLevel3 : kLevelDefault;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TEST_P(UsageTableHeaderInitializationTest, RestoreUsageTable_Success) {
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
EXPECT_CALL(*crypto_session_,
|
|
|
|
|
GetNumberOfOpenSessions(security_level, NotNull()))
|
|
|
|
|
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
|
|
|
|
|
@@ -634,7 +634,7 @@ TEST_P(UsageTableHeaderInitializationTest, RestoreUsageTable_Success) {
|
|
|
|
|
// to reinitialize the usage table should result in a failure.
|
|
|
|
|
TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
RestoreUsageTable_FailureDueToReInit) {
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
|
|
|
|
|
// First run, success.
|
|
|
|
|
EXPECT_CALL(*crypto_session_,
|
|
|
|
|
@@ -657,7 +657,7 @@ TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
// Table MUST not be initialized before another session has been opened.
|
|
|
|
|
TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
RestoreUsageTable_FailureDueToExistingSessions) {
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
EXPECT_CALL(*crypto_session_,
|
|
|
|
|
GetNumberOfOpenSessions(security_level, NotNull()))
|
|
|
|
|
.WillRepeatedly(DoAll(SetArgPointee<1>(1), Return(NO_ERROR)));
|
|
|
|
|
@@ -667,7 +667,7 @@ TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
// No existing usage table in storage, creating a new table succeeds.
|
|
|
|
|
TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
RestoreUsageTable_CreateNew_AfterRetrieveFails) {
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
|
|
|
|
|
// Expectations for restore:
|
|
|
|
|
// 1) Fail to retrieve existing table file
|
|
|
|
|
@@ -698,7 +698,7 @@ TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
// skew. Creating a new table succeeds.
|
|
|
|
|
TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
RestoreUsageTable_CreateNew_AfterLoadFails) {
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
|
|
|
|
|
// Expectations for restore:
|
|
|
|
|
// 1) Existing table file is retrieved
|
|
|
|
|
@@ -735,7 +735,7 @@ TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
// table fails for unknown reason. Initialization MUST fail.
|
|
|
|
|
TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
RestoreUsageTable_CreateNew_CreateFails) {
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
// Expectations for restore:
|
|
|
|
|
// 1) No table info file exists
|
|
|
|
|
EXPECT_CALL(*crypto_session_,
|
|
|
|
|
@@ -759,7 +759,7 @@ TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
// Initialization MUST fail.
|
|
|
|
|
TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
RestoreUsageTable_CreateNew_StoreFails) {
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
// Expectations for restore:
|
|
|
|
|
// 1) No table info file exists
|
|
|
|
|
EXPECT_CALL(*crypto_session_,
|
|
|
|
|
@@ -786,7 +786,7 @@ TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
TEST_P(UsageTableHeaderInitializationTest, RestoreUsageTable_AtCapacity) {
|
|
|
|
|
std::vector<CdmUsageEntryInfo> usage_entries = kOverFullUsageEntryInfoVector;
|
|
|
|
|
usage_entries.resize(kDefaultTableCapacity);
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
// Expectations for restore:
|
|
|
|
|
// 1) Existing table file is retrieved
|
|
|
|
|
// 2) Loading existing header within OEMCrypto succeeds
|
|
|
|
|
@@ -813,7 +813,7 @@ TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
std::vector<CdmUsageEntryInfo> usage_entries = kOverFullUsageEntryInfoVector;
|
|
|
|
|
constexpr size_t kHalfMinCapacity = kDefaultTableCapacity / 2;
|
|
|
|
|
usage_entries.resize(kHalfMinCapacity);
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
// Expectations for restore:
|
|
|
|
|
// 1) Existing table file is retrieved
|
|
|
|
|
// 2) Loading existing header within OEMCrypto succeeds
|
|
|
|
|
@@ -842,7 +842,7 @@ TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
ASSERT_LT(kDefaultTableCapacity, kOverFullUsageEntryInfoVector.size());
|
|
|
|
|
const uint32_t table_start_size =
|
|
|
|
|
static_cast<uint32_t>(kOverFullUsageEntryInfoVector.size());
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
|
|
|
|
|
// Expectations for restore:
|
|
|
|
|
// 1) Existing table file is retrieved
|
|
|
|
|
@@ -899,7 +899,7 @@ TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
RestoreUsageTable_AboveCapacity_AddEntryFails) {
|
|
|
|
|
ASSERT_LT(kDefaultTableCapacity, kOverFullUsageEntryInfoVector.size());
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
|
|
|
|
|
// Expectations for restore:
|
|
|
|
|
// 1) Existing table file is retrieved
|
|
|
|
|
@@ -951,7 +951,7 @@ TEST_P(UsageTableHeaderInitializationTest,
|
|
|
|
|
ASSERT_LT(kDefaultTableCapacity, kOverFullUsageEntryInfoVector.size());
|
|
|
|
|
const uint32_t table_start_size =
|
|
|
|
|
static_cast<uint32_t>(kOverFullUsageEntryInfoVector.size());
|
|
|
|
|
const RequestedSecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
const SecurityLevel security_level = GetSecurityLevel();
|
|
|
|
|
|
|
|
|
|
// Expectations for restore:
|
|
|
|
|
// 1) Existing table file is retrieved
|
|
|
|
|
|