1*14675a02SAndroid Build Coastguard Worker /* 2*14675a02SAndroid Build Coastguard Worker * Copyright 2021 Google LLC 3*14675a02SAndroid Build Coastguard Worker * 4*14675a02SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*14675a02SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*14675a02SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*14675a02SAndroid Build Coastguard Worker * 8*14675a02SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*14675a02SAndroid Build Coastguard Worker * 10*14675a02SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*14675a02SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*14675a02SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*14675a02SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*14675a02SAndroid Build Coastguard Worker * limitations under the License. 15*14675a02SAndroid Build Coastguard Worker */ 16*14675a02SAndroid Build Coastguard Worker 17*14675a02SAndroid Build Coastguard Worker #ifndef FCP_CLIENT_FAKE_SERVER_H_ 18*14675a02SAndroid Build Coastguard Worker #define FCP_CLIENT_FAKE_SERVER_H_ 19*14675a02SAndroid Build Coastguard Worker 20*14675a02SAndroid Build Coastguard Worker #include <cstddef> 21*14675a02SAndroid Build Coastguard Worker #include <string> 22*14675a02SAndroid Build Coastguard Worker #include <tuple> 23*14675a02SAndroid Build Coastguard Worker 24*14675a02SAndroid Build Coastguard Worker #include "grpcpp/impl/codegen/status.h" 25*14675a02SAndroid Build Coastguard Worker #include "absl/status/status.h" 26*14675a02SAndroid Build Coastguard Worker #include "absl/synchronization/notification.h" 27*14675a02SAndroid Build Coastguard Worker #include "fcp/base/monitoring.h" 28*14675a02SAndroid Build Coastguard Worker #include "fcp/client/grpc_bidi_stream.h" 29*14675a02SAndroid Build Coastguard Worker #include "fcp/protocol/grpc_chunked_bidi_stream.h" 30*14675a02SAndroid Build Coastguard Worker #include "fcp/protos/federated_api.grpc.pb.h" 31*14675a02SAndroid Build Coastguard Worker #include "fcp/protos/federated_api.pb.h" 32*14675a02SAndroid Build Coastguard Worker #include "grpcpp/impl/codegen/server_context.h" 33*14675a02SAndroid Build Coastguard Worker 34*14675a02SAndroid Build Coastguard Worker namespace fcp { 35*14675a02SAndroid Build Coastguard Worker namespace client { 36*14675a02SAndroid Build Coastguard Worker namespace test { 37*14675a02SAndroid Build Coastguard Worker 38*14675a02SAndroid Build Coastguard Worker class FakeServer 39*14675a02SAndroid Build Coastguard Worker : public google::internal::federatedml::v2::FederatedTrainingApi::Service { 40*14675a02SAndroid Build Coastguard Worker public: FakeServer()41*14675a02SAndroid Build Coastguard Worker FakeServer() 42*14675a02SAndroid Build Coastguard Worker : chunk_size_for_upload_(8192), 43*14675a02SAndroid Build Coastguard Worker max_pending_chunks_(2), 44*14675a02SAndroid Build Coastguard Worker compression_level_(google::internal::federatedml::v2::CompressionLevel:: 45*14675a02SAndroid Build Coastguard Worker ZLIB_BEST_COMPRESSION) {} FakeServer(int32_t chunk_size_for_upload,int32_t max_pending_chunks,google::internal::federatedml::v2::CompressionLevel compression_level)46*14675a02SAndroid Build Coastguard Worker FakeServer( 47*14675a02SAndroid Build Coastguard Worker int32_t chunk_size_for_upload, int32_t max_pending_chunks, 48*14675a02SAndroid Build Coastguard Worker google::internal::federatedml::v2::CompressionLevel compression_level) 49*14675a02SAndroid Build Coastguard Worker : chunk_size_for_upload_(chunk_size_for_upload), 50*14675a02SAndroid Build Coastguard Worker max_pending_chunks_(max_pending_chunks), 51*14675a02SAndroid Build Coastguard Worker compression_level_(compression_level) {} 52*14675a02SAndroid Build Coastguard Worker 53*14675a02SAndroid Build Coastguard Worker // FakeServer is neither copyable nor movable. 54*14675a02SAndroid Build Coastguard Worker FakeServer(const FakeServer&) = delete; 55*14675a02SAndroid Build Coastguard Worker FakeServer& operator=(const FakeServer&) = delete; 56*14675a02SAndroid Build Coastguard Worker 57*14675a02SAndroid Build Coastguard Worker grpc::Status Session( 58*14675a02SAndroid Build Coastguard Worker grpc::ServerContext* context, 59*14675a02SAndroid Build Coastguard Worker grpc::ServerReaderWriter< 60*14675a02SAndroid Build Coastguard Worker google::internal::federatedml::v2::ServerStreamMessage, 61*14675a02SAndroid Build Coastguard Worker google::internal::federatedml::v2::ClientStreamMessage>* stream) 62*14675a02SAndroid Build Coastguard Worker override; 63*14675a02SAndroid Build Coastguard Worker void WaitForSessionDone(); 64*14675a02SAndroid Build Coastguard Worker 65*14675a02SAndroid Build Coastguard Worker virtual absl::Status Handle( 66*14675a02SAndroid Build Coastguard Worker const google::internal::federatedml::v2::ClientStreamMessage& request, 67*14675a02SAndroid Build Coastguard Worker google::internal::federatedml::v2::ServerStreamMessage* first_reply, 68*14675a02SAndroid Build Coastguard Worker ::fcp::client::GrpcChunkedBidiStream< 69*14675a02SAndroid Build Coastguard Worker google::internal::federatedml::v2::ServerStreamMessage, 70*14675a02SAndroid Build Coastguard Worker google::internal::federatedml::v2::ClientStreamMessage>* stream); 71*14675a02SAndroid Build Coastguard Worker 72*14675a02SAndroid Build Coastguard Worker // Returns the client metadata from the most recent session call. 73*14675a02SAndroid Build Coastguard Worker std::multimap<std::string, std::string> GetClientMetadata() const; 74*14675a02SAndroid Build Coastguard Worker 75*14675a02SAndroid Build Coastguard Worker protected: 76*14675a02SAndroid Build Coastguard Worker int32_t chunk_size_for_upload_; 77*14675a02SAndroid Build Coastguard Worker int32_t max_pending_chunks_; 78*14675a02SAndroid Build Coastguard Worker google::internal::federatedml::v2::CompressionLevel compression_level_; 79*14675a02SAndroid Build Coastguard Worker absl::Notification session_done_; 80*14675a02SAndroid Build Coastguard Worker 81*14675a02SAndroid Build Coastguard Worker private: 82*14675a02SAndroid Build Coastguard Worker std::multimap<std::string, std::string> client_metadata_; 83*14675a02SAndroid Build Coastguard Worker }; 84*14675a02SAndroid Build Coastguard Worker 85*14675a02SAndroid Build Coastguard Worker } // namespace test 86*14675a02SAndroid Build Coastguard Worker } // namespace client 87*14675a02SAndroid Build Coastguard Worker } // namespace fcp 88*14675a02SAndroid Build Coastguard Worker 89*14675a02SAndroid Build Coastguard Worker #endif // FCP_CLIENT_FAKE_SERVER_H_ 90