More Usage Table Tests
Merge from Widevine repo of http://go/wvgerrit/23865 This adds the following tests to the oemcrypto usage tables suite: Forbid shrinking the usage table over open sessions. Shrinking usage table must make it smaller, not larger. Forbid creation of new usage table while open sessions using old. Change-Id: Ia97a3f4d3ef53417c4f8c98f8ed6ef9ea06d7fad
This commit is contained in:
@@ -615,14 +615,24 @@ class OEMCryptoSessionTests : public OEMCryptoClientTest {
|
||||
}
|
||||
}
|
||||
|
||||
void CreateUsageTableHeader() {
|
||||
void CreateUsageTableHeader(bool expect_success = true) {
|
||||
size_t header_buffer_length = 0;
|
||||
ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER,
|
||||
OEMCrypto_CreateUsageTableHeader(NULL, &header_buffer_length));
|
||||
OEMCryptoResult sts =
|
||||
OEMCrypto_CreateUsageTableHeader(NULL, &header_buffer_length);
|
||||
if (expect_success) {
|
||||
ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts);
|
||||
} else {
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
if (sts != OEMCrypto_ERROR_SHORT_BUFFER) return;
|
||||
}
|
||||
encrypted_usage_header_.resize(header_buffer_length);
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS,
|
||||
OEMCrypto_CreateUsageTableHeader(&encrypted_usage_header_[0],
|
||||
&header_buffer_length));
|
||||
sts = OEMCrypto_CreateUsageTableHeader(&encrypted_usage_header_[0],
|
||||
&header_buffer_length);
|
||||
if (expect_success) {
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
|
||||
} else {
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
}
|
||||
|
||||
void EnsureTestKeys() {
|
||||
@@ -4514,7 +4524,7 @@ TEST_F(UsageTableTest, OnlineMissingEntry) {
|
||||
ASSERT_NO_FATAL_FAILURE(s.close());
|
||||
}
|
||||
|
||||
TEST_F(UsageTableTest, TWoHundredEntries) {
|
||||
TEST_F(UsageTableTest, TwoHundredEntries) {
|
||||
Session s1;
|
||||
ASSERT_NO_FATAL_FAILURE(s1.open());
|
||||
ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1));
|
||||
@@ -5065,16 +5075,26 @@ class UsageTableDefragTest : public UsageTableTest {
|
||||
ASSERT_NO_FATAL_FAILURE(s->close());
|
||||
}
|
||||
|
||||
void ShrinkHeader(uint32_t new_size) {
|
||||
void ShrinkHeader(uint32_t new_size, bool expect_success = true) {
|
||||
size_t header_buffer_length = 0;
|
||||
ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER,
|
||||
OEMCrypto_ShrinkUsageTableHeader(new_size, NULL,
|
||||
&header_buffer_length));
|
||||
OEMCryptoResult sts =
|
||||
OEMCrypto_ShrinkUsageTableHeader(new_size, NULL, &header_buffer_length);
|
||||
if (expect_success) {
|
||||
ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts);
|
||||
} else {
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
if (sts != OEMCrypto_ERROR_SHORT_BUFFER) return;
|
||||
}
|
||||
ASSERT_LT(0u, header_buffer_length);
|
||||
encrypted_usage_header_.resize(header_buffer_length);
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_ShrinkUsageTableHeader(
|
||||
new_size, &encrypted_usage_header_[0],
|
||||
&header_buffer_length));
|
||||
sts = OEMCrypto_ShrinkUsageTableHeader(
|
||||
new_size, &encrypted_usage_header_[0],
|
||||
&header_buffer_length);
|
||||
if (expect_success) {
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
|
||||
} else {
|
||||
ASSERT_NE(OEMCrypto_SUCCESS, sts);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -5125,6 +5145,40 @@ TEST_F(UsageTableDefragTest, MoveUsageEntriesToOpenSession) {
|
||||
OEMCrypto_ERROR_INVALID_SESSION));
|
||||
}
|
||||
|
||||
TEST_F(UsageTableDefragTest, ShrinkOverOpenSessions) {
|
||||
Session s0;
|
||||
Session s1;
|
||||
LoadFirstLicense(&s0, 0);
|
||||
LoadFirstLicense(&s1, 1);
|
||||
s0.open();
|
||||
ASSERT_NO_FATAL_FAILURE(s0.ReloadUsageEntry());
|
||||
s1.open();
|
||||
ASSERT_NO_FATAL_FAILURE(s1.ReloadUsageEntry());
|
||||
// Since s0 and s1 are open, we can't shrink.
|
||||
ASSERT_NO_FATAL_FAILURE(ShrinkHeader(1, /* expect_success */ false));
|
||||
s1.close(); // Can shrink after closing s1, even if s0 is open.
|
||||
ASSERT_NO_FATAL_FAILURE(ShrinkHeader(1, /* expect_success */ true));
|
||||
}
|
||||
|
||||
TEST_F(UsageTableDefragTest, EnlargeHeader) {
|
||||
Session s0;
|
||||
Session s1;
|
||||
LoadFirstLicense(&s0, 0);
|
||||
LoadFirstLicense(&s1, 1);
|
||||
// Can only shrink the header -- not make it bigger.
|
||||
ASSERT_NO_FATAL_FAILURE(ShrinkHeader(4, /* expect_success */ false));
|
||||
}
|
||||
|
||||
TEST_F(UsageTableDefragTest, CreateNewHeaderWhileUsingOldOne) {
|
||||
Session s0;
|
||||
Session s1;
|
||||
LoadFirstLicense(&s0, 0);
|
||||
LoadFirstLicense(&s1, 1);
|
||||
s0.open();
|
||||
ASSERT_NO_FATAL_FAILURE(s0.ReloadUsageEntry());
|
||||
ASSERT_NO_FATAL_FAILURE(CreateUsageTableHeader(/* expect_success */ false));
|
||||
}
|
||||
|
||||
TEST_F(UsageTableDefragTest, ReloadUsageEntryWrongIndex) {
|
||||
Session s0;
|
||||
Session s1;
|
||||
|
||||
Reference in New Issue
Block a user