21 #include "absl/memory/memory.h"
32 #include "src/proto/grpc/testing/echo.grpc.pb.h"
36 #ifdef GRPC_POSIX_SOCKET
38 #endif // GRPC_POSIX_SOCKET
40 #include <gtest/gtest.h>
42 #ifdef GRPC_POSIX_SOCKET
51 int maybe_assert_non_blocking_poll(
struct pollfd* pfds, nfds_t nfds,
55 if (g_is_nonblocking_poll) {
58 return poll(pfds, nfds,
timeout);
67 void*
tag(
int i) {
return reinterpret_cast<void*
>(
static_cast<intptr_t>(
i)); }
68 int detag(
void* p) {
return static_cast<int>(
reinterpret_cast<intptr_t>(
p)); }
74 void SetUp()
override {
79 BuildAndStartServer();
82 bool LoopForTag(
void**
tag,
bool*
ok) {
85 bool orig_val = g_is_nonblocking_poll;
86 g_is_nonblocking_poll =
true;
90 g_is_nonblocking_poll = orig_val;
93 g_is_nonblocking_poll = orig_val;
99 void TearDown()
override {
104 while (LoopForTag(&ignored_tag, &ignored_ok)) {
110 void BuildAndStartServer() {
115 absl::make_unique<grpc::testing::EchoTestService::AsyncService>();
124 stub_ = grpc::testing::EchoTestService::NewStub(
channel);
128 for (
int i = 0;
i < num_rpcs;
i++) {
130 EchoRequest recv_request;
131 EchoResponse send_response;
132 EchoResponse recv_response;
135 ClientContext cli_ctx;
136 ServerContext srv_ctx;
140 std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader(
143 response_reader->StartCall();
144 response_reader->Finish(&recv_response, &recv_status,
tag(4));
146 service_->RequestEcho(&srv_ctx, &recv_request, &response_writer,
156 send_response.set_message(recv_request.message());
163 tagsum +=
detag(got_tag);
164 tagprod *=
detag(got_tag);
168 tagsum +=
detag(got_tag);
169 tagprod *=
detag(got_tag);
173 EXPECT_EQ(send_response.message(), recv_response.message());
178 std::unique_ptr<ServerCompletionQueue>
cq_;
179 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub_;
180 std::unique_ptr<Server>
server_;
181 std::unique_ptr<grpc::testing::EchoTestService::AsyncService>
service_;
186 TEST_F(NonblockingTest, SimpleRpc) {
195 #endif // GRPC_POSIX_SOCKET
197 int main(
int argc,
char** argv) {
198 #ifdef GRPC_POSIX_SOCKET
208 g_is_nonblocking_poll =
false;
213 #else // GRPC_POSIX_SOCKET
217 #endif // GRPC_POSIX_SOCKET