|  | @@ -44,17 +44,21 @@
 | 
	
		
			
				|  |  |  #include <sys/wait.h>
 | 
	
		
			
				|  |  |  #include <unistd.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#include <gflags/gflags.h>
 | 
	
		
			
				|  |  |  #include <grpc/support/alloc.h>
 | 
	
		
			
				|  |  |  #include <grpc/support/host_port.h>
 | 
	
		
			
				|  |  |  #include <grpc/support/log.h>
 | 
	
		
			
				|  |  |  #include <grpc/support/string_util.h>
 | 
	
		
			
				|  |  |  #include "test/core/util/port.h"
 | 
	
		
			
				|  |  | +#include "test/cpp/util/test_config.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  extern "C" {
 | 
	
		
			
				|  |  |  #include "src/core/lib/iomgr/socket_utils_posix.h"
 | 
	
		
			
				|  |  |  #include "src/core/lib/support/string.h"
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +DEFINE_string(extra_server_flags, "", "Extra flags to pass to server.");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  int test_client(const char* root, const char* host, int port) {
 | 
	
		
			
				|  |  |    int status;
 | 
	
		
			
				|  |  |    pid_t cli;
 | 
	
	
		
			
				|  | @@ -80,6 +84,7 @@ int test_client(const char* root, const char* host, int port) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  int main(int argc, char** argv) {
 | 
	
		
			
				|  |  | +  grpc::testing::InitTest(&argc, &argv, true);
 | 
	
		
			
				|  |  |    char* me = argv[0];
 | 
	
		
			
				|  |  |    char* lslash = strrchr(me, '/');
 | 
	
		
			
				|  |  |    char root[1024];
 | 
	
	
		
			
				|  | @@ -105,15 +110,19 @@ int main(int argc, char** argv) {
 | 
	
		
			
				|  |  |    /* start the server */
 | 
	
		
			
				|  |  |    svr = fork();
 | 
	
		
			
				|  |  |    if (svr == 0) {
 | 
	
		
			
				|  |  | -    char* binary_path;
 | 
	
		
			
				|  |  | -    char* port_arg;
 | 
	
		
			
				|  |  | -    gpr_asprintf(&binary_path, "%s/interop_server", root);
 | 
	
		
			
				|  |  | -    gpr_asprintf(&port_arg, "--port=%d", port);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    execl(binary_path, binary_path, port_arg, NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    gpr_free(binary_path);
 | 
	
		
			
				|  |  | -    gpr_free(port_arg);
 | 
	
		
			
				|  |  | +    const size_t num_args = 3 + !FLAGS_extra_server_flags.empty();
 | 
	
		
			
				|  |  | +    char** args = (char**)gpr_malloc(sizeof(char*) * num_args);
 | 
	
		
			
				|  |  | +    memset(args, 0, sizeof(char*) * num_args);
 | 
	
		
			
				|  |  | +    gpr_asprintf(&args[0], "%s/interop_server", root);
 | 
	
		
			
				|  |  | +    gpr_asprintf(&args[1], "--port=%d", port);
 | 
	
		
			
				|  |  | +    if (!FLAGS_extra_server_flags.empty()) {
 | 
	
		
			
				|  |  | +      args[2] = gpr_strdup(FLAGS_extra_server_flags.c_str());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    execv(args[0], args);
 | 
	
		
			
				|  |  | +    for (size_t i = 0; i < num_args - 1; ++i) {
 | 
	
		
			
				|  |  | +      gpr_free(args[i]);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    gpr_free(args);
 | 
	
		
			
				|  |  |      return 1;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    /* wait a little */
 |