diff --git a/sharing/certificates/nearby_share_certificate_manager_impl_test.cc b/sharing/certificates/nearby_share_certificate_manager_impl_test.cc index 544bc0df..bb826146 100644 --- a/sharing/certificates/nearby_share_certificate_manager_impl_test.cc +++ b/sharing/certificates/nearby_share_certificate_manager_impl_test.cc @@ -243,9 +243,11 @@ class NearbyShareCertificateManagerImplTest void VerifyCertificatesUpload(bool expected_force_update_contacts) { FakeNearbyIdentityClient* identity_client = GetIdentityClient(); - ASSERT_FALSE(identity_client->publish_device_requests().empty()); + std::vector publish_device_requests = + identity_client->publish_device_requests(); + ASSERT_FALSE(publish_device_requests.empty()); const PublishDeviceRequest& publish_device_request = - identity_client->publish_device_requests().back(); + publish_device_requests.back(); EXPECT_EQ(publish_device_request.device().name(), absl::StrCat("devices/", kDeviceId)); EXPECT_EQ(publish_device_request.device() diff --git a/sharing/internal/api/BUILD b/sharing/internal/api/BUILD index 7efa83c8..7e1f6eb2 100644 --- a/sharing/internal/api/BUILD +++ b/sharing/internal/api/BUILD @@ -39,6 +39,7 @@ cc_library( "//sharing:__subpackages__", ], deps = [ + "//google/nearby/identity/v1:binding_cc_proto", "//google/nearby/identity/v1:rpcs_cc_proto", "//internal/base:file_path", "//internal/platform:mac_address", @@ -75,6 +76,7 @@ cc_library( visibility = ["//visibility:public"], deps = [ ":platform", + "//google/nearby/identity/v1:binding_cc_proto", "//internal/base:file_path", "//internal/platform:mac_address", "//internal/platform:types", diff --git a/sharing/internal/api/fake_nearby_share_client.cc b/sharing/internal/api/fake_nearby_share_client.cc index 9ddc685b..61b7acd8 100644 --- a/sharing/internal/api/fake_nearby_share_client.cc +++ b/sharing/internal/api/fake_nearby_share_client.cc @@ -17,6 +17,7 @@ #include #include +#include "google/nearby/identity/v1/binding.pb.h" #include "absl/functional/any_invocable.h" #include "absl/status/status.h" #include "absl/status/statusor.h" @@ -36,12 +37,23 @@ using ::google::nearby::identity::v1::PublishDeviceRequest; using ::google::nearby::identity::v1::PublishDeviceResponse; using ::google::nearby::identity::v1::QuerySharedCredentialsRequest; using ::google::nearby::identity::v1::QuerySharedCredentialsResponse; +using ::google::nearby::identity::v1:: + QuerySharedCredentialsWithBindingIdsRequest; +using ::google::nearby::identity::v1:: + QuerySharedCredentialsWithBindingIdsResponse; +using ::google::nearby::identity::v1::InitiateBindingRequest; +using ::google::nearby::identity::v1::InitiateBindingResponse; +using ::google::nearby::identity::v1::JoinBindingRequest; +using ::google::nearby::identity::v1::JoinBindingResponse; +using ::google::nearby::identity::v1::DeleteBindingRequest; +using ::google::nearby::identity::v1::DeleteBindingResponse; void FakeNearbyShareClient::ListContactPeople( proto::ListContactPeopleRequest request, absl::AnyInvocable& response) &&> callback) { + absl::MutexLock lock(mutex_); list_contact_people_requests_.emplace_back(request); if (list_contact_people_responses_.empty()) { std::move(callback)(absl::NotFoundError("")); @@ -52,6 +64,57 @@ void FakeNearbyShareClient::ListContactPeople( std::move(callback)(response); } +void FakeNearbyShareClient::InitiateBinding( + InitiateBindingRequest request, + absl::AnyInvocable< + void(const absl::StatusOr& response) &&> + callback) { + absl::StatusOr response = absl::NotFoundError(""); + { + absl::MutexLock lock(mutex_); + initiate_binding_requests_.emplace_back(request); + if (!initiate_binding_responses_.empty()) { + response = initiate_binding_responses_[0]; + initiate_binding_responses_.erase(initiate_binding_responses_.begin()); + } + } + std::move(callback)(response); +} + +void FakeNearbyShareClient::JoinBinding( + JoinBindingRequest request, + absl::AnyInvocable< + void(const absl::StatusOr& response) &&> + callback) { + absl::StatusOr response = absl::NotFoundError(""); + { + absl::MutexLock lock(mutex_); + join_binding_requests_.emplace_back(request); + if (!join_binding_responses_.empty()) { + response = join_binding_responses_[0]; + join_binding_responses_.erase(join_binding_responses_.begin()); + } + } + std::move(callback)(response); +} + +void FakeNearbyShareClient::DeleteBinding( + DeleteBindingRequest request, + absl::AnyInvocable< + void(const absl::StatusOr& response) &&> + callback) { + absl::StatusOr response = absl::NotFoundError(""); + { + absl::MutexLock lock(mutex_); + delete_binding_requests_.emplace_back(request); + if (!delete_binding_responses_.empty()) { + response = delete_binding_responses_[0]; + delete_binding_responses_.erase(delete_binding_responses_.begin()); + } + } + std::move(callback)(response); +} + void FakeNearbyIdentityClient::QuerySharedCredentials( QuerySharedCredentialsRequest request, absl::AnyInvocable< @@ -102,6 +165,26 @@ void FakeNearbyIdentityClient::GetAccountInfo( std::move(callback)(response); } +void FakeNearbyIdentityClient::QuerySharedCredentialsWithBindingIds( + QuerySharedCredentialsWithBindingIdsRequest request, + absl::AnyInvocable< + void(const absl::StatusOr& + response) &&> + callback) { + absl::StatusOr response = + absl::NotFoundError(""); + { + absl::MutexLock lock(mutex_); + query_shared_credentials_with_binding_ids_requests_.emplace_back(request); + if (!query_shared_credentials_with_binding_ids_responses_.empty()) { + response = query_shared_credentials_with_binding_ids_responses_[0]; + query_shared_credentials_with_binding_ids_responses_.erase( + query_shared_credentials_with_binding_ids_responses_.begin()); + } + } + std::move(callback)(response); +} + std::unique_ptr FakeNearbyShareClientFactory::CreateInstance() { auto instance = std::make_unique(); diff --git a/sharing/internal/api/fake_nearby_share_client.h b/sharing/internal/api/fake_nearby_share_client.h index 8b570918..487bef0b 100644 --- a/sharing/internal/api/fake_nearby_share_client.h +++ b/sharing/internal/api/fake_nearby_share_client.h @@ -37,13 +37,15 @@ class FakeNearbyShareClient : public nearby::sharing::api::SharingRpcClient { FakeNearbyShareClient() = default; ~FakeNearbyShareClient() override = default; - std::vector& + std::vector list_contact_people_requests() { + absl::MutexLock lock(mutex_); return list_contact_people_requests_; } void SetListContactPeopleResponses( std::vector> responses) { + absl::MutexLock lock(mutex_); list_contact_people_responses_ = responses; } @@ -53,10 +55,89 @@ class FakeNearbyShareClient : public nearby::sharing::api::SharingRpcClient { const absl::StatusOr& response) &&> callback) override; + std::vector + initiate_binding_requests() { + absl::MutexLock lock(mutex_); + return initiate_binding_requests_; + } + + void SetInitiateBindingResponses( + std::vector> + responses) { + absl::MutexLock lock(mutex_); + initiate_binding_responses_ = responses; + } + + void InitiateBinding( + google::nearby::identity::v1::InitiateBindingRequest request, + absl::AnyInvocable< + void(const absl::StatusOr& response) &&> + callback) override; + + std::vector + join_binding_requests() { + absl::MutexLock lock(mutex_); + return join_binding_requests_; + } + + void SetJoinBindingResponses( + std::vector> + responses) { + absl::MutexLock lock(mutex_); + join_binding_responses_ = responses; + } + + void JoinBinding( + google::nearby::identity::v1::JoinBindingRequest request, + absl::AnyInvocable< + void(const absl::StatusOr& response) &&> + callback) override; + + std::vector + delete_binding_requests() { + absl::MutexLock lock(mutex_); + return delete_binding_requests_; + } + + void SetDeleteBindingResponses( + std::vector> + responses) { + absl::MutexLock lock(mutex_); + delete_binding_responses_ = responses; + } + + void DeleteBinding( + google::nearby::identity::v1::DeleteBindingRequest request, + absl::AnyInvocable< + void(const absl::StatusOr& response) &&> + callback) override; + + private: + absl::Mutex mutex_; std::vector - list_contact_people_requests_; + list_contact_people_requests_ ABSL_GUARDED_BY(mutex_); std::vector> - list_contact_people_responses_; + list_contact_people_responses_ ABSL_GUARDED_BY(mutex_); + std::vector + initiate_binding_requests_ ABSL_GUARDED_BY(mutex_); + std::vector< + absl::StatusOr> + initiate_binding_responses_ ABSL_GUARDED_BY(mutex_); + std::vector + join_binding_requests_ ABSL_GUARDED_BY(mutex_); + std::vector> + join_binding_responses_ ABSL_GUARDED_BY(mutex_); + std::vector + delete_binding_requests_ ABSL_GUARDED_BY(mutex_); + std::vector< + absl::StatusOr> + delete_binding_responses_ ABSL_GUARDED_BY(mutex_); }; // A fake implementation of the Nearby Identity RPC client that stores all @@ -67,13 +148,13 @@ class FakeNearbyIdentityClient FakeNearbyIdentityClient() = default; ~FakeNearbyIdentityClient() override = default; - std::vector& + std::vector publish_device_requests() ABSL_LOCKS_EXCLUDED(mutex_) { absl::MutexLock lock(mutex_); return publish_device_requests_; } - std::vector& + std::vector query_shared_credentials_requests() ABSL_LOCKS_EXCLUDED(mutex_) { absl::MutexLock lock(mutex_); return query_shared_credentials_requests_; @@ -110,7 +191,7 @@ class FakeNearbyIdentityClient query_shared_credentials_responses_ = responses; } - std::vector& + std::vector get_account_info_requests() ABSL_LOCKS_EXCLUDED(mutex_) { absl::MutexLock lock(mutex_); return get_account_info_requests_; @@ -130,6 +211,32 @@ class FakeNearbyIdentityClient get_account_info_response_ = response; } + std::vector + query_shared_credentials_with_binding_ids_requests() + ABSL_LOCKS_EXCLUDED(mutex_) { + absl::MutexLock lock(mutex_); + return query_shared_credentials_with_binding_ids_requests_; + } + + void QuerySharedCredentialsWithBindingIds( + google::nearby::identity::v1::QuerySharedCredentialsWithBindingIdsRequest + request, + absl::AnyInvocable< + void(const absl::StatusOr< + google::nearby::identity::v1:: + QuerySharedCredentialsWithBindingIdsResponse>& response) &&> + callback) ABSL_LOCKS_EXCLUDED(mutex_) override; + + void SetQuerySharedCredentialsWithBindingIdsResponse( + std::vector> + responses) ABSL_LOCKS_EXCLUDED(mutex_) { + absl::MutexLock lock(mutex_); + query_shared_credentials_with_binding_ids_responses_ = responses; + } + private: absl::Mutex mutex_; std::vector @@ -148,6 +255,15 @@ class FakeNearbyIdentityClient get_account_info_requests_ ABSL_GUARDED_BY(mutex_); absl::StatusOr get_account_info_response_ ABSL_GUARDED_BY(mutex_); + + std::vector< + google::nearby::identity::v1::QuerySharedCredentialsWithBindingIdsRequest> + query_shared_credentials_with_binding_ids_requests_ + ABSL_GUARDED_BY(mutex_); + std::vector> + query_shared_credentials_with_binding_ids_responses_ + ABSL_GUARDED_BY(mutex_); }; class FakeNearbyShareClientFactory diff --git a/sharing/internal/api/sharing_rpc_client.h b/sharing/internal/api/sharing_rpc_client.h index 374d50b3..7dcb91e6 100644 --- a/sharing/internal/api/sharing_rpc_client.h +++ b/sharing/internal/api/sharing_rpc_client.h @@ -17,6 +17,7 @@ #include +#include "google/nearby/identity/v1/binding.pb.h" #include "google/nearby/identity/v1/rpcs.pb.h" #include "absl/functional/any_invocable.h" #include "absl/status/statusor.h" @@ -53,6 +54,15 @@ class IdentityRpcClient { void(const absl::StatusOr& response) &&> callback) = 0; + + virtual void QuerySharedCredentialsWithBindingIds( + google::nearby::identity::v1::QuerySharedCredentialsWithBindingIdsRequest + request, + absl::AnyInvocable< + void(const absl::StatusOr< + google::nearby::identity::v1:: + QuerySharedCredentialsWithBindingIdsResponse>& response) &&> + callback) = 0; }; // SharingRpcClient is used to access Nearby Share backend APIs. @@ -67,6 +77,27 @@ class SharingRpcClient { absl::AnyInvocable& response) &&> callback) = 0; + + virtual void InitiateBinding( + google::nearby::identity::v1::InitiateBindingRequest request, + absl::AnyInvocable< + void(const absl::StatusOr& response) &&> + callback) = 0; + + virtual void JoinBinding( + google::nearby::identity::v1::JoinBindingRequest request, + absl::AnyInvocable< + void(const absl::StatusOr& response) &&> + callback) = 0; + + virtual void DeleteBinding( + google::nearby::identity::v1::DeleteBindingRequest request, + absl::AnyInvocable< + void(const absl::StatusOr& response) &&> + callback) = 0; }; // Interface for creating SharingRpcClient instances. Because each