/* * * Copyright 2015 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #include #include #include #include #include "src/core/lib/gpr/string.h" #include "src/core/lib/gprpp/host_port.h" #include "src/core/lib/gprpp/memory.h" #include "test/core/util/port.h" #include "test/core/util/subprocess.h" int main(int argc, const char** argv) { const char* me = argv[0]; const char* lslash = strrchr(me, '/'); char root[1024]; int port = grpc_pick_unused_port_or_die(); char* args[10]; int status; gpr_subprocess *svr, *cli; /* figure out where we are */ if (lslash) { memcpy(root, me, static_cast(lslash - me)); root[lslash - me] = 0; } else { strcpy(root, "."); } /* start the server */ gpr_asprintf(&args[0], "%s/fling_server%s", root, gpr_subprocess_binary_extension()); args[1] = const_cast("--bind"); grpc_core::UniquePtr joined; grpc_core::JoinHostPort(&joined, "::", port); args[2] = joined.get(); args[3] = const_cast("--no-secure"); svr = gpr_subprocess_create(4, (const char**)args); gpr_free(args[0]); /* start the client */ gpr_asprintf(&args[0], "%s/fling_client%s", root, gpr_subprocess_binary_extension()); args[1] = const_cast("--target"); grpc_core::JoinHostPort(&joined, "127.0.0.1", port); args[2] = joined.get(); args[3] = const_cast("--scenario=ping-pong-request"); args[4] = const_cast("--no-secure"); args[5] = nullptr; cli = gpr_subprocess_create(6, (const char**)args); gpr_free(args[0]); /* wait for completion */ printf("waiting for client\n"); if ((status = gpr_subprocess_join(cli))) { gpr_subprocess_destroy(cli); gpr_subprocess_destroy(svr); return status; } gpr_subprocess_destroy(cli); gpr_subprocess_interrupt(svr); status = gpr_subprocess_join(svr); gpr_subprocess_destroy(svr); return status; }