Add more test coverage for credential manager

PiperOrigin-RevId: 547245712
This commit is contained in:
Hai Shang
2023-07-11 11:22:29 -07:00
committed by Copybara-Service
parent 001069faa1
commit 2420c083b8
@@ -55,6 +55,8 @@ using ::testing::status::StatusIs;
constexpr absl::string_view kManagerAppId = "TEST_MANAGER_APP";
constexpr absl::string_view kAccountName = "test account";
constexpr int kExpectedPresenceCredentialListSize = 6;
constexpr int kExpectedPresenceCredentialValidDays = 5;
Metadata CreateTestMetadata(absl::string_view account_name = kAccountName) {
Metadata metadata;
@@ -125,7 +127,7 @@ class CredentialManagerImplTest : public ::testing::Test {
credential_manager_.GenerateCredentials(
metadata, manager_app_id, {identity_type},
/*credential_life_cycle_days=*/1,
/*credential_life_cycle_days=*/kExpectedPresenceCredentialValidDays,
/*contigous_copy_of_credentials=*/1,
{[](absl::StatusOr<std::vector<SharedCredential>> credentials) {
EXPECT_OK(credentials);
@@ -189,8 +191,6 @@ TEST_F(CredentialManagerImplTest, CreateOneCredentialSuccessfully) {
}
TEST_F(CredentialManagerImplTest, GenerateCredentialsSuccessfully) {
constexpr int kLifeCycleDays = 1;
constexpr int kNumCredentials = 5;
Metadata metadata = CreateTestMetadata();
absl::StatusOr<std::vector<SharedCredential>> public_credentials;
std::vector<IdentityType> identityTypes{IDENTITY_TYPE_PRIVATE};
@@ -198,15 +198,16 @@ TEST_F(CredentialManagerImplTest, GenerateCredentialsSuccessfully) {
absl::Time previous_end_time;
credential_manager_.GenerateCredentials(
metadata, kManagerAppId, identityTypes, kLifeCycleDays, kNumCredentials,
metadata, kManagerAppId, identityTypes,
kExpectedPresenceCredentialValidDays, kExpectedPresenceCredentialListSize,
{.credentials_generated_cb =
[&](absl::StatusOr<std::vector<SharedCredential>> credentials) {
public_credentials = std::move(credentials);
}});
EXPECT_OK(public_credentials);
EXPECT_EQ(public_credentials->size(), kNumCredentials);
for (int i = 0; i < kNumCredentials; i++) {
EXPECT_EQ(public_credentials->size(), kExpectedPresenceCredentialListSize);
for (int i = 0; i < kExpectedPresenceCredentialListSize; i++) {
SharedCredential& public_credential = public_credentials->at(i);
EXPECT_EQ(public_credential.identity_type(), IDENTITY_TYPE_PRIVATE);
EXPECT_FALSE(public_credential.secret_id().empty());
@@ -219,7 +220,8 @@ TEST_F(CredentialManagerImplTest, GenerateCredentialsSuccessfully) {
EXPECT_GE(previous_end_time, start_time_millis);
EXPECT_GT(end_time_millis, previous_end_time);
}
EXPECT_LT(start_time_millis + absl::Hours(24) * kLifeCycleDays,
EXPECT_LT(start_time_millis +
absl::Hours(24) * kExpectedPresenceCredentialValidDays,
end_time_millis);
EXPECT_FALSE(public_credential.encrypted_metadata_bytes_v0().empty());
previous_start_time = start_time_millis;
@@ -255,8 +257,8 @@ TEST_F(CredentialManagerImplTest,
Fence();
EXPECT_OK(public_credentials1);
EXPECT_OK(public_credentials2);
EXPECT_EQ(public_credentials1->size(), 6);
EXPECT_EQ(public_credentials2->size(), 6);
EXPECT_EQ(public_credentials1->size(), kExpectedPresenceCredentialListSize);
EXPECT_EQ(public_credentials2->size(), kExpectedPresenceCredentialListSize);
// Cleanup
credential_manager_.UnsubscribeFromPublicCredentials(id1);
credential_manager_.UnsubscribeFromPublicCredentials(id2);
@@ -283,7 +285,7 @@ TEST_F(CredentialManagerImplTest,
Fence();
ASSERT_OK(public_credentials);
EXPECT_EQ(public_credentials->size(), 6);
EXPECT_EQ(public_credentials->size(), kExpectedPresenceCredentialListSize);
// Cleanup
credential_manager_.UnsubscribeFromPublicCredentials(id);
Fence();
@@ -329,7 +331,8 @@ TEST_F(CredentialManagerImplTest,
std::vector<IdentityType> identityTypes{IDENTITY_TYPE_PRIVATE};
credential_manager_.GenerateCredentials(
metadata, kManagerAppId, identityTypes, 1, 2,
metadata, kManagerAppId, identityTypes,
kExpectedPresenceCredentialValidDays, kExpectedPresenceCredentialListSize,
{.credentials_generated_cb =
[&](absl::StatusOr<std::vector<SharedCredential>> credentials) {
public_credentials = std::move(credentials);
@@ -448,7 +451,8 @@ TEST_F(CredentialManagerImplTest, GetCredentialsSuccessfully) {
CredentialSelector credential_selector = BuildDefaultCredentialSelector();
credential_manager_.GenerateCredentials(
metadata, kManagerAppId, identity_types, 1, 1,
metadata, kManagerAppId, identity_types,
kExpectedPresenceCredentialValidDays, kExpectedPresenceCredentialListSize,
{.credentials_generated_cb =
[&](absl::StatusOr<std::vector<SharedCredential>> credentials) {
public_credentials = std::move(credentials);
@@ -461,7 +465,7 @@ TEST_F(CredentialManagerImplTest, GetCredentialsSuccessfully) {
}});
EXPECT_OK(public_credentials);
EXPECT_EQ(public_credentials->size(), 1);
EXPECT_EQ(public_credentials->size(), kExpectedPresenceCredentialListSize);
EXPECT_OK(private_credentials);
EXPECT_FALSE(private_credentials->empty());
}
@@ -480,7 +484,8 @@ TEST_F(CredentialManagerImplTest, PublicCredentialsFailEncryption) {
std::vector<IdentityType> identity_types{IDENTITY_TYPE_PRIVATE};
credential_manager_ptr->GenerateCredentials(
metadata, kManagerAppId, identity_types, 1, 1,
metadata, kManagerAppId, identity_types,
kExpectedPresenceCredentialValidDays, 1,
{.credentials_generated_cb =
[&](absl::StatusOr<std::vector<SharedCredential>> credentials) {
public_credentials = std::move(credentials);
@@ -490,7 +495,6 @@ TEST_F(CredentialManagerImplTest, PublicCredentialsFailEncryption) {
}
TEST_F(CredentialManagerImplTest, UpdateLocalCredential) {
constexpr int kNumCredentials = 6;
constexpr int kSelectedCredentialId = 2;
constexpr uint16_t kSalt = 1000;
absl::Status update_status = absl::UnknownError("");
@@ -503,7 +507,8 @@ TEST_F(CredentialManagerImplTest, UpdateLocalCredential) {
absl::StatusOr<std::vector<LocalCredential>> modified_private_credentials;
CredentialSelector credential_selector = BuildDefaultCredentialSelector();
credential_manager_.GenerateCredentials(
metadata, kManagerAppId, identity_types, 1, kNumCredentials,
metadata, kManagerAppId, identity_types,
kExpectedPresenceCredentialValidDays, kExpectedPresenceCredentialListSize,
{.credentials_generated_cb =
[&](absl::StatusOr<std::vector<nearby::internal::SharedCredential>>
credentials) {
@@ -517,7 +522,7 @@ TEST_F(CredentialManagerImplTest, UpdateLocalCredential) {
}});
ASSERT_OK(public_credentials);
ASSERT_OK(private_credentials);
EXPECT_EQ(private_credentials->size(), kNumCredentials);
EXPECT_EQ(private_credentials->size(), kExpectedPresenceCredentialListSize);
// Modify a private credential
LocalCredential& credential = private_credentials->at(kSelectedCredentialId);
@@ -574,7 +579,6 @@ TEST_F(CredentialManagerImplTest, ParseAndroidSharedCredential) {
EXPECT_THAT(metadata, EqualsProto(expected_metadata));
}
// TODO (b/289580088) verify expired cres pruned.
TEST_F(CredentialManagerImplTest, RefillCredentailInGetLocalCredentials) {
Metadata metadata = CreateTestMetadata();
absl::StatusOr<std::vector<SharedCredential>> public_credentials;
@@ -583,7 +587,8 @@ TEST_F(CredentialManagerImplTest, RefillCredentailInGetLocalCredentials) {
CredentialSelector credential_selector = BuildDefaultCredentialSelector();
credential_manager_.GenerateCredentials(
metadata, kManagerAppId, identity_types, 1, 1,
metadata, kManagerAppId, identity_types,
kExpectedPresenceCredentialValidDays, 1,
{.credentials_generated_cb =
[&](absl::StatusOr<std::vector<SharedCredential>> credentials) {
public_credentials = std::move(credentials);
@@ -592,7 +597,8 @@ TEST_F(CredentialManagerImplTest, RefillCredentailInGetLocalCredentials) {
EXPECT_OK(public_credentials);
EXPECT_EQ(public_credentials->size(), 1);
// only generate 1 creds, expecting GetLocal would trigger refill to 6.
// only generate 1 creds, expecting GetLocal would trigger refill to
// kExpectedPresenceCredentialListSize.
credential_manager_.GetLocalCredentials(
credential_selector,
{.credentials_fetched_cb =
@@ -601,7 +607,7 @@ TEST_F(CredentialManagerImplTest, RefillCredentailInGetLocalCredentials) {
}});
EXPECT_OK(private_credentials);
EXPECT_EQ(private_credentials->size(), 6);
EXPECT_EQ(private_credentials->size(), kExpectedPresenceCredentialListSize);
}
TEST_F(CredentialManagerImplTest, RefillCredentailInGetSharedCredentials) {
@@ -612,7 +618,8 @@ TEST_F(CredentialManagerImplTest, RefillCredentailInGetSharedCredentials) {
CredentialSelector credential_selector = BuildDefaultCredentialSelector();
credential_manager_.GenerateCredentials(
metadata, kManagerAppId, identity_types, 1, 1,
metadata, kManagerAppId, identity_types,
kExpectedPresenceCredentialValidDays, 1,
{.credentials_generated_cb =
[&](absl::StatusOr<std::vector<SharedCredential>> credentials) {
public_credentials = std::move(credentials);
@@ -622,7 +629,8 @@ TEST_F(CredentialManagerImplTest, RefillCredentailInGetSharedCredentials) {
EXPECT_EQ(public_credentials->size(), 1);
// Only generated 1 creds, expecting GetPublicCredentials for
// kLocalPublicCredential type would trigger refill to 6.
// kLocalPublicCredential type would trigger refill to
// kExpectedPresenceCredentialListSize.
credential_manager_.GetPublicCredentials(
credential_selector, PublicCredentialType::kLocalPublicCredential,
{.credentials_fetched_cb =
@@ -631,7 +639,81 @@ TEST_F(CredentialManagerImplTest, RefillCredentailInGetSharedCredentials) {
}});
EXPECT_OK(refilled_public_credentials);
EXPECT_EQ(refilled_public_credentials->size(), 6);
EXPECT_EQ(refilled_public_credentials->size(),
kExpectedPresenceCredentialListSize);
}
TEST_F(CredentialManagerImplTest, RefillExpiredCredsInGetLocal) {
Metadata metadata = CreateTestMetadata();
absl::StatusOr<std::vector<SharedCredential>> public_credentials;
std::vector<IdentityType> identity_types{IDENTITY_TYPE_PRIVATE};
absl::StatusOr<std::vector<LocalCredential>> private_credentials;
CredentialSelector credential_selector = BuildDefaultCredentialSelector();
credential_manager_.GenerateCredentials(
metadata, kManagerAppId, identity_types,
kExpectedPresenceCredentialValidDays, kExpectedPresenceCredentialListSize,
{.credentials_generated_cb =
[&](absl::StatusOr<std::vector<SharedCredential>> credentials) {
public_credentials = std::move(credentials);
}});
ASSERT_OK(public_credentials);
EXPECT_EQ(public_credentials->size(), kExpectedPresenceCredentialListSize);
// Now generated kExpectedPresenceCredentialListSize valid creds, read out the
// local creds list, then manually update the first credential's end time to
// make it expired.
credential_manager_.GetLocalCredentials(
credential_selector,
{.credentials_fetched_cb =
[&](absl::StatusOr<std::vector<LocalCredential>> credentials) {
private_credentials = std::move(credentials);
}});
ASSERT_OK(private_credentials);
EXPECT_EQ(private_credentials->size(), kExpectedPresenceCredentialListSize);
LocalCredential expiring_local_credential = private_credentials->at(0);
expiring_local_credential.set_end_time_millis(
absl::ToUnixMillis(absl::Now() - absl::Hours(1)));
CountDownLatch update_local_cred_latch(1);
credential_manager_.UpdateLocalCredential(
credential_selector, expiring_local_credential,
{
.credentials_saved_cb =
[&](absl::Status status) {
if (status.ok()) {
update_local_cred_latch.CountDown();
}
},
});
EXPECT_TRUE(update_local_cred_latch.Await().Ok());
absl::StatusOr<std::vector<LocalCredential>> refilled_private_credentials;
credential_manager_.GetLocalCredentials(
credential_selector,
{.credentials_fetched_cb =
[&](absl::StatusOr<std::vector<LocalCredential>> credentials) {
refilled_private_credentials = std::move(credentials);
}});
EXPECT_OK(refilled_private_credentials);
EXPECT_EQ(refilled_private_credentials->size(),
kExpectedPresenceCredentialListSize);
// Verifying the expired one private_credentials->at(0) is pruned in the new
// list.
EXPECT_EQ(private_credentials->at(1).secret_id(),
refilled_private_credentials->at(0).secret_id());
// Verifying the new generated cred's start time is the same as previously
// exisiting list's last cred's end time.
EXPECT_EQ(
private_credentials->at(5).end_time_millis(),
refilled_private_credentials->at(kExpectedPresenceCredentialListSize - 1)
.start_time_millis());
}
} // namespace