// // // Copyright 2023 gRPC authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // #ifndef GRPC_TEST_CPP_INTEROP_PRE_STOP_HOOK_SERVER_H #define GRPC_TEST_CPP_INTEROP_PRE_STOP_HOOK_SERVER_H #include #include #include #include "src/core/lib/config/core_configuration.h" namespace grpc { namespace testing { // Implementation of the pre-stop hook server. An instance is created to start // a server and destroyed to stop one. class PreStopHookServer; // Interface for interacting with PreStopHookServer. Provides operations // required by the protocol, such as start, stop and return from the call. class PreStopHookServerManager { public: Status Start(int port, size_t timeout_s); Status Stop(); void Return(StatusCode code, absl::string_view description); // Suspends the thread until there are pending requests. Returns false // if the necessary number of requests have not been received before the // timeout. bool TestOnlyExpectRequests( size_t expected_requests_count, const absl::Duration& timeout = absl::Seconds(15)); private: // Custom deleter so we don't have to include PreStopHookServer in this header struct PreStopHookServerDeleter { void operator()(PreStopHookServer* server); }; std::unique_ptr server_; }; } // namespace testing } // namespace grpc #endif // GRPC_TEST_CPP_INTEROP_PRE_STOP_HOOK_SERVER_H