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