Use CredentialSelector for GenerateCredentials()

PiperOrigin-RevId: 501622339
This commit is contained in:
Anay Wadhera
2023-01-12 11:36:37 -08:00
committed by Copybara-Service
parent 4fc1583b94
commit 7667420e2b
4 changed files with 32 additions and 13 deletions
+1 -2
View File
@@ -45,8 +45,7 @@ class CredentialManager {
// storage.
virtual void GenerateCredentials(
const nearby::internal::DeviceMetadata& device_metadata,
absl::string_view manager_app_id,
const std::vector<nearby::internal::IdentityType>& identity_types,
const std::vector<CredentialSelector>& credential_selectors,
int credential_life_cycle_days, int contiguous_copy_of_credentials,
GenerateCredentialsCallback credentials_generated_cb) = 0;
@@ -55,14 +55,14 @@ constexpr absl::Duration kTimeout = absl::Seconds(3);
} // namespace
void CredentialManagerImpl::GenerateCredentials(
const DeviceMetadata& device_metadata, absl::string_view manager_app_id,
const std::vector<IdentityType>& identity_types,
const DeviceMetadata& device_metadata,
const std::vector<CredentialSelector>& credential_selectors,
int credential_life_cycle_days, int contiguous_copy_of_credentials,
GenerateCredentialsCallback credentials_generated_cb) {
std::vector<PublicCredential> public_credentials;
std::vector<PrivateCredential> private_credentials;
for (auto identity_type : identity_types) {
for (const auto& credential_selector : credential_selectors) {
// TODO(b/241587906): Get linux time from the platform (like Android)
uint64_t start_time_millis = 0;
const uint64_t gap_millis = credential_life_cycle_days * 24 * 3600 * 1000;
@@ -70,7 +70,8 @@ void CredentialManagerImpl::GenerateCredentials(
for (int index = 0; index < contiguous_copy_of_credentials; index++) {
auto public_private_credentials = CreatePrivateCredential(
device_metadata, identity_type, start_time_millis, end_time_millis);
device_metadata, credential_selector.identity_type, start_time_millis,
end_time_millis);
if (public_private_credentials.second.identity_type() !=
IdentityType::IDENTITY_TYPE_UNSPECIFIED) {
private_credentials.push_back(public_private_credentials.first);
@@ -82,8 +83,11 @@ void CredentialManagerImpl::GenerateCredentials(
}
// Create credential_storage object and invoke SaveCredentials.
// Assume that all credential selectors are for the same manager app and
// account name
credential_storage_ptr_->SaveCredentials(
manager_app_id, device_metadata.account_name(), private_credentials,
credential_selectors[0].manager_app_id,
credential_selectors[0].account_name, private_credentials,
public_credentials, PublicCredentialType::kLocalPublicCredential,
SaveCredentialsResultCallback{
.credentials_saved_cb =
@@ -53,8 +53,7 @@ class CredentialManagerImpl : public CredentialManager {
void GenerateCredentials(
const nearby::internal::DeviceMetadata& device_metadata,
absl::string_view manager_app_id,
const std::vector<nearby::internal::IdentityType>& identity_types,
const std::vector<CredentialSelector>& credential_selectors,
int credential_life_cycle_days, int contiguous_copy_of_credentials,
GenerateCredentialsCallback credentials_generated_cb) override;
@@ -61,6 +61,21 @@ CredentialSelector BuildDefaultCredentialSelector() {
return credential_selector;
}
std::vector<CredentialSelector> BuildCredentialSelectors(
absl::string_view manager_app_id,
std::vector<IdentityType>& identity_types) {
std::vector<CredentialSelector> selectors;
for (auto& identity_type : identity_types) {
CredentialSelector credential_selector{
.manager_app_id = std::string(manager_app_id),
.account_name = "test_account",
.identity_type = identity_type,
};
selectors.push_back(credential_selector);
}
return selectors;
}
class CredentialManagerImplTest : public ::testing::Test {
public:
class MockCredentialStorage : public nearby::CredentialStorageImpl {
@@ -171,7 +186,7 @@ TEST(CredentialManagerImpl, GenerateCredentialsSuccessfully) {
credential_manager.GenerateCredentials(
device_metadata,
/* manager_app_id= */ "TEST_MANAGER_APP", identityTypes, 1, 2,
BuildCredentialSelectors("TEST_MANAGER_APP", identityTypes), 1, 2,
std::move(credentials_generated_cb));
EXPECT_EQ(publicCredentials.size(), 2);
@@ -213,7 +228,7 @@ TEST(CredentialManagerImpl, GenerateCredentialsSuccessfullyButStoreFailed) {
credential_manager.GenerateCredentials(
device_metadata,
/* manager_app_id= */ "TEST_MANAGER_APP", identityTypes, 1, 2,
BuildCredentialSelectors("TEST_MANAGER_APP", identityTypes), 1, 2,
std::move(credentials_generated_cb));
EXPECT_TRUE(publicCredentials.empty());
}
@@ -323,7 +338,8 @@ TEST(CredentialManagerImpl, GetCredentialsSuccessfully) {
CredentialManagerImpl credential_manager;
std::vector<IdentityType> identity_types{IDENTITY_TYPE_PRIVATE};
credential_manager.GenerateCredentials(
device_metadata, "TEST_MANAGER_APP", identity_types, 1, 1,
device_metadata,
BuildCredentialSelectors("TEST_MANAGER_APP", identity_types), 1, 1,
std::move(generate_credentials_callback));
EXPECT_EQ(publicCredentials.size(), 1);
@@ -373,7 +389,8 @@ TEST(CredentialManagerImpl, PublicCredentialsFailEncryption) {
std::vector<IdentityType> identity_types{IDENTITY_TYPE_PRIVATE};
credential_manager_ptr->GenerateCredentials(
device_metadata, "TEST_MANAGER_APP", identity_types, 1, 1,
device_metadata,
BuildCredentialSelectors("TEST_MANAGER_APP", identity_types), 1, 1,
std::move(generate_credentials_callback));
EXPECT_TRUE(publicCredentials.empty());
}