Core CDM: Retrieving USAGE_INFO triggers clean-up.

[ Merge of http://go/wvgerrit/158722 ]

The CDM will delete all usage info / secure stop files on the device
when usage table entries labeled as USAGE_INFO are detected when
restoring the usage table.  DeviceFiles no longer transfers the
stored USAGE_INFO entry info into the run-time entry info vector for
the table.

This CL makes only minor changes to test data.  Significant updates
to both device file and usage table header unittests are required to
remove usage info / secure stop run-time resources.

Bug: 242289743
Test: run_x86_64_tests
Change-Id: I2d1fc0d6a4c994bc10bfce47818f101f95883979
This commit is contained in:
Alex Dale
2022-10-13 13:47:58 -07:00
parent b039f31b27
commit da9ba6c3ba
5 changed files with 128 additions and 67 deletions

View File

@@ -277,9 +277,14 @@ class DeviceFiles {
// When retrieving usage table information from the file system; any
// table that has yet to be updated for the LRU attributes will be
// indicated by |lru_upgrade|.
// Tables from earlier CDM releases might contain USAGE_INFO type
// entries. This entries are no long required, by their presence
// requires the usage table to be cleaned up. |has_usage_info_entries|
// is set to true if any are detected.
virtual bool RetrieveUsageTableInfo(
CdmUsageTableHeader* usage_table_header,
std::vector<CdmUsageEntryInfo>* usage_entry_info, bool* lru_upgrade);
std::vector<CdmUsageEntryInfo>* usage_entry_info, bool* lru_upgrade,
bool* has_usage_info_entries);
virtual bool DeleteUsageTableInfo();

View File

@@ -1678,11 +1678,13 @@ bool DeviceFiles::StoreUsageTableInfo(
bool DeviceFiles::RetrieveUsageTableInfo(
CdmUsageTableHeader* usage_table_header,
std::vector<CdmUsageEntryInfo>* usage_entry_info, bool* lru_upgrade) {
std::vector<CdmUsageEntryInfo>* usage_entry_info, bool* lru_upgrade,
bool* has_usage_info_entries) {
RETURN_FALSE_IF_UNINITIALIZED();
RETURN_FALSE_IF_NULL(usage_table_header);
RETURN_FALSE_IF_NULL(usage_entry_info);
RETURN_FALSE_IF_NULL(lru_upgrade);
RETURN_FALSE_IF_NULL(has_usage_info_entries);
video_widevine_client::sdk::File file;
if (RetrieveHashedFile(GetUsageTableFileName(), &file) != kNoError) {
@@ -1712,6 +1714,7 @@ bool DeviceFiles::RetrieveUsageTableInfo(
const UsageTableInfo& usage_table_info = file.usage_table_info();
*lru_upgrade = !usage_table_info.use_lru();
*has_usage_info_entries = false;
*usage_table_header = usage_table_info.usage_table_header();
usage_entry_info->resize(usage_table_info.usage_entry_info_size());
@@ -1727,10 +1730,8 @@ bool DeviceFiles::RetrieveUsageTableInfo(
info.offline_license_expiry_time();
break;
case UsageTableInfo_UsageEntryInfo_UsageEntryStorage_USAGE_INFO:
(*usage_entry_info)[i].storage_type = kStorageUsageInfo;
(*usage_entry_info)[i].usage_info_file_name =
info.usage_info_file_name();
(*usage_entry_info)[i].last_use_time = info.last_use_time();
(*usage_entry_info)[i].storage_type = kStorageTypeUnknown;
*has_usage_info_entries = true;
break;
case UsageTableInfo_UsageEntryInfo_UsageEntryStorage_UNKNOWN:
default:

View File

@@ -194,8 +194,10 @@ bool UsageTableHeader::Init(CdmSecurityLevel security_level,
bool UsageTableHeader::RestoreTable(CryptoSession* const crypto_session) {
bool run_lru_upgrade = false;
bool has_usage_info_entries = false;
if (!device_files_->RetrieveUsageTableInfo(
&usage_table_header_, &usage_entry_info_, &run_lru_upgrade)) {
&usage_table_header_, &usage_entry_info_, &run_lru_upgrade,
&has_usage_info_entries)) {
LOGW("Could not retrieve usage table");
return false;
}
@@ -210,6 +212,15 @@ bool UsageTableHeader::RestoreTable(CryptoSession* const crypto_session) {
return false;
}
// Remove all usage info entries from storage and clear their
// table meta data.
if (has_usage_info_entries) {
LOGI("Removing all usage info entries");
device_files_->DeleteAllUsageInfo();
// Store table to remove usage info entries from storage.
StoreTable();
}
// If the saved usage entries/meta data is missing LRU information,
// then the entries and their meta data must be updated.
if (run_lru_upgrade && !LruUpgradeAllUsageEntries()) {

View File

@@ -3713,8 +3713,7 @@ const UsageTableTestInfo kUsageTableInfoTestData[] = {
};
const CdmUsageEntryInfo kUsageEntriesWithoutLruData[] = {
{kStorageLicense, "ksid0", "", 0, 0},
{kStorageUsageInfo, "", "app_id_1", 0, 0}};
{kStorageLicense, "ksid0", "", 0, 0}, {kStorageTypeUnknown, "", "", 0, 0}};
const std::string kUsageTableWithoutLruData = a2bs_hex(
"0A1F080510013A191209080112056B73696430120C08021A086170705F69645F"
@@ -5815,13 +5814,21 @@ TEST_P(DeviceFilesUsageTableTest, Read) {
std::vector<CdmUsageEntryInfo> usage_entry_info;
CdmUsageTableHeader usage_table_header;
bool lru_upgrade;
bool has_usage_info_entries;
ASSERT_TRUE(device_files.RetrieveUsageTableInfo(
&usage_table_header, &usage_entry_info, &lru_upgrade));
&usage_table_header, &usage_entry_info, &lru_upgrade,
&has_usage_info_entries));
EXPECT_EQ(kUsageTableInfoTestData[index].usage_table_header,
usage_table_header);
EXPECT_EQ(index + 1u, usage_entry_info.size());
for (size_t i = 0; i <= index; ++i) {
// TODO(b/242289743): Update test data to exclude usage info files.
if (kUsageEntriesTestData[i].storage_type == kStorageUsageInfo) {
// Usage info entry types are no longer loaded.
EXPECT_EQ(usage_entry_info[i].storage_type, kStorageTypeUnknown);
continue;
}
EXPECT_EQ(kUsageEntriesTestData[i].storage_type,
usage_entry_info[i].storage_type);
EXPECT_EQ(kUsageEntriesTestData[i].key_set_id,
@@ -5863,8 +5870,10 @@ TEST_F(DeviceFilesUsageTableTest, ReadWithoutLruData) {
std::vector<CdmUsageEntryInfo> usage_entry_info;
CdmUsageTableHeader usage_table_header;
bool lru_upgrade;
bool has_usage_info_entries;
ASSERT_TRUE(device_files.RetrieveUsageTableInfo(
&usage_table_header, &usage_entry_info, &lru_upgrade));
&usage_table_header, &usage_entry_info, &lru_upgrade,
&has_usage_info_entries));
EXPECT_EQ(ArraySize(kUsageEntriesWithoutLruData), usage_entry_info.size());

View File

@@ -212,6 +212,12 @@ const std::vector<CdmUsageEntryInfo> k10UsageEntryInfoVector = {
kUsageEntryInfoOfflineLicense4, kUsageEntryInfoSecureStop4,
kUsageEntryInfoOfflineLicense5, kUsageEntryInfoSecureStop5,
};
const std::vector<CdmUsageEntryInfo> k5UsageEntryInfoVector = {
kUsageEntryInfoOfflineLicense1, kUsageEntryInfoOfflineLicense2,
kUsageEntryInfoOfflineLicense3, kUsageEntryInfoOfflineLicense4,
kUsageEntryInfoOfflineLicense5,
};
std::vector<CdmUsageEntryInfo> kOverFullUsageEntryInfoVector;
const CdmOfflineLicenseState kActiveLicenseState = kLicenseStateActive;
@@ -294,8 +300,6 @@ const int64_t kUpgradedUsageEntryInfo3ExpireTime =
const CdmUsageTableHeader kUpgradedUsageTableHeader = "Upgraded Table Header";
std::vector<CdmUsageEntryInfo> kUpgradedUsageEntryInfoList;
namespace {
void InitVectorConstants() {
kOverFullUsageEntryInfoVector.clear();
for (size_t i = 0; i < (kDefaultTableCapacity + 1); ++i) {
@@ -373,8 +377,6 @@ void ToVector(std::vector<CdmUsageEntryInfo>& vec, const CdmUsageEntryInfo* arr,
}
}
}; // namespace
class MockDeviceFiles : public DeviceFiles {
public:
MockDeviceFiles() : DeviceFiles(&file_system_) { Init(kSecurityLevelL1); }
@@ -392,7 +394,7 @@ class MockDeviceFiles : public DeviceFiles {
MOCK_METHOD(bool, RetrieveUsageTableInfo,
(CdmUsageTableHeader*, std::vector<CdmUsageEntryInfo>*,
bool* lru_upgrade),
bool* lru_upgrade, bool* has_usage_info_entries),
(override));
MOCK_METHOD(bool, StoreUsageTableInfo,
(const CdmUsageTableHeader&,
@@ -574,11 +576,12 @@ class UsageTableHeaderTest : public WvCdmTestBase {
const std::vector<CdmUsageEntryInfo>& usage_entry_info_vector) {
EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(_, NotNull()))
.WillOnce(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(usage_table_header),
SetArgPointee<1>(usage_entry_info_vector),
SetArgPointee<2>(false), Return(true)));
SetArgPointee<2>(false), SetArgPointee<3>(false),
Return(true)));
EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(_, usage_table_header))
.WillOnce(Return(NO_ERROR));
EXPECT_TRUE(usage_table_header_->Init(security_level, crypto_session_));
@@ -623,11 +626,12 @@ TEST_P(UsageTableHeaderInitializationTest, RestoreUsageTable_Success) {
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader),
SetArgPointee<1>(kUsageEntryInfoVector),
SetArgPointee<2>(false), Return(true)));
SetArgPointee<2>(false), SetArgPointee<3>(false),
Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(security_level, kUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -644,11 +648,12 @@ TEST_P(UsageTableHeaderInitializationTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader),
SetArgPointee<1>(kUsageEntryInfoVector),
SetArgPointee<2>(false), Return(true)));
SetArgPointee<2>(false), SetArgPointee<3>(false),
Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(security_level, kUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -678,8 +683,8 @@ TEST_P(UsageTableHeaderInitializationTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(Return(false));
// Expectations for create:
@@ -710,11 +715,12 @@ TEST_P(UsageTableHeaderInitializationTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader),
SetArgPointee<1>(kUsageEntryInfoVector),
SetArgPointee<2>(false), Return(true)));
SetArgPointee<2>(false), SetArgPointee<3>(false),
Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(security_level, kUsageTableHeader))
.WillOnce(Return(LOAD_USAGE_HEADER_GENERATION_SKEW));
@@ -745,8 +751,8 @@ TEST_P(UsageTableHeaderInitializationTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(Return(false));
// Expectations for create:
// 1) Create new header within OEMCrypto fails
@@ -769,8 +775,8 @@ TEST_P(UsageTableHeaderInitializationTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(Return(false));
// Expectations for create:
// 1) Create new header within OEMCrypto succeeds
@@ -797,11 +803,11 @@ TEST_P(UsageTableHeaderInitializationTest, RestoreUsageTable_AtCapacity) {
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader),
SetArgPointee<1>(usage_entries), SetArgPointee<2>(false),
Return(true)));
SetArgPointee<3>(false), Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(security_level, kUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -824,11 +830,11 @@ TEST_P(UsageTableHeaderInitializationTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader),
SetArgPointee<1>(usage_entries), SetArgPointee<2>(false),
Return(true)));
SetArgPointee<3>(false), Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(security_level, kUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -854,11 +860,12 @@ TEST_P(UsageTableHeaderInitializationTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader),
SetArgPointee<1>(kOverFullUsageEntryInfoVector),
SetArgPointee<2>(false), Return(true)));
SetArgPointee<2>(false), SetArgPointee<3>(false),
Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(security_level, kUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -911,11 +918,12 @@ TEST_P(UsageTableHeaderInitializationTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader),
SetArgPointee<1>(kOverFullUsageEntryInfoVector),
SetArgPointee<2>(false), Return(true)));
SetArgPointee<2>(false), SetArgPointee<3>(false),
Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(security_level, kUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -963,11 +971,12 @@ TEST_P(UsageTableHeaderInitializationTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(security_level, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader),
SetArgPointee<1>(kOverFullUsageEntryInfoVector),
SetArgPointee<2>(false), Return(true)));
SetArgPointee<2>(false), SetArgPointee<3>(false),
Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(security_level, kUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -1014,6 +1023,31 @@ TEST_P(UsageTableHeaderInitializationTest,
EXPECT_TRUE(usage_table_header_->Init(GetParam(), crypto_session_));
}
// If the stored usage table info contains entries of type USAGE_INFO,
// these entries will not be included in the store, however, the
// UsageTableHeader must delete the existing usage info files and
// store the table.
TEST_P(UsageTableHeaderInitializationTest, RestoreTableWithUsageInfo) {
EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(_, NotNull()))
.WillOnce(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(
SetArgPointee<0>(kUsageTableHeader),
SetArgPointee<1>(k5UsageEntryInfoVector), SetArgPointee<2>(false),
SetArgPointee<3>(/* has_usage_info_entries = */ true), Return(true)));
EXPECT_CALL(*device_files_, DeleteAllUsageInfo()).WillOnce(Return(true));
EXPECT_CALL(*device_files_,
StoreUsageTableInfo(kUsageTableHeader, k5UsageEntryInfoVector))
.WillOnce(Return(true));
EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(_, kUsageTableHeader))
.WillOnce(Return(NO_ERROR));
EXPECT_TRUE(usage_table_header_->Init(GetParam(), crypto_session_));
}
INSTANTIATE_TEST_SUITE_P(Cdm, UsageTableHeaderInitializationTest,
::testing::Values(kSecurityLevelL1, kSecurityLevelL3));
@@ -3578,11 +3612,12 @@ TEST_F(UsageTableHeaderTest, StaleHeader) {
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(kLevelDefault, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader),
SetArgPointee<1>(usage_entry_info_vector),
SetArgPointee<2>(false), Return(true)));
SetArgPointee<2>(false), SetArgPointee<3>(false),
Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(kLevelDefault, kUsageTableHeader))
.WillOnce(Return(LOAD_USAGE_HEADER_GENERATION_SKEW));
@@ -3681,12 +3716,12 @@ TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_NoAction) {
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(kLevelDefault, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUpgradableUsageTableHeader),
SetArgPointee<1>(kUpgradableUsageEntryInfoList),
SetArgPointee<2>(/* lru_upgrade = */ false),
Return(true)));
SetArgPointee<3>(false), Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(kLevelDefault, kUpgradableUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -3711,12 +3746,12 @@ TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_Succeed) {
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(kLevelDefault, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUpgradableUsageTableHeader),
SetArgPointee<1>(kUpgradableUsageEntryInfoList),
SetArgPointee<2>(/* lru_upgrade = */ true),
Return(true)));
SetArgPointee<3>(false), Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(kLevelDefault, kUpgradableUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -3780,12 +3815,12 @@ TEST_F(UsageTableHeaderTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(kLevelDefault, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUpgradableUsageTableHeader),
SetArgPointee<1>(upgradable_usage_entry_info_list),
SetArgPointee<2>(/* lru_upgrade = */ true),
Return(true)));
SetArgPointee<3>(false), Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(kLevelDefault, kUpgradableUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -3843,12 +3878,12 @@ TEST_F(UsageTableHeaderTest,
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(kLevelDefault, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUpgradableUsageTableHeader),
SetArgPointee<1>(kUpgradableUsageEntryInfoList),
SetArgPointee<2>(/* lru_upgrade = */ true),
Return(true)));
SetArgPointee<3>(false), Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(kLevelDefault, kUpgradableUsageTableHeader))
.WillOnce(Return(NO_ERROR));
@@ -3901,12 +3936,12 @@ TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_AllFailure) {
EXPECT_CALL(*crypto_session_,
GetNumberOfOpenSessions(kLevelDefault, NotNull()))
.WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR)));
EXPECT_CALL(*device_files_,
RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull()))
EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(),
NotNull(), NotNull()))
.WillOnce(DoAll(SetArgPointee<0>(kUpgradableUsageTableHeader),
SetArgPointee<1>(kUpgradableUsageEntryInfoList),
SetArgPointee<2>(/* lru_upgrade = */ true),
Return(true)));
SetArgPointee<3>(false), Return(true)));
EXPECT_CALL(*crypto_session_,
LoadUsageTableHeader(kLevelDefault, kUpgradableUsageTableHeader))
.WillOnce(Return(NO_ERROR));