Merge pull request #13329 from dwittmer/dwittmer_runserver

Add support to RunServer for notifying clients via condition variable that the interop server has started.
pull/13083/head
Yang Gao 7 years ago committed by GitHub
commit 6a019e732a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      test/cpp/interop/interop_server.cc
  2. 20
      test/cpp/interop/server_helper.h

@ -317,9 +317,15 @@ class TestServiceImpl : public TestService::Service {
void grpc::testing::interop::RunServer( void grpc::testing::interop::RunServer(
std::shared_ptr<ServerCredentials> creds) { std::shared_ptr<ServerCredentials> creds) {
GPR_ASSERT(FLAGS_port != 0); RunServer(creds, FLAGS_port, nullptr);
}
void grpc::testing::interop::RunServer(
std::shared_ptr<ServerCredentials> creds, const int port,
ServerStartedCondition* server_started_condition) {
GPR_ASSERT(port != 0);
std::ostringstream server_address; std::ostringstream server_address;
server_address << "0.0.0.0:" << FLAGS_port; server_address << "0.0.0.0:" << port;
TestServiceImpl service; TestServiceImpl service;
SimpleRequest request; SimpleRequest request;
@ -333,6 +339,14 @@ void grpc::testing::interop::RunServer(
} }
std::unique_ptr<Server> server(builder.BuildAndStart()); std::unique_ptr<Server> server(builder.BuildAndStart());
gpr_log(GPR_INFO, "Server listening on %s", server_address.str().c_str()); gpr_log(GPR_INFO, "Server listening on %s", server_address.str().c_str());
// Signal that the server has started.
if (server_started_condition) {
std::unique_lock<std::mutex> lock(server_started_condition->mutex);
server_started_condition->server_started = true;
server_started_condition->condition.notify_all();
}
while (!gpr_atm_no_barrier_load(&g_got_sigint)) { while (!gpr_atm_no_barrier_load(&g_got_sigint)) {
gpr_sleep_until(gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), gpr_sleep_until(gpr_time_add(gpr_now(GPR_CLOCK_REALTIME),
gpr_time_from_seconds(5, GPR_TIMESPAN))); gpr_time_from_seconds(5, GPR_TIMESPAN)));

@ -19,6 +19,7 @@
#ifndef GRPC_TEST_CPP_INTEROP_SERVER_HELPER_H #ifndef GRPC_TEST_CPP_INTEROP_SERVER_HELPER_H
#define GRPC_TEST_CPP_INTEROP_SERVER_HELPER_H #define GRPC_TEST_CPP_INTEROP_SERVER_HELPER_H
#include <condition_variable>
#include <memory> #include <memory>
#include <grpc/compression.h> #include <grpc/compression.h>
@ -50,8 +51,27 @@ class InteropServerContextInspector {
namespace interop { namespace interop {
extern gpr_atm g_got_sigint; extern gpr_atm g_got_sigint;
struct ServerStartedCondition {
std::mutex mutex;
std::condition_variable condition;
bool server_started = false;
};
/// Run gRPC interop server using port FLAGS_port.
///
/// \param creds The credentials associated with the server.
void RunServer(std::shared_ptr<ServerCredentials> creds); void RunServer(std::shared_ptr<ServerCredentials> creds);
/// Run gRPC interop server.
///
/// \param creds The credentials associated with the server.
/// \param port Port to use for the server.
/// \param server_started_condition (optional) Struct holding mutex, condition
/// variable, and condition used to notify when the server has started.
void RunServer(std::shared_ptr<ServerCredentials> creds, int port,
ServerStartedCondition* server_started_condition);
} // namespace interop } // namespace interop
} // namespace testing } // namespace testing
} // namespace grpc } // namespace grpc

Loading…
Cancel
Save