mirror of https://github.com/knative/docs.git
138 lines
4.9 KiB
Bash
Executable File
138 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright 2018 The Knative Authors
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# This script runs the end-to-end tests for build templates.
|
|
|
|
# If you already have a Knative cluster setup and kubectl pointing
|
|
# to it, call this script with the --run-tests arguments and it will use
|
|
# the cluster and run the tests.
|
|
|
|
# Calling this script without arguments will create a new cluster in
|
|
# project $PROJECT_ID, run the tests and delete the cluster.
|
|
|
|
source "$(dirname $(readlink -f ${BASH_SOURCE}))/library.sh"
|
|
|
|
# Test cluster parameters and location of test files
|
|
readonly E2E_CLUSTER_NAME=docs-e2e-cluster${BUILD_NUMBER}
|
|
readonly E2E_NETWORK_NAME=docs-e2e-net${BUILD_NUMBER}
|
|
readonly E2E_CLUSTER_ZONE=us-central1-a
|
|
readonly E2E_CLUSTER_NODES=2
|
|
readonly E2E_CLUSTER_MACHINE=n1-standard-2
|
|
readonly TEST_RESULT_FILE=/tmp/docs-e2e-result
|
|
readonly ISTIO_YAML=https://storage.googleapis.com/knative-releases/latest/istio.yaml
|
|
readonly SERVING_RELEASE=https://storage.googleapis.com/knative-releases/latest/release.yaml
|
|
|
|
# This script.
|
|
readonly SCRIPT_CANONICAL_PATH="$(readlink -f ${BASH_SOURCE})"
|
|
|
|
# Helper functions.
|
|
|
|
function exit_if_test_failed() {
|
|
[[ $? -eq 0 ]] && return 0
|
|
[[ -n $1 ]] && echo "ERROR: $1"
|
|
echo "***************************************"
|
|
echo "*** TEST FAILED ***"
|
|
echo "*** Start of information dump ***"
|
|
echo "***************************************"
|
|
echo ">>> All resources:"
|
|
kubectl get all --all-namespaces
|
|
echo "***************************************"
|
|
echo "*** TEST FAILED ***"
|
|
echo "*** End of information dump ***"
|
|
echo "***************************************"
|
|
exit 1
|
|
}
|
|
|
|
# Script entry point.
|
|
|
|
cd ${DOCS_ROOT_DIR}
|
|
|
|
# Show help if bad arguments are passed.
|
|
if [[ -n $1 && $1 != "--run-tests" ]]; then
|
|
echo "usage: $0 [--run-tests]"
|
|
exit 1
|
|
fi
|
|
|
|
# No argument provided, create the test cluster.
|
|
|
|
if [[ -z $1 ]]; then
|
|
header "Creating test cluster"
|
|
# Smallest cluster required to run the end-to-end-tests
|
|
CLUSTER_CREATION_ARGS=(
|
|
--gke-create-args="--enable-autoscaling --min-nodes=1 --max-nodes=${E2E_CLUSTER_NODES} --scopes=cloud-platform"
|
|
--gke-shape={\"default\":{\"Nodes\":${E2E_CLUSTER_NODES}\,\"MachineType\":\"${E2E_CLUSTER_MACHINE}\"}}
|
|
--provider=gke
|
|
--deployment=gke
|
|
--gcp-node-image=cos
|
|
--cluster="${E2E_CLUSTER_NAME}"
|
|
--gcp-zone="${E2E_CLUSTER_ZONE}"
|
|
--gcp-network="${E2E_NETWORK_NAME}"
|
|
--gke-environment=prod
|
|
)
|
|
if (( ! IS_PROW )); then
|
|
CLUSTER_CREATION_ARGS+=(--gcp-project=${PROJECT_ID:?"PROJECT_ID must be set to the GCP project where the tests are run."})
|
|
fi
|
|
# SSH keys are not used, but kubetest checks for their existence.
|
|
# Touch them so if they don't exist, empty files are create to satisfy the check.
|
|
touch $HOME/.ssh/google_compute_engine.pub
|
|
touch $HOME/.ssh/google_compute_engine
|
|
# Assume test failed (see more details at the end of this script).
|
|
echo -n "1"> ${TEST_RESULT_FILE}
|
|
kubetest "${CLUSTER_CREATION_ARGS[@]}" \
|
|
--up \
|
|
--down \
|
|
--extract "gke-${GKE_VERSION}" \
|
|
--test-cmd "${SCRIPT_CANONICAL_PATH}" \
|
|
--test-cmd-args --run-tests
|
|
result="$(cat ${TEST_RESULT_FILE})"
|
|
echo "Test result code is $result"
|
|
exit $result
|
|
fi
|
|
|
|
# --run-tests passed as first argument, run the tests.
|
|
|
|
# Install Knative Serving if not using an existing cluster
|
|
if (( IS_PROW )) || [[ -n ${PROJECT_ID} ]]; then
|
|
header "Starting Knative Serving"
|
|
acquire_cluster_admin_role $(gcloud config get-value core/account) ${E2E_CLUSTER_NAME} ${E2E_CLUSTER_ZONE}
|
|
subheader "Installing Istio"
|
|
kubectl apply -f ${ISTIO_YAML}
|
|
wait_until_pods_running istio-system
|
|
exit_if_test_failed "could not install Istio"
|
|
kubectl label namespace default istio-injection=enabled
|
|
|
|
subheader "Installing Knative Serving"
|
|
kubectl apply -f ${SERVING_RELEASE}
|
|
exit_if_test_failed "could not install Knative Serving"
|
|
|
|
wait_until_pods_running knative-serving
|
|
wait_until_pods_running build-system
|
|
fi
|
|
|
|
# TODO(#30): Add tests.
|
|
header "TODO(#30): Write integration tests"
|
|
|
|
# kubetest teardown might fail and thus incorrectly report failure of the
|
|
# script, even if the tests pass.
|
|
# We store the real test result to return it later, ignoring any teardown
|
|
# failure in kubetest.
|
|
# TODO(adrcunha): Get rid of this workaround.
|
|
echo -n "0"> ${TEST_RESULT_FILE}
|
|
echo "**************************************"
|
|
echo "*** ALL TESTS PASSED ***"
|
|
echo "**************************************"
|
|
exit 0
|