|  | @@ -393,6 +393,53 @@ grpc_interop_test_args() {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +# checks the positional args and assigns them to variables visible in the caller
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# these are the positional args passed to grpc_cloud_prod_test after option flags
 | 
	
		
			
				|  |  | +# are removed
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# three args are expected, in order
 | 
	
		
			
				|  |  | +# - test_case
 | 
	
		
			
				|  |  | +# - host <the gce docker instance on which to run the test>
 | 
	
		
			
				|  |  | +# - client to run
 | 
	
		
			
				|  |  | +grpc_cloud_prod_test_args() {
 | 
	
		
			
				|  |  | +  [[ -n $1 ]] && {  # test_case
 | 
	
		
			
				|  |  | +    test_case=$1
 | 
	
		
			
				|  |  | +    shift
 | 
	
		
			
				|  |  | +  } || {
 | 
	
		
			
				|  |  | +    echo "$FUNCNAME: missing arg: test_case" 1>&2
 | 
	
		
			
				|  |  | +    return 1
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  [[ -n $1 ]] && {  # host
 | 
	
		
			
				|  |  | +    host=$1
 | 
	
		
			
				|  |  | +    shift
 | 
	
		
			
				|  |  | +  } || {
 | 
	
		
			
				|  |  | +    echo "$FUNCNAME: missing arg: host" 1>&2
 | 
	
		
			
				|  |  | +    return 1
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  [[ -n $1 ]] && {  # client_type
 | 
	
		
			
				|  |  | +    case $1 in
 | 
	
		
			
				|  |  | +      cxx|go|java|nodejs|php|python|ruby)
 | 
	
		
			
				|  |  | +        grpc_gen_test_cmd="grpc_cloud_prod_gen_$1_cmd"
 | 
	
		
			
				|  |  | +        declare -F $grpc_gen_test_cmd >> /dev/null || {
 | 
	
		
			
				|  |  | +          echo "-f: test_func for $1 => $grpc_gen_test_cmd is not defined" 1>&2
 | 
	
		
			
				|  |  | +          return 2
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        shift
 | 
	
		
			
				|  |  | +        ;;
 | 
	
		
			
				|  |  | +      *)
 | 
	
		
			
				|  |  | +        echo "bad client_type: $1" 1>&2
 | 
	
		
			
				|  |  | +        return 1
 | 
	
		
			
				|  |  | +        ;;
 | 
	
		
			
				|  |  | +    esac
 | 
	
		
			
				|  |  | +  } || {
 | 
	
		
			
				|  |  | +    echo "$FUNCNAME: missing arg: client_type" 1>&2
 | 
	
		
			
				|  |  | +    return 1
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  _grpc_sync_scripts_args() {
 | 
	
		
			
				|  |  |    grpc_gce_script_root='tools/gce_setup'
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -622,6 +669,52 @@ grpc_interop_test() {
 | 
	
		
			
				|  |  |    gcloud compute $project_opt ssh $zone_opt $host --command "$cmd"
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +# Runs a test command on a docker instance.
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# call-seq:
 | 
	
		
			
				|  |  | +#   grpc_cloud_prod_test <test_name> <host> <client_type>
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# requirements:
 | 
	
		
			
				|  |  | +#   host is a GCE instance running docker with access to the gRPC docker images
 | 
	
		
			
				|  |  | +#   test_name is one of the named gRPC tests [http://go/grpc_interop_tests]
 | 
	
		
			
				|  |  | +#   client_type is one of [cxx,go,java,php,python,ruby]
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# it assumes:
 | 
	
		
			
				|  |  | +#   that each grpc-imp has a docker image named grpc/<imp>, e.g, grpc/java
 | 
	
		
			
				|  |  | +#   a test is run using $ docker run 'path/to/interop_test_bin --flags'
 | 
	
		
			
				|  |  | +#   the required images are available on <host>
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# each client_type should have an associated bash func:
 | 
	
		
			
				|  |  | +#   grpc_cloud_prod_gen_<client_type>_cmd
 | 
	
		
			
				|  |  | +# the func provides the dockerized commmand for running client_type's test.
 | 
	
		
			
				|  |  | +# If no such func is available, tests for that client type cannot be run.
 | 
	
		
			
				|  |  | +grpc_cloud_prod_test() {
 | 
	
		
			
				|  |  | +  _grpc_ensure_gcloud_ssh || return 1;
 | 
	
		
			
				|  |  | +  # declare vars local so that they don't pollute the shell environment
 | 
	
		
			
				|  |  | +  # where they this func is used.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  local grpc_zone grpc_project dry_run  # set by _grpc_set_project_and_zone
 | 
	
		
			
				|  |  | +  #  grpc_cloud_prod_test_args
 | 
	
		
			
				|  |  | +  local test_case host grpc_gen_test_cmd
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  # set the project zone and check that all necessary args are provided
 | 
	
		
			
				|  |  | +  _grpc_set_project_and_zone -f grpc_cloud_prod_test_args "$@" || return 1
 | 
	
		
			
				|  |  | +  gce_has_instance $grpc_project $host || return 1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  local test_case_flag=" --test_case=$test_case"
 | 
	
		
			
				|  |  | +  cmd=$($grpc_gen_test_cmd $test_case_flag)
 | 
	
		
			
				|  |  | +  [[ -n $cmd ]] || return 1
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  local project_opt="--project $grpc_project"
 | 
	
		
			
				|  |  | +  local zone_opt="--zone $grpc_zone"
 | 
	
		
			
				|  |  | +  local ssh_cmd="bash -l -c \"$cmd\""
 | 
	
		
			
				|  |  | +  echo "will run:"
 | 
	
		
			
				|  |  | +  echo "  $ssh_cmd"
 | 
	
		
			
				|  |  | +  echo "on $host"
 | 
	
		
			
				|  |  | +  [[ $dry_run == 1 ]] && return 0  # don't run the command on a dry run
 | 
	
		
			
				|  |  | +  gcloud compute $project_opt ssh $zone_opt $host --command "$cmd"
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  # constructs the full dockerized ruby interop test cmd.
 | 
	
		
			
				|  |  |  #
 | 
	
		
			
				|  |  |  # call-seq:
 | 
	
	
		
			
				|  | @@ -655,11 +748,25 @@ grpc_interop_gen_go_cmd() {
 | 
	
		
			
				|  |  |  grpc_interop_gen_java_cmd() {
 | 
	
		
			
				|  |  |      local cmd_prefix="sudo docker run grpc/java";
 | 
	
		
			
				|  |  |      local test_script="/var/local/git/grpc-java/run-test-client.sh";
 | 
	
		
			
				|  |  | -    local test_script+=" --server_host_override=foo.test.google.com --use_test_ca=true --use_tls=true"
 | 
	
		
			
				|  |  | +    local test_script+=" --server_host_override=foo.test.google.fr --use_test_ca=true --use_tls=true"
 | 
	
		
			
				|  |  |      local the_cmd="$cmd_prefix $test_script $@";
 | 
	
		
			
				|  |  |      echo $the_cmd
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +# constructs the full dockerized java interop test cmd.
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# call-seq:
 | 
	
		
			
				|  |  | +#   flags= .... # generic flags to include the command
 | 
	
		
			
				|  |  | +#   cmd=$($grpc_gen_test_cmd $flags)
 | 
	
		
			
				|  |  | +grpc_cloud_prod_gen_java_cmd() {
 | 
	
		
			
				|  |  | +    local cmd_prefix="sudo docker run grpc/java";
 | 
	
		
			
				|  |  | +    local test_script="/var/local/git/grpc-java/run-test-client.sh";
 | 
	
		
			
				|  |  | +    local test_script+=" --use_tls=true"
 | 
	
		
			
				|  |  | +    local gfe_flags=" --server_port=443 --server_host=grpc-test.sandbox.google.com --server_host_override=grpc-test.sandbox.google.com"
 | 
	
		
			
				|  |  | +    local the_cmd="$cmd_prefix $test_script $gfe_flags $@";
 | 
	
		
			
				|  |  | +    echo $the_cmd
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  # constructs the full dockerized php interop test cmd.
 | 
	
		
			
				|  |  |  #
 | 
	
		
			
				|  |  |  # TODO(mlumish): update this to use the script once that's on git-on-borg
 | 
	
	
		
			
				|  | @@ -689,4 +796,18 @@ grpc_interop_gen_cxx_cmd() {
 | 
	
		
			
				|  |  |      echo $the_cmd
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +# constructs the full dockerized cpp interop test cmd.
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# call-seq:
 | 
	
		
			
				|  |  | +#   flags= .... # generic flags to include the command
 | 
	
		
			
				|  |  | +#   cmd=$($grpc_gen_test_cmd $flags)
 | 
	
		
			
				|  |  | +grpc_cloud_prod_gen_cxx_cmd() {
 | 
	
		
			
				|  |  | +    local cmd_prefix="sudo docker run grpc/cxx"; 
 | 
	
		
			
				|  |  | +    local test_script="/var/local/git/grpc/bins/opt/interop_client --enable_ssl";
 | 
	
		
			
				|  |  | +    local gfe_flags=" --use_prod_roots --server_port=443 --server_host=grpc-test.sandbox.google.com --server_host_override=grpc-test.sandbox.google.com"
 | 
	
		
			
				|  |  | +    local the_cmd="$cmd_prefix $test_script $gfe_flags $@";
 | 
	
		
			
				|  |  | +    echo $the_cmd
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  # TODO(grpc-team): add grpc_interop_gen_xxx_cmd for python|cxx|nodejs
 |