|
|
|
@ -101,13 +101,13 @@ class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service { |
|
|
|
|
gpr_now(), |
|
|
|
|
gpr_time_from_micros(request->param().client_cancel_after_us()))); |
|
|
|
|
} |
|
|
|
|
return Status::Cancelled; |
|
|
|
|
return Status::CANCELLED; |
|
|
|
|
} else if (request->has_param() && |
|
|
|
|
request->param().server_cancel_after_us()) { |
|
|
|
|
gpr_sleep_until(gpr_time_add( |
|
|
|
|
gpr_now(), |
|
|
|
|
gpr_time_from_micros(request->param().server_cancel_after_us()))); |
|
|
|
|
return Status::Cancelled; |
|
|
|
|
return Status::CANCELLED; |
|
|
|
|
} else { |
|
|
|
|
EXPECT_FALSE(context->IsCancelled()); |
|
|
|
|
} |
|
|
|
@ -232,7 +232,7 @@ static void SendRpc(grpc::cpp::test::util::TestService::Stub* stub, |
|
|
|
|
ClientContext context; |
|
|
|
|
Status s = stub->Echo(&context, request, &response); |
|
|
|
|
EXPECT_EQ(response.message(), request.message()); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -265,7 +265,7 @@ TEST_F(End2endTest, RpcDeadlineExpires) { |
|
|
|
|
std::chrono::system_clock::now() + std::chrono::microseconds(10); |
|
|
|
|
context.set_deadline(deadline); |
|
|
|
|
Status s = stub_->Echo(&context, request, &response); |
|
|
|
|
EXPECT_EQ(StatusCode::DEADLINE_EXCEEDED, s.code()); |
|
|
|
|
EXPECT_EQ(StatusCode::DEADLINE_EXCEEDED, s.error_code()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Set a long but finite deadline.
|
|
|
|
@ -281,7 +281,7 @@ TEST_F(End2endTest, RpcLongDeadline) { |
|
|
|
|
context.set_deadline(deadline); |
|
|
|
|
Status s = stub_->Echo(&context, request, &response); |
|
|
|
|
EXPECT_EQ(response.message(), request.message()); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Ask server to echo back the deadline it sees.
|
|
|
|
@ -298,7 +298,7 @@ TEST_F(End2endTest, EchoDeadline) { |
|
|
|
|
context.set_deadline(deadline); |
|
|
|
|
Status s = stub_->Echo(&context, request, &response); |
|
|
|
|
EXPECT_EQ(response.message(), request.message()); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
gpr_timespec sent_deadline; |
|
|
|
|
Timepoint2Timespec(deadline, &sent_deadline); |
|
|
|
|
// Allow 1 second error.
|
|
|
|
@ -317,7 +317,7 @@ TEST_F(End2endTest, EchoDeadlineForNoDeadlineRpc) { |
|
|
|
|
ClientContext context; |
|
|
|
|
Status s = stub_->Echo(&context, request, &response); |
|
|
|
|
EXPECT_EQ(response.message(), request.message()); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
EXPECT_EQ(response.param().request_deadline(), gpr_inf_future.tv_sec); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -329,9 +329,9 @@ TEST_F(End2endTest, UnimplementedRpc) { |
|
|
|
|
|
|
|
|
|
ClientContext context; |
|
|
|
|
Status s = stub_->Unimplemented(&context, request, &response); |
|
|
|
|
EXPECT_FALSE(s.IsOk()); |
|
|
|
|
EXPECT_EQ(s.code(), grpc::StatusCode::UNIMPLEMENTED); |
|
|
|
|
EXPECT_EQ(s.details(), ""); |
|
|
|
|
EXPECT_FALSE(s.ok()); |
|
|
|
|
EXPECT_EQ(s.error_code(), grpc::StatusCode::UNIMPLEMENTED); |
|
|
|
|
EXPECT_EQ(s.error_message(), ""); |
|
|
|
|
EXPECT_EQ(response.message(), ""); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -347,7 +347,7 @@ TEST_F(End2endTest, RequestStreamOneRequest) { |
|
|
|
|
stream->WritesDone(); |
|
|
|
|
Status s = stream->Finish(); |
|
|
|
|
EXPECT_EQ(response.message(), request.message()); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(End2endTest, RequestStreamTwoRequests) { |
|
|
|
@ -363,7 +363,7 @@ TEST_F(End2endTest, RequestStreamTwoRequests) { |
|
|
|
|
stream->WritesDone(); |
|
|
|
|
Status s = stream->Finish(); |
|
|
|
|
EXPECT_EQ(response.message(), "hellohello"); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(End2endTest, ResponseStream) { |
|
|
|
@ -383,7 +383,7 @@ TEST_F(End2endTest, ResponseStream) { |
|
|
|
|
EXPECT_FALSE(stream->Read(&response)); |
|
|
|
|
|
|
|
|
|
Status s = stream->Finish(); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(End2endTest, BidiStream) { |
|
|
|
@ -414,7 +414,7 @@ TEST_F(End2endTest, BidiStream) { |
|
|
|
|
EXPECT_FALSE(stream->Read(&response)); |
|
|
|
|
|
|
|
|
|
Status s = stream->Finish(); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Talk to the two services with the same name but different package names.
|
|
|
|
@ -433,7 +433,7 @@ TEST_F(End2endTest, DiffPackageServices) { |
|
|
|
|
ClientContext context; |
|
|
|
|
Status s = stub->Echo(&context, request, &response); |
|
|
|
|
EXPECT_EQ(response.message(), request.message()); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
|
|
|
|
|
std::unique_ptr<grpc::cpp::test::util::duplicate::TestService::Stub> |
|
|
|
|
dup_pkg_stub( |
|
|
|
@ -441,7 +441,7 @@ TEST_F(End2endTest, DiffPackageServices) { |
|
|
|
|
ClientContext context2; |
|
|
|
|
s = dup_pkg_stub->Echo(&context2, request, &response); |
|
|
|
|
EXPECT_EQ("no package", response.message()); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// rpc and stream should fail on bad credentials.
|
|
|
|
@ -459,16 +459,16 @@ TEST_F(End2endTest, BadCredentials) { |
|
|
|
|
|
|
|
|
|
Status s = stub->Echo(&context, request, &response); |
|
|
|
|
EXPECT_EQ("", response.message()); |
|
|
|
|
EXPECT_FALSE(s.IsOk()); |
|
|
|
|
EXPECT_EQ(StatusCode::UNKNOWN, s.code()); |
|
|
|
|
EXPECT_EQ("Rpc sent on a lame channel.", s.details()); |
|
|
|
|
EXPECT_FALSE(s.ok()); |
|
|
|
|
EXPECT_EQ(StatusCode::UNKNOWN, s.error_code()); |
|
|
|
|
EXPECT_EQ("Rpc sent on a lame channel.", s.error_message()); |
|
|
|
|
|
|
|
|
|
ClientContext context2; |
|
|
|
|
auto stream = stub->BidiStream(&context2); |
|
|
|
|
s = stream->Finish(); |
|
|
|
|
EXPECT_FALSE(s.IsOk()); |
|
|
|
|
EXPECT_EQ(StatusCode::UNKNOWN, s.code()); |
|
|
|
|
EXPECT_EQ("Rpc sent on a lame channel.", s.details()); |
|
|
|
|
EXPECT_FALSE(s.ok()); |
|
|
|
|
EXPECT_EQ(StatusCode::UNKNOWN, s.error_code()); |
|
|
|
|
EXPECT_EQ("Rpc sent on a lame channel.", s.error_message()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void CancelRpc(ClientContext* context, int delay_us, TestServiceImpl* service) { |
|
|
|
@ -491,8 +491,8 @@ TEST_F(End2endTest, ClientCancelsRpc) { |
|
|
|
|
std::thread cancel_thread(CancelRpc, &context, kCancelDelayUs, &service_); |
|
|
|
|
Status s = stub_->Echo(&context, request, &response); |
|
|
|
|
cancel_thread.join(); |
|
|
|
|
EXPECT_EQ(StatusCode::CANCELLED, s.code()); |
|
|
|
|
EXPECT_EQ(s.details(), "Cancelled"); |
|
|
|
|
EXPECT_EQ(StatusCode::CANCELLED, s.error_code()); |
|
|
|
|
EXPECT_EQ(s.error_message(), "Cancelled"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Server cancels rpc after 1ms
|
|
|
|
@ -505,8 +505,8 @@ TEST_F(End2endTest, ServerCancelsRpc) { |
|
|
|
|
|
|
|
|
|
ClientContext context; |
|
|
|
|
Status s = stub_->Echo(&context, request, &response); |
|
|
|
|
EXPECT_EQ(StatusCode::CANCELLED, s.code()); |
|
|
|
|
EXPECT_TRUE(s.details().empty()); |
|
|
|
|
EXPECT_EQ(StatusCode::CANCELLED, s.error_code()); |
|
|
|
|
EXPECT_TRUE(s.error_message().empty()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Client cancels request stream after sending two messages
|
|
|
|
@ -524,7 +524,7 @@ TEST_F(End2endTest, ClientCancelsRequestStream) { |
|
|
|
|
context.TryCancel(); |
|
|
|
|
|
|
|
|
|
Status s = stream->Finish(); |
|
|
|
|
EXPECT_EQ(grpc::StatusCode::CANCELLED, s.code()); |
|
|
|
|
EXPECT_EQ(grpc::StatusCode::CANCELLED, s.error_code()); |
|
|
|
|
|
|
|
|
|
EXPECT_EQ(response.message(), ""); |
|
|
|
|
} |
|
|
|
@ -558,7 +558,7 @@ TEST_F(End2endTest, ClientCancelsResponseStream) { |
|
|
|
|
Status s = stream->Finish(); |
|
|
|
|
// The final status could be either of CANCELLED or OK depending on
|
|
|
|
|
// who won the race.
|
|
|
|
|
EXPECT_GE(grpc::StatusCode::CANCELLED, s.code()); |
|
|
|
|
EXPECT_GE(grpc::StatusCode::CANCELLED, s.error_code()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Client cancels bidi stream after sending some messages
|
|
|
|
@ -591,7 +591,7 @@ TEST_F(End2endTest, ClientCancelsBidi) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Status s = stream->Finish(); |
|
|
|
|
EXPECT_EQ(grpc::StatusCode::CANCELLED, s.code()); |
|
|
|
|
EXPECT_EQ(grpc::StatusCode::CANCELLED, s.error_code()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(End2endTest, RpcMaxMessageSize) { |
|
|
|
@ -602,7 +602,7 @@ TEST_F(End2endTest, RpcMaxMessageSize) { |
|
|
|
|
|
|
|
|
|
ClientContext context; |
|
|
|
|
Status s = stub_->Echo(&context, request, &response); |
|
|
|
|
EXPECT_FALSE(s.IsOk()); |
|
|
|
|
EXPECT_FALSE(s.ok()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool MetadataContains(const std::multimap<grpc::string, grpc::string>& metadata, |
|
|
|
@ -632,7 +632,7 @@ TEST_F(End2endTest, SetPerCallCredentials) { |
|
|
|
|
|
|
|
|
|
Status s = stub_->Echo(&context, request, &response); |
|
|
|
|
EXPECT_EQ(request.message(), response.message()); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
EXPECT_TRUE(MetadataContains(context.GetServerTrailingMetadata(), |
|
|
|
|
GRPC_IAM_AUTHORIZATION_TOKEN_METADATA_KEY, |
|
|
|
|
"fake_token")); |
|
|
|
@ -652,8 +652,8 @@ TEST_F(End2endTest, InsecurePerCallCredentials) { |
|
|
|
|
request.mutable_param()->set_echo_metadata(true); |
|
|
|
|
|
|
|
|
|
Status s = stub_->Echo(&context, request, &response); |
|
|
|
|
EXPECT_EQ(StatusCode::CANCELLED, s.code()); |
|
|
|
|
EXPECT_EQ("Failed to set credentials to rpc.", s.details()); |
|
|
|
|
EXPECT_EQ(StatusCode::CANCELLED, s.error_code()); |
|
|
|
|
EXPECT_EQ("Failed to set credentials to rpc.", s.error_message()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(End2endTest, OverridePerCallCredentials) { |
|
|
|
@ -684,7 +684,7 @@ TEST_F(End2endTest, OverridePerCallCredentials) { |
|
|
|
|
GRPC_IAM_AUTHORITY_SELECTOR_METADATA_KEY, |
|
|
|
|
"fake_selector1")); |
|
|
|
|
EXPECT_EQ(request.message(), response.message()); |
|
|
|
|
EXPECT_TRUE(s.IsOk()); |
|
|
|
|
EXPECT_TRUE(s.ok()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} // namespace testing
|
|
|
|
|