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
99 changes: 8 additions & 91 deletions test/presubmit-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,21 @@
# Use the flags --build-tests, --unit-tests and --integration-tests
# to run a specific set of tests.

# Extensions or file patterns that don't require presubmit tests
readonly NO_PRESUBMIT_FILES=(\.md \.png ^OWNERS)

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

# Helper functions.
# 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

function build_tests() {
header "Running build tests"
go build -v ./cmd/... ./sample/... ./pkg/... || result=1
local result=0
go build -v ./cmd/... ./pkg/... || result=1
# "go build" on //test will fail with "no non-test Go files in ..."
# See https://github.com/golang/go/issues/8279 for details
# Workaround is to use "go test -run" with a non matching pattern
go test -run=^$ -tags=e2e ./test/... || result=1
# kubekins images don't have dep installed by default
subheader "Checking autogenerated code is up-to-date"
go get -u github.com/golang/dep/cmd/dep
./hack/verify-codegen.sh || result=1
return ${result}
}
Expand All @@ -48,90 +46,9 @@ function unit_tests() {
}

function integration_tests() {
# Make sure environment variables are intact.
local options=""
(( EMIT_METRICS )) && options="--emit-metrics"
./test/e2e-tests.sh ${options}
}

# Script entry point.

# Parse script arguments:
# --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
# --emit-metrics: emit metrics when running the E2E tests
RUN_BUILD_TESTS=0
RUN_UNIT_TESTS=0
RUN_INTEGRATION_TESTS=0
EMIT_METRICS=0

all_parameters=$@
[[ -z $1 ]] && all_parameters="--all-tests"

for parameter in ${all_parameters}; do
case $parameter in
--all-tests)
RUN_BUILD_TESTS=1
RUN_UNIT_TESTS=1
RUN_INTEGRATION_TESTS=1
shift
;;
--build-tests)
RUN_BUILD_TESTS=1
shift
;;
--unit-tests)
RUN_UNIT_TESTS=1
shift
;;
--integration-tests)
RUN_INTEGRATION_TESTS=1
shift
;;
--emit-metrics)
EMIT_METRICS=1
shift
;;
*)
echo "error: unknown option ${parameter}"
exit 1
;;
esac
done

readonly RUN_BUILD_TESTS
readonly RUN_UNIT_TESTS
readonly RUN_INTEGRATION_TESTS
readonly EMIT_METRICS

cd ${SERVING_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.

result=0
if (( RUN_BUILD_TESTS )); then
build_tests || result=1
fi
if (( RUN_UNIT_TESTS )); then
unit_tests || result=1
fi
if (( RUN_INTEGRATION_TESTS )); then
integration_tests || result=1
fi
exit ${result}
main $@