Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 12 additions & 60 deletions test/presubmit-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,84 +21,36 @@
# Use the flags --build-tests, --unit-tests and --integration-tests
# to run a specific set of tests.

set -o errexit
set -o pipefail

# Extensions or file patterns that don't require presubmit tests
readonly NO_PRESUBMIT_FILES=(\.md \.png ^OWNERS)
# Load github.com/knative/test-infra/images/prow-tests/scripts/presubmit-tests.sh
[ -f /workspace/presubmit-tests.sh ] \
&& source /workspace/presubmit-tests.sh \
|| eval "$(docker run --entrypoint sh gcr.io/knative-tests/test-infra/prow-tests -c 'cat presubmit-tests.sh')"
[ -v KNATIVE_TEST_INFRA ] || exit 1

# Directories with code to build/test
readonly CODE_PACKAGES=(cmd pkg sample)

source "$(dirname $(readlink -f ${BASH_SOURCE}))/library.sh"

# Convert list of packages into list of dirs for go
CODE_PACKAGES_STR="${CODE_PACKAGES[*]}"
CODE_PACKAGES_STR="./${CODE_PACKAGES_STR// /\/... .\/}/..."
readonly CODE_PACKAGES_STR

# Helper functions.

function build_tests() {
header "Running build tests"
go build -v ${CODE_PACKAGES_STR}
echo "Code built successfully"
# kubekins images don't have dep installed by default
go get -u github.com/golang/dep/cmd/dep
./hack/verify-codegen.sh
local result=0
go build -v ${CODE_PACKAGES_STR} || result=1
subheader "Checking autogenerated code is up-to-date"
./hack/verify-codegen.sh || result=1
return ${result}
}

function unit_tests() {
header "Running unit tests"
go test -v ${CODE_PACKAGES_STR}
report_go_test ${CODE_PACKAGES_STR}
}

function integration_tests() {
# Make sure environment variables are intact.
./test/e2e-tests.sh
}

# Script entry point.

# Parse script argument:
# --all-tests or no arguments: run all tests
# --build-tests: run only the build tests
# --unit-tests: run only the unit tests
# --integration-tests: run only the integration tests
RUN_BUILD_TESTS=0
RUN_UNIT_TESTS=0
RUN_INTEGRATION_TESTS=0
[[ -z "$1" || "$1" == "--all-tests" ]] && RUN_BUILD_TESTS=1 && RUN_UNIT_TESTS=1 && RUN_INTEGRATION_TESTS=1
[[ "$1" == "--build-tests" ]] && RUN_BUILD_TESTS=1
[[ "$1" == "--unit-tests" ]] && RUN_UNIT_TESTS=1
[[ "$1" == "--integration-tests" ]] && RUN_INTEGRATION_TESTS=1
readonly RUN_BUILD_TESTS
readonly RUN_UNIT_TESTS
readonly RUN_INTEGRATION_TESTS

if ! (( RUN_BUILD_TESTS+RUN_UNIT_TESTS+RUN_INTEGRATION_TESTS )); then
echo "error: unknown argument $1";
exit 1
fi

cd ${EVENTING_ROOT_DIR}

# Skip presubmit tests if only markdown files were changed.
if [[ -n "${PULL_PULL_SHA}" ]]; then
# On a presubmit job
changes="$(git diff --name-only ${PULL_PULL_SHA} ${PULL_BASE_SHA})"
no_presubmit_pattern="${NO_PRESUBMIT_FILES[*]}"
no_presubmit_pattern="\(${no_presubmit_pattern// /\\|}\)$"
echo -e "Changed files in commit ${PULL_PULL_SHA}:\n${changes}"
if [[ -z "$(echo "${changes}" | grep -v ${no_presubmit_pattern})" ]]; then
# Nothing changed other than files that don't require presubmit tests
header "Commit only contains changes that don't affect tests, skipping"
exit 0
fi
fi

# Tests to be performed, in the right order if --all-tests is passed.

if (( RUN_BUILD_TESTS )); then build_tests; fi
if (( RUN_UNIT_TESTS )); then unit_tests; fi
if (( RUN_INTEGRATION_TESTS )); then integration_tests; fi
main $@