152 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| #
 | |
| # This Source Code Form is subject to the terms of the Mozilla Public
 | |
| # License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | |
| #
 | |
| 
 | |
| #
 | |
| # Copyright (c) 2015, Joyent, Inc.
 | |
| #
 | |
| 
 | |
| #
 | |
| # Run *integration* tests.
 | |
| #
 | |
| # This creates .tap files in OUTPUT_DIR that can be processed by a TAP reader.
 | |
| # Testing config and log files are also placed in this dir.
 | |
| #
 | |
| # Run `./runtests -h` for usage info.
 | |
| #
 | |
| 
 | |
| if [ "$TRACE" != "" ]; then
 | |
|     export PS4='${BASH_SOURCE}:${LINENO}: ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
 | |
|     set -o xtrace
 | |
| fi
 | |
| set -o errexit
 | |
| set -o pipefail
 | |
| 
 | |
| 
 | |
| 
 | |
| #---- support functions
 | |
| 
 | |
| function fatal
 | |
| {
 | |
|     echo "$(basename $0): fatal error: $*"
 | |
|     exit 1
 | |
| }
 | |
| 
 | |
| function usage
 | |
| {
 | |
|     echo "Usage:"
 | |
|     echo "  runtests [OPTIONS...]"
 | |
|     echo ""
 | |
|     echo "Options:"
 | |
|     echo "  -f FILTER   Filter pattern (substring match) for test files to run."
 | |
|     echo "  -s          Stop on first error."
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| #---- mainline
 | |
| 
 | |
| start_time=$(date +%s)
 | |
| 
 | |
| API=docker
 | |
| TOP=$(cd $(dirname $0)/../; pwd)
 | |
| NODE_INSTALL=$TOP/build/node
 | |
| OUTPUT_DIR=/var/tmp/${API}test
 | |
| TAPE=$TOP/node_modules/.bin/tape
 | |
| FAILING_LIST=$OUTPUT_DIR/failing-tests.txt
 | |
| 
 | |
| # Options.
 | |
| opt_test_pattern=
 | |
| opt_stop_on_failure=
 | |
| while getopts "hf:s" opt
 | |
| do
 | |
|     case "$opt" in
 | |
|         h)
 | |
|             usage
 | |
|             exit 0
 | |
|             ;;
 | |
|         f)
 | |
|             opt_test_pattern=$OPTARG
 | |
|             ;;
 | |
|         s)
 | |
|             opt_stop_on_failure="true"
 | |
|             ;;
 | |
|         *)
 | |
|             usage
 | |
|             exit 1
 | |
|             ;;
 | |
|     esac
 | |
| done
 | |
| 
 | |
| 
 | |
| # Setup a clean output dir.
 | |
| echo "# Setup a clean output dir ($OUTPUT_DIR)."
 | |
| rm -rf $OUTPUT_DIR
 | |
| mkdir -p /$OUTPUT_DIR
 | |
| touch $FAILING_LIST
 | |
| 
 | |
| cd $TOP
 | |
| 
 | |
| 
 | |
| # Run the integration tests
 | |
| 
 | |
| echo ""
 | |
| test_files=$(ls -1 test/integration/*.test.js)
 | |
| if [[ -n "$opt_test_pattern" ]]; then
 | |
|     test_files=$(echo "$test_files" | grep "$opt_test_pattern" || true)
 | |
|     echo "# Running filtered set of test files: $test_files"
 | |
| fi
 | |
| 
 | |
| set +o errexit
 | |
| 
 | |
| for file in $test_files; do
 | |
|     test_file=$(basename $file)
 | |
|     echo "# $test_file"
 | |
|     PATH=$NODE_INSTALL/bin:$PATH $TAPE $file \
 | |
|         | tee $OUTPUT_DIR/$test_file.tap
 | |
|     if [[ "$?" != "0" ]]; then
 | |
|         echo $file >> $OUTPUT_DIR/failing-tests.txt
 | |
|         [[ -n "$opt_stop_on_failure" ]] && break
 | |
|     fi
 | |
| done
 | |
| 
 | |
| set -o errexit
 | |
| 
 | |
| echo ""
 | |
| echo "# test output in $OUTPUT_DIR:"
 | |
| cd $OUTPUT_DIR
 | |
| ls *.tap
 | |
| 
 | |
| 
 | |
| # Colored summary of results (borrowed from smartos-live.git/src/vm/run-tests).
 | |
| echo ""
 | |
| echo "# test results:"
 | |
| 
 | |
| end_time=$(date +%s)
 | |
| elapsed=$((${end_time} - ${start_time}))
 | |
| 
 | |
| tests=$(grep "^# tests [0-9]" $OUTPUT_DIR/*.tap | cut -d ' ' -f3 | xargs | tr ' ' '+' | bc)
 | |
| passed=$(grep "^# pass  [0-9]" $OUTPUT_DIR/*.tap | tr -s ' ' | cut -d ' ' -f3 | xargs | tr ' ' '+' | bc)
 | |
| [[ -z ${tests} ]] && tests=0
 | |
| [[ -z ${passed} ]] && passed=0
 | |
| fail=$((${tests} - ${passed}))
 | |
| failing_tests=$(cat ${FAILING_LIST} | wc -l)
 | |
| 
 | |
| echo "# Completed in ${elapsed} seconds."
 | |
| echo -e "# \033[32mPASS: ${passed} / ${tests}\033[39m"
 | |
| if [[ ${fail} -gt 0 ]]; then
 | |
|     echo -e "# \033[31mFAIL: ${fail} / ${tests}\033[39m"
 | |
| fi
 | |
| 
 | |
| if [[ ${failing_tests} -gt 0 ]]; then
 | |
|     echo ""
 | |
|     echo -e "# \033[31mFAILING TESTS:\033[39m"
 | |
|     cat $FAILING_LIST | sed -e 's,^,#   ,'
 | |
| fi
 | |
| echo ""
 | |
| 
 | |
| exit $failing_tests
 |