19 #include <gmock/gmock.h>
20 #include <gtest/gtest.h>
22 #include "absl/memory/memory.h"
23 #include "absl/time/time.h"
38 class End2EndBinderTransportTest
41 End2EndBinderTransportTest() {
43 new end2end_testing::TransactionProcessor(GetParam());
44 service_ = absl::make_unique<grpc::testing::TestServiceImpl>();
50 ~End2EndBinderTransportTest()
override {
56 std::unique_ptr<grpc::testing::EchoTestService::Stub> NewStub() {
59 return grpc::testing::EchoTestService::NewStub(
channel);
62 static void SetUpTestSuite() {
grpc_init(); }
65 std::shared_ptr<grpc::Channel> BinderChannel(
71 std::unique_ptr<grpc::testing::TestServiceImpl>
service_;
80 TEST_P(End2EndBinderTransportTest, SetupTransport) {
82 std::tie(client_transport, server_transport) =
91 TEST_P(End2EndBinderTransportTest, UnaryCall) {
92 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
94 grpc::testing::EchoRequest
request;
95 grpc::testing::EchoResponse
response;
96 request.set_message(
"UnaryCall");
102 TEST_P(End2EndBinderTransportTest, UnaryCallWithNonOkStatus) {
103 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
105 grpc::testing::EchoRequest
request;
106 grpc::testing::EchoResponse
response;
107 request.set_message(
"UnaryCallWithNonOkStatus");
108 request.mutable_param()->mutable_expected_error()->set_code(
110 request.mutable_param()->mutable_expected_error()->set_error_message(
121 TEST_P(End2EndBinderTransportTest, UnaryCallServerTimeout) {
122 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
125 grpc::testing::EchoRequest
request;
126 grpc::testing::EchoResponse
response;
127 request.set_message(
"UnaryCallServerTimeout");
129 request.mutable_param()->set_server_sleep_us(2000000);
131 request.mutable_param()->set_skip_cancelled_check(
true);
137 TEST_P(End2EndBinderTransportTest, UnaryCallClientTimeout) {
138 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
147 grpc::testing::EchoRequest
request;
148 grpc::testing::EchoResponse
response;
149 request.set_message(
"UnaryCallClientTimeout");
155 TEST_P(End2EndBinderTransportTest, UnaryCallUnimplemented) {
156 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
159 grpc::testing::EchoRequest
request;
160 grpc::testing::EchoResponse
response;
161 request.set_message(
"UnaryCallUnimplemented");
167 TEST_P(End2EndBinderTransportTest, UnaryCallClientCancel) {
168 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
171 grpc::testing::EchoRequest
request;
172 grpc::testing::EchoResponse
response;
173 request.set_message(
"UnaryCallClientCancel");
180 TEST_P(End2EndBinderTransportTest, UnaryCallEchoMetadataInitially) {
181 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
184 grpc::testing::EchoRequest
request;
185 grpc::testing::EchoResponse
response;
186 request.set_message(
"UnaryCallEchoMetadataInitially");
187 request.mutable_param()->set_echo_metadata_initially(
true);
192 EXPECT_EQ(initial_metadata.find(
"key1")->second,
"value1");
193 EXPECT_EQ(initial_metadata.find(
"key2")->second,
"value2");
196 TEST_P(End2EndBinderTransportTest, UnaryCallEchoMetadata) {
197 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
200 grpc::testing::EchoRequest
request;
201 grpc::testing::EchoResponse
response;
202 request.set_message(
"UnaryCallEchoMetadata");
203 request.mutable_param()->set_echo_metadata(
true);
208 EXPECT_EQ(initial_metadata.find(
"key1")->second,
"value1");
209 EXPECT_EQ(initial_metadata.find(
"key2")->second,
"value2");
212 TEST_P(End2EndBinderTransportTest, UnaryCallResponseMessageLength) {
213 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
215 for (
size_t response_length : {1, 2, 5, 10, 100, 1000000}) {
217 grpc::testing::EchoRequest
request;
218 grpc::testing::EchoResponse
response;
219 request.set_message(
"UnaryCallResponseMessageLength");
220 request.mutable_param()->set_response_message_length(response_length);
226 TEST_P(End2EndBinderTransportTest, UnaryCallTryCancel) {
227 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
232 grpc::testing::EchoRequest
request;
233 grpc::testing::EchoResponse
response;
234 request.set_message(
"UnaryCallTryCancel");
240 TEST_P(End2EndBinderTransportTest, ServerStreamingCall) {
241 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
246 grpc::testing::EchoRequest
request;
247 request.set_message(
"ServerStreamingCall");
248 std::unique_ptr<grpc::ClientReader<grpc::testing::EchoResponse>>
reader =
250 grpc::testing::EchoResponse
response;
261 TEST_P(End2EndBinderTransportTest, ServerStreamingCallCoalescingApi) {
262 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
268 grpc::testing::EchoRequest
request;
269 request.set_message(
"ServerStreamingCallCoalescingApi");
270 std::unique_ptr<grpc::ClientReader<grpc::testing::EchoResponse>>
reader =
272 grpc::testing::EchoResponse
response;
285 ServerStreamingCallTryCancelBeforeProcessing) {
286 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
293 grpc::testing::EchoRequest
request;
294 request.set_message(
"ServerStreamingCallTryCancelBeforeProcessing");
295 std::unique_ptr<grpc::ClientReader<grpc::testing::EchoResponse>>
reader =
297 grpc::testing::EchoResponse
response;
305 ServerSteramingCallTryCancelDuringProcessing) {
306 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
313 grpc::testing::EchoRequest
request;
314 request.set_message(
"ServerStreamingCallTryCancelDuringProcessing");
315 std::unique_ptr<grpc::ClientReader<grpc::testing::EchoResponse>>
reader =
317 grpc::testing::EchoResponse
response;
322 "ServerStreamingCallTryCancelDuringProcessing" +
std::to_string(cnt));
331 ServerSteramingCallTryCancelAfterProcessing) {
332 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
339 grpc::testing::EchoRequest
request;
340 request.set_message(
"ServerStreamingCallTryCancelAfterProcessing");
341 std::unique_ptr<grpc::ClientReader<grpc::testing::EchoResponse>>
reader =
343 grpc::testing::EchoResponse
response;
348 "ServerStreamingCallTryCancelAfterProcessing" +
std::to_string(cnt));
357 TEST_P(End2EndBinderTransportTest, ClientStreamingCall) {
358 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
360 grpc::testing::EchoResponse
response;
361 std::unique_ptr<grpc::ClientWriter<grpc::testing::EchoRequest>>
writer =
363 constexpr
size_t kClientStreamingCounts = 100;
365 for (
size_t i = 0;
i < kClientStreamingCounts; ++
i) {
366 grpc::testing::EchoRequest
request;
378 ClientStreamingCallTryCancelBeforeProcessing) {
379 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
383 grpc::testing::EchoResponse
response;
384 std::unique_ptr<grpc::ClientWriter<grpc::testing::EchoRequest>>
writer =
386 constexpr
size_t kClientStreamingCounts = 100;
387 for (
size_t i = 0;
i < kClientStreamingCounts; ++
i) {
388 grpc::testing::EchoRequest
request;
389 request.set_message(
"ClientStreamingCallBeforeProcessing" +
400 ClientStreamingCallTryCancelDuringProcessing) {
401 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
405 grpc::testing::EchoResponse
response;
406 std::unique_ptr<grpc::ClientWriter<grpc::testing::EchoRequest>>
writer =
408 constexpr
size_t kClientStreamingCounts = 100;
409 for (
size_t i = 0;
i < kClientStreamingCounts; ++
i) {
410 grpc::testing::EchoRequest
request;
411 request.set_message(
"ClientStreamingCallDuringProcessing" +
422 ClientStreamingCallTryCancelAfterProcessing) {
423 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
427 grpc::testing::EchoResponse
response;
428 std::unique_ptr<grpc::ClientWriter<grpc::testing::EchoRequest>>
writer =
430 constexpr
size_t kClientStreamingCounts = 100;
431 for (
size_t i = 0;
i < kClientStreamingCounts; ++
i) {
432 grpc::testing::EchoRequest
request;
433 request.set_message(
"ClientStreamingCallAfterProcessing" +
443 TEST_P(End2EndBinderTransportTest, BiDirStreamingCall) {
444 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
447 grpc::testing::EchoResponse>>
449 constexpr
size_t kBiDirStreamingCounts = 100;
453 grpc::testing::EchoResponse>>
455 size_t bi_dir_streaming_counts;
458 writer_args.stream =
stream;
459 writer_args.bi_dir_streaming_counts = kBiDirStreamingCounts;
461 auto writer_fn = [](
void*
arg) {
462 const WriterArgs&
args = *
static_cast<WriterArgs*
>(
arg);
463 for (
size_t i = 0;
i <
args.bi_dir_streaming_counts; ++
i) {
464 grpc::testing::EchoRequest
request;
468 args.stream->WritesDone();
472 static_cast<void*
>(&writer_args));
473 writer_thread.
Start();
474 for (
size_t i = 0;
i < kBiDirStreamingCounts; ++
i) {
475 grpc::testing::EchoResponse
response;
481 writer_thread.
Join();
484 TEST_P(End2EndBinderTransportTest, BiDirStreamingCallServerFinishesHalfway) {
485 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
486 constexpr
size_t kBiDirStreamingCounts = 100;
491 grpc::testing::EchoResponse>>
496 grpc::testing::EchoResponse>>
498 size_t bi_dir_streaming_counts;
501 writer_args.stream =
stream;
502 writer_args.bi_dir_streaming_counts = kBiDirStreamingCounts;
504 auto writer_fn = [](
void*
arg) {
505 const WriterArgs&
args = *
static_cast<WriterArgs*
>(
arg);
506 for (
size_t i = 0;
i <
args.bi_dir_streaming_counts; ++
i) {
507 grpc::testing::EchoRequest
request;
508 request.set_message(
"BiDirStreamingCallServerFinishesHalfway" +
514 args.stream->WritesDone();
518 static_cast<void*
>(&writer_args));
519 writer_thread.
Start();
520 for (
size_t i = 0;
i < kBiDirStreamingCounts / 2; ++
i) {
521 grpc::testing::EchoResponse
response;
526 grpc::testing::EchoResponse
response;
528 writer_thread.
Join();
533 TEST_P(End2EndBinderTransportTest, LargeMessages) {
534 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub = NewStub();
537 grpc::testing::EchoRequest
request;
538 grpc::testing::EchoResponse
response;
545 [](
char c) { return c ==
'a'; }));
550 End2EndBinderTransportTestWithDifferentDelayTimes,
551 End2EndBinderTransportTest,
558 int main(
int argc,
char** argv) {