mirror of https://github.com/docker/docs.git
				
				
				
			
		
			
				
	
	
		
			121 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| set -e
 | |
| 
 | |
| # Wrapper script to run bats tests for various drivers.
 | |
| # Usage: DRIVER=[driver] ./run-bats.sh [subtest]
 | |
| 
 | |
| function quiet_run () {
 | |
|     if [[ "$VERBOSE" == "1" ]]; then
 | |
|         "$@"
 | |
|     else
 | |
|         "$@" &>/dev/null
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function cleanup_machines() {
 | |
|     for MACHINE_NAME in $(machine ls -q); do
 | |
|         if [[ "$MACHINE_NAME" != "$SHARED_NAME" ]] || [[ "$1" == "ALL" ]]; then
 | |
|             quiet_run machine rm -f $MACHINE_NAME
 | |
|         fi
 | |
|     done
 | |
| }
 | |
| 
 | |
| function cleanup_store() {
 | |
|     if [[ -d "$MACHINE_STORAGE_PATH" ]]; then
 | |
|         rm -r "$MACHINE_STORAGE_PATH"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function machine() {
 | |
|     "$MACHINE_ROOT"/bin/"$MACHINE_BIN_NAME" "$@"
 | |
| }
 | |
| 
 | |
| function run_bats() {
 | |
|     for bats_file in $(find "$1" -name \*.bats); do
 | |
|         echo "=> $bats_file"
 | |
| 
 | |
|         # BATS returns non-zero to indicate the tests have failed, we shouldn't
 | |
|         # necessarily bail in this case, so that's the reason for the e toggle.
 | |
|         set +e
 | |
|         bats "$bats_file"
 | |
|         if [[ $? -ne 0 ]]; then
 | |
|             EXIT_STATUS=1
 | |
|         fi
 | |
|         set -e
 | |
| 
 | |
|         echo
 | |
| 
 | |
|         if [[ "$NO_SHARE_MACHINES" == "1" ]]; then
 | |
|             cleanup_machines "ALL"
 | |
|         else
 | |
|             cleanup_machines "NON-SHARED"
 | |
|         fi
 | |
|     done
 | |
| }
 | |
| 
 | |
| # Set this ourselves in case bats call fails
 | |
| EXIT_STATUS=0
 | |
| export BATS_FILE="$1"
 | |
| 
 | |
| # Check we're not running bash 3.x
 | |
| if [ "${BASH_VERSINFO[0]}" -lt 4 ]; then
 | |
|     echo "Bash 4.1 or later is required to run these tests"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| # If bash 4.x, check the minor version is 1 or later
 | |
| if [ "${BASH_VERSINFO[0]}" -eq 4 ] && [ "${BASH_VERSINFO[1]}" -lt 1 ]; then
 | |
|     echo "Bash 4.1 or later is required to run these tests"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| if [[ -z "$DRIVER" ]]; then
 | |
|     echo "You must specify the DRIVER environment variable."
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| if [[ -z "$BATS_FILE" ]]; then
 | |
|     echo "You must specify a bats test to run."
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| if [[ ! -e "$BATS_FILE" ]]; then
 | |
|     echo "Requested bats file or directory not found: $BATS_FILE"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| # TODO: Should the script bail out if these are set already?
 | |
| export BASE_TEST_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
 | |
| export MACHINE_ROOT="$BASE_TEST_DIR/../.."
 | |
| export MACHINE_STORAGE_PATH="/tmp/machine-bats-test-$DRIVER"
 | |
| export MACHINE_BIN_NAME=docker-machine
 | |
| export BATS_LOG="$MACHINE_ROOT/bats.log"
 | |
| export B2D_LOCATION=~/.docker/machine/cache/boot2docker.iso
 | |
| export SHARED_NAME="bats-$DRIVER-test-shared-$(date +%s)"
 | |
| export MACHINE_BUGSNAG_API_TOKEN=no-report
 | |
| 
 | |
| # This function gets used in the integration tests, so export it.
 | |
| export -f machine
 | |
| 
 | |
| > "$BATS_LOG"
 | |
| 
 | |
| cleanup_machines "ALL"
 | |
| cleanup_store
 | |
| 
 | |
| if [[ -f "$B2D_LOCATION" ]]; then
 | |
|     if [[ "$B2D_CACHE" == "1" ]]; then
 | |
|         mkdir -p "${MACHINE_STORAGE_PATH}/cache"
 | |
|         cp $B2D_LOCATION "${MACHINE_STORAGE_PATH}/cache/boot2docker.iso"
 | |
|     else
 | |
|         echo "INFO: Run the tests with B2D_CACHE=1 to avoid downloading the boot2docker iso each time."
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| run_bats "$BATS_FILE"
 | |
| 
 | |
| cleanup_machines "ALL"
 | |
| cleanup_store
 | |
| 
 | |
| exit ${EXIT_STATUS}
 |