From b1e2b2f4b483422f743996b29af5251b906bd032 Mon Sep 17 00:00:00 2001 From: Piotr Szczesniak Date: Mon, 9 Mar 2015 14:33:23 +0100 Subject: [PATCH] Improved guestbook.sh test to become actual test After change test waits until pods come up and frotend starts serving content, then adds entry to guestbook and verify if operation succeed This fixes #3693 --- hack/e2e-suite/guestbook.sh | 67 ++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 9 deletions(-) diff --git a/hack/e2e-suite/guestbook.sh b/hack/e2e-suite/guestbook.sh index d25a261cb2b..3226e237f28 100755 --- a/hack/e2e-suite/guestbook.sh +++ b/hack/e2e-suite/guestbook.sh @@ -41,6 +41,36 @@ function teardown() { local REGION=${ZONE%-*} gcloud compute forwarding-rules delete -q --region ${REGION} "${INSTANCE_PREFIX}-default-frontend" || true gcloud compute target-pools delete -q --region ${REGION} "${INSTANCE_PREFIX}-default-frontend" || true + gcloud compute firewall-rules delete guestbook-e2e-minion-8000 -q || true + fi +} + +function wait_for_running() { + echo "Waiting for pods to come up." + local frontends master slaves pods all_running status i pod + frontends=($(${KUBECTL} get pods -l name=frontend -o template '--template={{range.items}}{{.id}} {{end}}')) + master=($(${KUBECTL} get pods -l name=redis-master -o template '--template={{range.items}}{{.id}} {{end}}')) + slaves=($(${KUBECTL} get pods -l name=redis-slave -o template '--template={{range.items}}{{.id}} {{end}}')) + pods=("${frontends[@]}" "${master[@]}" "${slaves[@]}") + + all_running=0 + for i in {1..30}; do + all_running=1 + for pod in "${pods[@]}"; do + status=$(${KUBECTL} get pods "${pod}" -o template '--template={{.currentState.status}}') || true + if [[ "$status" != "Running" ]]; then + all_running=0 + break + fi + done + if [[ "${all_running}" == 1 ]]; then + break + fi + sleep 10 + done + if [[ "${all_running}" == 0 ]]; then + echo "Pods did not come up in time" + return 1 fi } @@ -48,21 +78,40 @@ prepare-e2e trap "teardown" EXIT -echo "WARNING: this test is a no op that only attempts to launch guestbook resources." # Launch the guestbook example ${KUBECTL} create -f "${GUESTBOOK}" -sleep 15 +# Verify that all pods are running +wait_for_running -POD_LIST_1=$(${KUBECTL} get pods -o template '--template={{range.items}}{{.id}} {{end}}') -echo "Pods running: ${POD_LIST_1}" +if [[ "${KUBERNETES_PROVIDER}" == "gce" ]]; then + gcloud compute firewall-rules create --allow=tcp:8000 --network="${NETWORK}" --target-tags="${MINION_TAG}" guestbook-e2e-minion-8000 +fi -# TODO make this an actual test. Open up a firewall and use curl to post and -# read a message via the frontend +# Add a new entry to the guestbook and verify that it was remembered +frontend_addr=$(${KUBECTL} get service frontend -o template '--template={{range .publicIPs}}{{.}}{{end}}:{{.port}}') +echo "Waiting for frontend to serve content" +serving=0 +for i in {1..12}; do + entry=$(curl "http://${frontend_addr}/index.php?cmd=get&key=messages") || true + echo ${entry} + if [[ "${entry}" == '{"data": ""}' ]]; then + serving=1 + break + fi + sleep 10 +done +if [[ "${serving}" == 0 ]]; then + echo "Pods did not start serving content in time" + exit 1 +fi -${KUBECTL} stop -f "${GUESTBOOK}" +curl "http://${frontend_addr}/index.php?cmd=set&key=messages&value=TestEntry" +entry=$(curl "http://${frontend_addr}/index.php?cmd=get&key=messages") -POD_LIST_2=$(${KUBECTL} get pods -o template '--template={{range.items}}{{.id}} {{end}}') -echo "Pods running after shutdown: ${POD_LIST_2}" +if [[ "${entry}" != '{"data": "TestEntry"}' ]]; then + echo "Wrong entry received: ${entry}" + exit 1 +fi exit 0