From d937f6f776c3bc92bdc40f6c14d93f3eb39d6017 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Thu, 12 Jun 2014 21:17:25 -0700 Subject: [PATCH 1/2] working on a better e2e test --- cluster/config-test.sh | 2 +- hack/e2e-test.sh | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/cluster/config-test.sh b/cluster/config-test.sh index aceef0482fd..aa0df6e22d7 100755 --- a/cluster/config-test.sh +++ b/cluster/config-test.sh @@ -16,7 +16,7 @@ ZONE=us-central1-b MASTER_SIZE=g1-small MINION_SIZE=g1-small -NUM_MINIONS=2 +NUM_MINIONS=3 # gcloud/gcutil will expand this to the latest supported image. IMAGE=backports-debian-7-wheezy NETWORK=default diff --git a/hack/e2e-test.sh b/hack/e2e-test.sh index 72051a609ec..1e95f48d341 100755 --- a/hack/e2e-test.sh +++ b/hack/e2e-test.sh @@ -50,12 +50,26 @@ gcutil addfirewall \ --norespect_terminal_width \ --project ${PROJECT} \ --target_tags ${MINION_TAG} \ - --allowed tcp:8080 \ + --allowed tcp:80 \ --network ${NETWORK} \ ${MINION_TAG}-http-alt & -# Launch a container -$(dirname $0)/../cluster/cloudcfg.sh -p 8080:80 run dockerfile/nginx 2 myNginx +CLOUDCGF="$(dirname $0)/../cluster/cloudcfg.sh" +GUESTBOOK="$(dirname $0)/../.examples/guestbook" + +# Launch the guestbook example +$CLOUDCFG -c "${GUESTBOOK}/redis-master.json" create /pods +$CLOUDCFG -c "${GUESTBOOK}/redis-master-service.json" create /services +$CLOUDCFG -c "${GUESTBOOK}/redis-slave-controller.json" create /replicationControllers + +sleep 5 + +# Count number of pods-- should be 5 plus two lines of header +PODS_FOUND=$($CLOUDCFG list pods | wc -l) + +echo $PODS_FOUND + +exit 0 # Container turn up on a clean cluster can take a while for the docker image pull. # Sleep for 2 minutes just to be sure. From de3ae061eee7d96ccdc8c09fd27e8f9e766ce466 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Fri, 13 Jun 2014 12:35:03 -0700 Subject: [PATCH 2/2] Split up e2e test code. More e2e tests on the way. --- hack/e2e-suite/basic.sh | 47 ++++++++++++++++++++++++++ hack/e2e-test.sh | 74 +++++++++++++++++------------------------ 2 files changed, 77 insertions(+), 44 deletions(-) create mode 100755 hack/e2e-suite/basic.sh diff --git a/hack/e2e-suite/basic.sh b/hack/e2e-suite/basic.sh new file mode 100755 index 00000000000..bbfe8cef9bb --- /dev/null +++ b/hack/e2e-suite/basic.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# Copyright 2014 Google Inc. All rights reserved. +# +# 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. + +# Launches an nginx container and verifies it can be reached. Assumes that +# we're being called by hack/e2e-test.sh (we use some env vars it sets up). + +# Exit on error +set -e + +source "${KUBE_REPO_ROOT}/cluster/util.sh" +detect-project + +# Launch a container +$CLOUDCFG -p 8080:80 run dockerfile/nginx 2 myNginx + +# Container turn up on a clean cluster can take a while for the docker image pull. +# Sleep for 2 minutes just to be sure. +echo "Waiting for containers to come up." +sleep 120 + +# Get minion IP addresses +detect-minions + +# Verify that something is listening (nginx should give us a 404) +for (( i=0; i<${#KUBE_MINION_IP_ADDRESSES[@]}; i++)); do + IP_ADDRESS=${KUBE_MINION_IP_ADDRESSES[$i]} + echo "Trying to reach nginx instance that should be running at ${IP_ADDRESS}:8080..." + curl "http://${IP_ADDRESS}:8080" +done + +$CLOUDCFG stop myNginx +$CLOUDCFG rm myNginx + +exit 0 diff --git a/hack/e2e-test.sh b/hack/e2e-test.sh index 1e95f48d341..a46a20a1567 100755 --- a/hack/e2e-test.sh +++ b/hack/e2e-test.sh @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Starts a Kubernetes cluster, verifies it can do basic things, and shuts it +# Starts a Kubernetes cluster, runs the e2e test suite, and shuts it # down. # Exit on error @@ -22,7 +22,10 @@ set -e # Use testing config export KUBE_CONFIG_FILE="config-test.sh" -source $(dirname $0)/../cluster/util.sh +export KUBE_REPO_ROOT="$(dirname $0)/.." +export CLOUDCFG="${KUBE_REPO_ROOT}/cluster/cloudcfg.sh" + +source "${KUBE_REPO_ROOT}/cluster/util.sh" # Build a release $(dirname $0)/../release/release.sh @@ -30,6 +33,21 @@ $(dirname $0)/../release/release.sh # Now bring a test cluster up with that release. $(dirname $0)/../cluster/kube-up.sh +# Detect the project into $PROJECT if it isn't set +detect-project + +set +e + +# Open up port 80 & 8080 so common containers on minions can be reached +gcutil addfirewall \ + --norespect_terminal_width \ + --project ${PROJECT} \ + --target_tags ${MINION_TAG} \ + --allowed tcp:80 \ + --allowed tcp:8080 \ + --network ${NETWORK} \ + ${MINION_TAG}-http-alt + # Auto shutdown cluster when we exit function shutdown-test-cluster () { echo "Shutting down test cluster in background." @@ -42,47 +60,15 @@ function shutdown-test-cluster () { } trap shutdown-test-cluster EXIT -# Detect the project into $PROJECT if it isn't set -detect-project - -# Open up port 8080 so nginx containers on minions can be reached -gcutil addfirewall \ - --norespect_terminal_width \ - --project ${PROJECT} \ - --target_tags ${MINION_TAG} \ - --allowed tcp:80 \ - --network ${NETWORK} \ - ${MINION_TAG}-http-alt & - -CLOUDCGF="$(dirname $0)/../cluster/cloudcfg.sh" -GUESTBOOK="$(dirname $0)/../.examples/guestbook" - -# Launch the guestbook example -$CLOUDCFG -c "${GUESTBOOK}/redis-master.json" create /pods -$CLOUDCFG -c "${GUESTBOOK}/redis-master-service.json" create /services -$CLOUDCFG -c "${GUESTBOOK}/redis-slave-controller.json" create /replicationControllers - -sleep 5 - -# Count number of pods-- should be 5 plus two lines of header -PODS_FOUND=$($CLOUDCFG list pods | wc -l) - -echo $PODS_FOUND - -exit 0 - -# Container turn up on a clean cluster can take a while for the docker image pull. -# Sleep for 2 minutes just to be sure. -echo "Waiting for containers to come up." -sleep 120 - -# Get minion IP addresses -detect-minions - -# Verify that something is listening (nginx should give us a 404) -for (( i=0; i<${#KUBE_MINION_IP_ADDRESSES[@]}; i++)); do - IP_ADDRESS=${KUBE_MINION_IP_ADDRESSES[$i]} - echo "Trying to reach nginx instance that should be running at ${IP_ADDRESS}:8080..." - curl "http://${IP_ADDRESS}:8080" +any_failed=0 +for test_file in "$(dirname $0)/e2e-suite/*.sh"; do + $test_file + if [[ -z $? ]]; then + echo "${test_file}: passed!" + else + echo "${test_file}: FAILED!" + any_failed=1 + fi done +exit ${any_failed}