19 #include <gtest/gtest.h>
21 #include "absl/memory/memory.h"
33 #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h"
34 #include "src/proto/grpc/testing/echo.grpc.pb.h"
39 using grpc::testing::EchoRequest;
40 using grpc::testing::EchoResponse;
49 class ServiceImpl final :
public grpc::testing::EchoTestService::Service {
55 ServerReaderWriter<EchoResponse, EchoRequest>*
stream)
override {
69 Status ResponseStream(ServerContext* ,
71 ServerWriter<EchoResponse>*
writer)
override {
74 for (
int i = 0;;
i++) {
75 std::ostringstream
msg;
98 std::unique_ptr<Server> CreateServerAndClient(
const std::string&
mode) {
100 std::ostringstream addr_stream;
101 addr_stream <<
"localhost:" <<
port;
102 auto addr = addr_stream.str();
103 client_ = absl::make_unique<SubProcess>(
104 std::vector<std::string>({
g_root +
"/server_crash_test_client",
105 "--address=" +
addr,
"--mode=" +
mode}));
111 return builder.BuildAndStart();
114 void KillClient() {
client_.reset(); }
116 bool HadOneBidiStream() {
return service_.bidi_stream_count() == 1; }
118 bool HadOneResponseStream() {
return service_.response_stream_count() == 1; }
125 TEST_F(CrashTest, ResponseStream) {
126 auto server = CreateServerAndClient(
"response");
135 TEST_F(CrashTest, BidiStream) {
136 auto server = CreateServerAndClient(
"bidi");
150 int main(
int argc,
char** argv) {
152 auto lslash = me.rfind(
'/');
153 if (lslash != std::string::npos) {
154 g_root = me.substr(0, lslash);