google.golang.org/grpc@v1.62.1/interop/interop_test.sh (about) 1 #!/bin/bash 2 # 3 # Copyright 2019 gRPC authors. 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 # 17 18 set -e +x 19 20 export TMPDIR=$(mktemp -d) 21 trap "rm -rf ${TMPDIR}" EXIT 22 23 clean () { 24 for i in {1..10}; do 25 jobs -p | xargs -n1 pkill -P 26 # A simple "wait" just hangs sometimes. Running `jobs` seems to help. 27 sleep 1 28 if jobs | read; then 29 return 30 fi 31 done 32 echo "$(tput setaf 1) clean failed to kill tests $(tput sgr 0)" 33 jobs 34 pstree 35 exit 1 36 } 37 38 fail () { 39 echo "$(tput setaf 1) $(date): $1 $(tput sgr 0)" 40 clean 41 exit 1 42 } 43 44 pass () { 45 echo "$(tput setaf 2) $(date): $1 $(tput sgr 0)" 46 } 47 48 withTimeout () { 49 timer=$1 50 shift 51 52 # Run command in the background. 53 cmd=$(printf '%q ' "$@") 54 eval "$cmd" & 55 wpid=$! 56 # Kill after $timer seconds. 57 sleep $timer && kill $wpid & 58 kpid=$! 59 # Wait for the background thread. 60 wait $wpid 61 res=$? 62 # Kill the killer pid in case it's still running. 63 kill $kpid || true 64 wait $kpid || true 65 return $res 66 } 67 68 # Don't run some tests that need a special environment: 69 # "google_default_credentials" 70 # "compute_engine_channel_credentials" 71 # "compute_engine_creds" 72 # "service_account_creds" 73 # "jwt_token_creds" 74 # "oauth2_auth_token" 75 # "per_rpc_creds" 76 # "pick_first_unary" 77 78 CASES=( 79 "empty_unary" 80 "large_unary" 81 "client_streaming" 82 "server_streaming" 83 "ping_pong" 84 "empty_stream" 85 "timeout_on_sleeping_server" 86 "cancel_after_begin" 87 "cancel_after_first_response" 88 "status_code_and_message" 89 "special_status_message" 90 "custom_metadata" 91 "unimplemented_method" 92 "unimplemented_service" 93 "orca_per_rpc" 94 "orca_oob" 95 ) 96 97 # Build server 98 echo "$(tput setaf 4) $(date): building server $(tput sgr 0)" 99 if ! go build -o /dev/null ./interop/server; then 100 fail "failed to build server" 101 else 102 pass "successfully built server" 103 fi 104 105 # Build client 106 echo "$(tput setaf 4) $(date): building client $(tput sgr 0)" 107 if ! go build -o /dev/null ./interop/client; then 108 fail "failed to build client" 109 else 110 pass "successfully built client" 111 fi 112 113 # Start server 114 SERVER_LOG="$(mktemp)" 115 GRPC_GO_LOG_SEVERITY_LEVEL=info go run ./interop/server --use_tls &> $SERVER_LOG & 116 117 for case in ${CASES[@]}; do 118 echo "$(tput setaf 4) $(date): testing: ${case} $(tput sgr 0)" 119 120 CLIENT_LOG="$(mktemp)" 121 if ! GRPC_GO_LOG_SEVERITY_LEVEL=info withTimeout 20 go run ./interop/client \ 122 --use_tls \ 123 --server_host_override=foo.test.google.fr \ 124 --use_test_ca --test_case="${case}" \ 125 --service_config_json='{ "loadBalancingConfig": [{ "test_backend_metrics_load_balancer": {} }]}' \ 126 &> $CLIENT_LOG; then 127 fail "FAIL: test case ${case} 128 got server log: 129 $(cat $SERVER_LOG) 130 got client log: 131 $(cat $CLIENT_LOG) 132 " 133 else 134 pass "PASS: test case ${case}" 135 fi 136 done 137 138 clean