#!/bin/bash # Copyright 2021 Google LLC # # 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.. # Fail on any error set -eo pipefail # Display commands being run set -x # Only run on Go 1.17+ min_minor_ver=17 v=`go version | { read _ _ v _; echo ${v#go}; }` comps=(${v//./ }) minor_ver=${comps[1]} if [ "$minor_ver" -lt "$min_minor_ver" ]; then echo minor version $minor_ver, skipping exit 0 fi export STORAGE_EMULATOR_HOST="http://localhost:9000" export STORAGE_EMULATOR_HOST_GRPC="localhost:8888" DEFAULT_IMAGE_NAME='gcr.io/cloud-devrel-public-resources/storage-testbench' DEFAULT_IMAGE_TAG='latest' DOCKER_IMAGE=${DEFAULT_IMAGE_NAME}:${DEFAULT_IMAGE_TAG} CONTAINER_NAME=storage_testbench # Note: --net=host makes the container bind directly to the Docker host’s network, # with no network isolation. If we were to use port-mapping instead, reset connection errors # would be captured differently and cause unexpected test behaviour. # The host networking driver works only on Linux hosts. # See more about using host networking: https://docs.docker.com/network/host/ DOCKER_NETWORK="--net=host" # Note: We do not expect the RetryConformanceTest suite to pass on darwin due to # differences in the network errors emitted by the system. if [ `go env GOOS` == 'darwin' ]; then DOCKER_NETWORK="-p 9000:9000 -p 8888:8888" fi # Get the docker image for the testbench docker pull $DOCKER_IMAGE # Start the testbench docker run --name $CONTAINER_NAME --rm -d $DOCKER_NETWORK $DOCKER_IMAGE echo "Running the Cloud Storage testbench: $STORAGE_EMULATOR_HOST" sleep 1 # Stop the testbench & cleanup environment variables function cleanup() { echo "Cleanup testbench" docker stop $CONTAINER_NAME unset STORAGE_EMULATOR_HOST; unset STORAGE_EMULATOR_HOST_GRPC; } trap cleanup EXIT # Check that the server is running - retry several times to allow for start-up time response=$(curl -w "%{http_code}\n" $STORAGE_EMULATOR_HOST --retry-connrefused --retry 5 -o /dev/null) if [[ $response != 200 ]] then echo "Testbench server did not start correctly" exit 1 fi # Start the gRPC server on port 8888. echo "Starting the gRPC server on port 8888" response=$(curl -w "%{http_code}\n" --retry 5 --retry-max-time 40 -o /dev/null "$STORAGE_EMULATOR_HOST/start_grpc?port=8888") if [[ $response != 200 ]] then echo "Testbench gRPC server did not start correctly" exit 1 fi # Run tests go test -v -timeout 10m ./ -run="^Test(RetryConformance|.*Emulated)$" -short 2>&1 | tee -a sponge_log.log