#include "components/trusted_vault/trusted_vault_connection_impl.h"
#include <memory>
#include <string>
#include <utility>
#include "base/base64url.h"
#include "base/memory/scoped_refptr.h"
#include "base/run_loop.h"
#include "base/strings/string_number_conversions.h"
#include "base/test/bind.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/mock_callback.h"
#include "base/test/task_environment.h"
#include "base/types/expected.h"
#include "components/signin/public/identity_manager/access_token_info.h"
#include "components/signin/public/identity_manager/account_info.h"
#include "components/trusted_vault/proto/vault.pb.h"
#include "components/trusted_vault/proto_string_bytes_conversion.h"
#include "components/trusted_vault/securebox.h"
#include "components/trusted_vault/test/fake_trusted_vault_access_token_fetcher.h"
#include "components/trusted_vault/trusted_vault_access_token_fetcher.h"
#include "components/trusted_vault/trusted_vault_connection.h"
#include "components/trusted_vault/trusted_vault_crypto.h"
#include "components/trusted_vault/trusted_vault_histograms.h"
#include "components/trusted_vault/trusted_vault_server_constants.h"
#include "services/network/public/cpp/url_loader_completion_status.h"
#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "services/network/test/test_url_loader_factory.h"
#include "services/network/test/test_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace trusted_vault {
namespace {
_;
Eq;
IsNull;
Ne;
NotNull;
SizeIs;
const char kAccessToken[] = …;
const char kEncodedPrivateKey[] = …;
std::unique_ptr<SecureBoxKeyPair> MakeTestKeyPair() { … }
trusted_vault_pb::SecurityDomain MakeSecurityDomainWithDegradedRecoverability(
SecurityDomainId security_domain_id,
bool recoverability_degraded) { … }
trusted_vault_pb::JoinSecurityDomainsResponse MakeJoinSecurityDomainsResponse(
SecurityDomainId security_domain_id,
int current_epoch) { … }
constexpr char kTestSerializedWrappedPIN[] = …;
constexpr char kTestMemberPublicKey[] = …;
constexpr int kTestKeyVersion = …;
constexpr int kTestGPMExpirySeconds = …;
constexpr int kTestLSKFExpirySeconds = …;
constexpr char kTestMemberProof[] = …;
constexpr char kTestWrappedKey[] = …;
enum class Member { … };
trusted_vault_pb::ListSecurityDomainMembersResponse MakeSecurityDomainMembers(
SecurityDomainId security_domain_id,
const std::vector<Member>& members,
std::optional<std::string> next_page_token) { … }
signin::AccessTokenInfo MakeAccessTokenInfo(const std::string& access_token) { … }
class TrustedVaultConnectionImplTest
: public testing::TestWithParam<SecurityDomainId> { … };
INSTANTIATE_TEST_SUITE_P(…);
TEST_P(TrustedVaultConnectionImplTest,
ShouldSendJoinSecurityDomainsRequestWithoutKeys) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldSendJoinSecurityDomainsRequestWithKeys) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldSendJoinSecurityDomainsRequestWithPrecomputedKeys) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldSendJoinSecurityDomainsRequestTypeHint) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldSendJoinSecurityDomainsRequestGpmPinMetadata) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldSendJoinSecurityDomainsRequestForLskf) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleSuccessfulJoinSecurityDomainsRequest) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldPopulateConstantKeyAndVersionWhenJoinSecurityDomain) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleJoinSecurityDomainsResponseWithConflictError) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleJoinSecurityDomainsRequestWithEmptyResponse) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleJoinSecurityDomainsRequestWithCorruptedResponse) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleFailedJoinSecurityDomainsRequestWithHttpError) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleFailedJoinSecurityDomainsRequestWithNetworkError) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleFailedJoinSecurityDomainsRequestWithNotFoundStatus) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleFailedJoinSecurityDomainsRequestWithBadRequestStatus) { … }
TEST_P(
TrustedVaultConnectionImplTest,
ShouldHandleAccessTokenFetchingFailureWhenRegisteringAuthenticationFactor) { … }
TEST_P(TrustedVaultConnectionImplTest, ShouldCancelJoinSecurityDomainsRequest) { … }
TEST_P(TrustedVaultConnectionImplTest, ShouldSendGetSecurityDomainsRequest) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleFailedGetSecurityDomainMemberRequest) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleAccessTokenFetchingFailureWhenDownloadingKeys) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldCancelGetSecurityDomainMemberRequest) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldSendGetSecurityDomainRequestWhenRetrievingRecoverability) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleValidResponseWhenRetrievingRecoverability) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleFailedRequestWhenRetrievingRecoverability) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldHandleCorruptedResponseWhenRetrievingRecoverability) { … }
TEST_P(TrustedVaultConnectionImplTest,
ShouldCancelRequestWhenRetrievingRecoverability) { … }
MATCHER_P(HasRecoveryState,
state,
"DownloadAuthenticationFactorsRegistrationStateResult::State") { … }
MATCHER_P2(
HasGpmPinMetadata,
public_key,
wrapped_pin,
"DownloadAuthenticationFactorsRegistrationStateResult::GpmPinMetadata") { … }
TEST_P(TrustedVaultConnectionImplTest,
DownloadAuthenticationFactorsRegistrationState_Basic) { … }
TEST_P(TrustedVaultConnectionImplTest,
DownloadAuthenticationFactorsRegistrationState_Cases) { … }
TEST_P(TrustedVaultConnectionImplTest,
DownloadAuthenticationFactorsRegistrationState_Error) { … }
TEST_P(TrustedVaultConnectionImplTest,
DownloadAuthenticationFactorsRegistrationState_InvalidResponse) { … }
}
}