Improvements to the test runners

1. Use `go list` to get list of integration dirs to build. This means we
   do not need to have a valid `.go` in every subdirectory and also
   filters out other dirs like "bundles" which may have been created.
2. Add option to specify custom flags for integration and
   integration-cli. This is needed so both suites can be run AND set
   custom flags... since the cli suite does not support standard go
   flags.
3. Add options to skip an entire integration suite.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
This commit is contained in:
Brian Goff 2019-07-29 15:00:55 -07:00
parent 9c92080b13
commit abece9b562
9 changed files with 47 additions and 26 deletions

View file

@ -54,9 +54,13 @@ DOCKER_ENVS := \
-e DOCKER_USERLANDPROXY \ -e DOCKER_USERLANDPROXY \
-e DOCKERD_ARGS \ -e DOCKERD_ARGS \
-e TEST_INTEGRATION_DIR \ -e TEST_INTEGRATION_DIR \
-e TEST_SKIP_INTEGRATION \
-e TEST_SKIP_INTEGRATION_CLI \
-e TESTDEBUG \ -e TESTDEBUG \
-e TESTDIRS \ -e TESTDIRS \
-e TESTFLAGS \ -e TESTFLAGS \
-e TESTFLAGS_INTEGRATION \
-e TESTFLAGS_INTEGRATION_CLI \
-e TIMEOUT \ -e TIMEOUT \
-e VALIDATE_REPO \ -e VALIDATE_REPO \
-e VALIDATE_BRANCH \ -e VALIDATE_BRANCH \
@ -182,8 +186,13 @@ test-docker-py: build ## run the docker-py tests
test-integration-cli: test-integration ## (DEPRECATED) use test-integration test-integration-cli: test-integration ## (DEPRECATED) use test-integration
ifneq ($(and $(TEST_SKIP_INTEGRATION),$(TEST_SKIP_INTEGRATION_CLI)),)
test-integration:
@echo Both integrations suites skipped per environment variables
else
test-integration: build ## run the integration tests test-integration: build ## run the integration tests
$(DOCKER_RUN_DOCKER) hack/make.sh dynbinary test-integration $(DOCKER_RUN_DOCKER) hack/make.sh dynbinary test-integration
endif
test-integration-flaky: build ## run the stress test for all new integration tests test-integration-flaky: build ## run the stress test for all new integration tests
$(DOCKER_RUN_DOCKER) hack/make.sh dynbinary test-integration-flaky $(DOCKER_RUN_DOCKER) hack/make.sh dynbinary test-integration-flaky

View file

@ -327,19 +327,16 @@ Function Run-UnitTests() {
# Run the integration tests # Run the integration tests
Function Run-IntegrationTests() { Function Run-IntegrationTests() {
$env:DOCKER_INTEGRATION_DAEMON_DEST = $root + "\bundles\tmp" $env:DOCKER_INTEGRATION_DAEMON_DEST = $root + "\bundles\tmp"
$dirs = Get-ChildItem -Path integration -Directory -Recurse $dirs = go list -test -f '{{- if ne .ForTest `"`" -}}{{- .Dir -}}{{- end -}}' .\integration\...
$integration_api_dirs = @() $integration_api_dirs = @()
ForEach($dir in $dirs) { ForEach($dir in $dirs) {
$RelativePath = "." + $dir.FullName -replace "$($PWD.Path -replace "\\","\\")","" $integration_api_dirs += $dir
If ($RelativePath -notmatch '(^.\\integration($|\\internal)|\\testdata)') { Write-Host "Building test suite binary $dir"
$integration_api_dirs += $dir go test -c -o "$dir\test.exe" $dir
Write-Host "Building test suite binary $RelativePath"
go test -c -o "$RelativePath\test.exe" $RelativePath
}
} }
ForEach($dir in $integration_api_dirs) { ForEach($dir in $integration_api_dirs) {
Set-Location $dir.FullName Set-Location $dir
Write-Host "Running $($PWD.Path)" Write-Host "Running $($PWD.Path)"
$pinfo = New-Object System.Diagnostics.ProcessStartInfo $pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "$($PWD.Path)\test.exe" $pinfo.FileName = "$($PWD.Path)\test.exe"

View file

@ -5,6 +5,18 @@
# #
# TESTFLAGS='-check.f DockerSuite.TestBuild*' ./hack/make.sh binary test-integration # TESTFLAGS='-check.f DockerSuite.TestBuild*' ./hack/make.sh binary test-integration
# #
if [[ "${TESTFLAGS}" = *-check.f* ]]; then
echo Skipping integration tests since TESTFLAGS includes integration-cli only flags
TEST_SKIP_INTEGRATION=1
fi
if [[ "${TESTFLAGS}" = *-test.run* ]]; then
echo Skipping integration-cli tests since TESTFLAGS includes integration only flags
TEST_SKIP_INTEGRATION_CLI=1
fi
if [ -z ${MAKEDIR} ]; then if [ -z ${MAKEDIR} ]; then
export MAKEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" export MAKEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
fi fi
@ -15,26 +27,24 @@ source "$MAKEDIR/.go-autogen"
: ${TESTFLAGS:=} : ${TESTFLAGS:=}
: ${TESTDEBUG:=} : ${TESTDEBUG:=}
integration_api_dirs=${TEST_INTEGRATION_DIR:-"$( integration_api_dirs=${TEST_INTEGRATION_DIR:-"$(go list -test -f '{{- if ne .ForTest "" -}}{{- .Dir -}}{{- end -}}' ./integration/...)"}
find ./integration -type d |
grep -vE '(^./integration($|/internal)|/testdata)')"}
run_test_integration() { run_test_integration() {
set_platform_timeout set_platform_timeout
if [[ "$TESTFLAGS" != *-check.f* ]]; then if [ -z "${TEST_SKIP_INTEGRATION}" ]; then
run_test_integration_suites run_test_integration_suites
fi fi
if [[ "$TESTFLAGS" != *-test.run* ]]; then if [ -z "${TEST_SKIP_INTEGRATION_CLI}" ]; then
run_test_integration_legacy_suites run_test_integration_legacy_suites
fi fi
} }
run_test_integration_suites() { run_test_integration_suites() {
local flags="-test.v -test.timeout=${TIMEOUT} $TESTFLAGS" local flags="-test.v -test.timeout=${TIMEOUT} $TESTFLAGS ${TESTFLAGS_INTEGRATION}"
for dir in ${integration_api_dirs}; do for dir in ${integration_api_dirs}; do
if ! ( if ! (
cd "$dir" cd "$dir"
echo "Running $PWD" echo "Running $PWD flags=${flags}"
test_env ./test.main ${flags} test_env ./test.main ${flags}
); then exit 1; fi ); then exit 1; fi
done done
@ -42,9 +52,9 @@ run_test_integration_suites() {
run_test_integration_legacy_suites() { run_test_integration_legacy_suites() {
( (
flags="-check.v -check.timeout=${TIMEOUT} -test.timeout=360m $TESTFLAGS" flags="-check.v -check.timeout=${TIMEOUT} -test.timeout=360m $TESTFLAGS ${TESTFLAGS_INTEGRATION_CLI}"
cd integration-cli cd integration-cli
echo "Running $PWD" echo "Running $PWD flags=${flags}"
test_env ./test.main $flags test_env ./test.main $flags
) )
} }
@ -54,10 +64,14 @@ build_test_suite_binaries() {
echo "Skipping building test binaries; as DOCKER_INTEGRATION_TESTS_VERIFIED is set" echo "Skipping building test binaries; as DOCKER_INTEGRATION_TESTS_VERIFIED is set"
return return
fi fi
build_test_suite_binary ./integration-cli "test.main" if [ -z "${TEST_SKIP_INTEGRATION_CLI}" ]; then
for dir in ${integration_api_dirs}; do build_test_suite_binary ./integration-cli "test.main"
build_test_suite_binary "$dir" "test.main" fi
done if [ -z "${TEST_SKIP_INTEGRATION}" ]; then
for dir in ${integration_api_dirs}; do
build_test_suite_binary "$dir" "test.main"
done
fi
} }
# Build a binary for a test suite package # Build a binary for a test suite package

View file

@ -3,6 +3,12 @@ set -e -o pipefail
source hack/make/.integration-test-helpers source hack/make/.integration-test-helpers
if [ ! -z "${TEST_SKIP_INTEGRATION}" ] && [ ! -z "${TEST_SKIP_INTEGRATION_CLI}" ]; then
echo integration and integraiton-cli skipped according to env vars
exit 0
fi
( (
build_test_suite_binaries build_test_suite_binaries
bundle .integration-daemon-start bundle .integration-daemon-start

View file

@ -1 +0,0 @@
package main

View file

@ -1 +0,0 @@
package cmd

View file

@ -1 +0,0 @@
package main

View file

@ -1 +0,0 @@
package cmd

View file

@ -1 +0,0 @@
package main