| #!/bin/bash |
| # |
| # Copyright 2019 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. |
| # |
| |
| set -e +x |
| |
| export TMPDIR=$(mktemp -d) |
| trap "rm -rf ${TMPDIR}" EXIT |
| |
| clean () { |
| for i in {1..10}; do |
| jobs -p | xargs -n1 pkill -P |
| # A simple "wait" just hangs sometimes. Running `jobs` seems to help. |
| sleep 1 |
| if jobs | read; then |
| return |
| fi |
| done |
| echo "$(tput setaf 1) clean failed to kill tests $(tput sgr 0)" |
| jobs |
| pstree |
| exit 1 |
| } |
| |
| fail () { |
| echo "$(tput setaf 1) $1 $(tput sgr 0)" |
| clean |
| exit 1 |
| } |
| |
| pass () { |
| echo "$(tput setaf 2) $1 $(tput sgr 0)" |
| } |
| |
| # Don't run some tests that need a special environment: |
| # "google_default_credentials" |
| # "compute_engine_channel_credentials" |
| # "compute_engine_creds" |
| # "service_account_creds" |
| # "jwt_token_creds" |
| # "oauth2_auth_token" |
| # "per_rpc_creds" |
| # "pick_first_unary" |
| |
| CASES=( |
| "empty_unary" |
| "large_unary" |
| "client_streaming" |
| "server_streaming" |
| "ping_pong" |
| "empty_stream" |
| "timeout_on_sleeping_server" |
| "cancel_after_begin" |
| "cancel_after_first_response" |
| "status_code_and_message" |
| "special_status_message" |
| "custom_metadata" |
| "unimplemented_method" |
| "unimplemented_service" |
| ) |
| |
| # Build server |
| if ! go build -o /dev/null ./interop/server; then |
| fail "failed to build server" |
| else |
| pass "successfully built server" |
| fi |
| |
| # Start server |
| SERVER_LOG="$(mktemp)" |
| go run ./interop/server --use_tls &> $SERVER_LOG & |
| |
| for case in ${CASES[@]}; do |
| echo "$(tput setaf 4) testing: ${case} $(tput sgr 0)" |
| |
| CLIENT_LOG="$(mktemp)" |
| if ! timeout 20 go run ./interop/client --use_tls --server_host_override=foo.test.google.fr --use_test_ca --test_case="${case}" &> $CLIENT_LOG; then |
| fail "FAIL: test case ${case} |
| got server log: |
| $(cat $SERVER_LOG) |
| got client log: |
| $(cat $CLIENT_LOG) |
| " |
| else |
| pass "PASS: test case ${case}" |
| fi |
| done |
| |
| clean |