diff --git a/hack/test-cmd.sh b/hack/test-cmd.sh index 8178819119e..528b43ed7e8 100755 --- a/hack/test-cmd.sh +++ b/hack/test-cmd.sh @@ -109,6 +109,7 @@ function check-curl-proxy-code() function kubectl-with-retry() { ERROR_FILE="${KUBE_TEMP}/kubectl-error" + preserve_err_file=${PRESERVE_ERR_FILE-false} for count in $(seq 0 3); do kubectl "$@" 2> ${ERROR_FILE} || true if grep -q "the object has been modified" "${ERROR_FILE}"; then @@ -116,7 +117,9 @@ function kubectl-with-retry() rm "${ERROR_FILE}" sleep $((2**count)) else - rm "${ERROR_FILE}" + if [ "$preserve_err_file" != true ] ; then + rm "${ERROR_FILE}" + fi break fi done @@ -1060,7 +1063,7 @@ __EOF__ kube::test::get_object_assert 'rc busybox1' "{{$rc_replicas_field}}" '1' # Command output_message=$(! kubectl scale --current-replicas=1 --replicas=2 -f hack/testdata/recursive/rc --recursive 2>&1 "${kube_flags[@]}") - # Post-condition: busybox0 & busybox replication controllers are scaled to 2 # replicas, and since busybox2 is malformed, it should error + # Post-condition: busybox0 & busybox1 replication controllers are scaled to 2 replicas, and since busybox2 is malformed, it should error kube::test::get_object_assert 'rc busybox0' "{{$rc_replicas_field}}" '2' kube::test::get_object_assert 'rc busybox1' "{{$rc_replicas_field}}" '2' kube::test::if_has_string "${output_message}" "Object 'Kind' is missing" @@ -1074,7 +1077,7 @@ __EOF__ kube::test::get_object_assert pods "{{range.items}}{{$id_field}}:{{end}}" '' kube::test::if_has_string "${output_message}" "Object 'Kind' is missing" - ### Rollback a deployment + ### Rollout on multiple deployments recursively # Pre-condition: no deployments exist kube::test::get_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" '' # Command @@ -1082,45 +1085,58 @@ __EOF__ ! kubectl create -f hack/testdata/recursive/deployment --recursive "${kube_flags[@]}" kube::test::get_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" 'nginx0-deployment:nginx1-deployment:' kube::test::get_object_assert deployment "{{range.items}}{{$deployment_image_field}}:{{end}}" "${IMAGE_NGINX}:${IMAGE_NGINX}:" - ## Rollback to revision 1 - should be no-op + ## Rollback the deployments to revision 1 recursively output_message=$(! kubectl rollout undo -f hack/testdata/recursive/deployment --recursive --to-revision=1 2>&1 "${kube_flags[@]}") + # Post-condition: nginx0 & nginx1 should be a no-op, and since nginx2 is malformed, it should error kube::test::get_object_assert deployment "{{range.items}}{{$deployment_image_field}}:{{end}}" "${IMAGE_NGINX}:${IMAGE_NGINX}:" kube::test::if_has_string "${output_message}" "Object 'Kind' is missing" - ## Pause the deployment - output_message=$(! kubectl rollout pause -f hack/testdata/recursive/deployment --recursive 2>&1 "${kube_flags[@]}") + ## Pause the deployments recursively + PRESERVE_ERR_FILE=true + kubectl-with-retry rollout pause -f hack/testdata/recursive/deployment --recursive "${kube_flags[@]}" + output_message=$(cat ${ERROR_FILE}) + # Post-condition: nginx0 & nginx1 should both have paused set to true, and since nginx2 is malformed, it should error kube::test::get_object_assert deployment "{{range.items}}{{.spec.paused}}:{{end}}" "true:true:" kube::test::if_has_string "${output_message}" "Object 'Kind' is missing" - ## Resume the deployment - output_message=$(! kubectl rollout resume -f hack/testdata/recursive/deployment --recursive 2>&1 "${kube_flags[@]}") + ## Resume the deployments recursively + kubectl-with-retry rollout resume -f hack/testdata/recursive/deployment --recursive "${kube_flags[@]}" + output_message=$(cat ${ERROR_FILE}) + # Post-condition: nginx0 & nginx1 should both have paused set to nothing, and since nginx2 is malformed, it should error kube::test::get_object_assert deployment "{{range.items}}{{.spec.paused}}:{{end}}" "::" kube::test::if_has_string "${output_message}" "Object 'Kind' is missing" + ## Retrieve the rollout history of the deployments recursively output_message=$(! kubectl rollout history -f hack/testdata/recursive/deployment --recursive 2>&1 "${kube_flags[@]}") + # Post-condition: nginx0 & nginx1 should both have a history, and since nginx2 is malformed, it should error kube::test::if_has_string "${output_message}" "nginx0-deployment" kube::test::if_has_string "${output_message}" "nginx1-deployment" kube::test::if_has_string "${output_message}" "Object 'Kind' is missing" # Clean up + unset PRESERVE_ERR_FILE + rm "${ERROR_FILE}" ! kubectl delete -f hack/testdata/recursive/deployment --recursive "${kube_flags[@]}" --grace-period=0 sleep 1 - ### Rollback a resource that cannot be rolled back (replication controller) + ### Rollout on multiple replication controllers recursively - these tests ensure that rollouts cannot be performed on resources that don't support it # Pre-condition: no replication controller exists kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" '' # Command - # Create replication controllers (revision 1) recursively from directory of YAML files + # Create replication controllers recursively from directory of YAML files ! kubectl create -f hack/testdata/recursive/rc --recursive "${kube_flags[@]}" kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" 'busybox0:busybox1:' # Command - ## Rollback to revision 1 - should be no-op + ## Attempt to rollback the replication controllers to revision 1 recursively output_message=$(! kubectl rollout undo -f hack/testdata/recursive/rc --recursive --to-revision=1 2>&1 "${kube_flags[@]}") + # Post-condition: busybox0 & busybox1 should error as they are RC's, and since busybox2 is malformed, it should error kube::test::if_has_string "${output_message}" 'no rollbacker has been implemented for {"" "ReplicationController"}' kube::test::if_has_string "${output_message}" "Object 'Kind' is missing" - ## Pause the deployment + ## Attempt to pause the replication controllers recursively output_message=$(! kubectl rollout pause -f hack/testdata/recursive/rc --recursive 2>&1 "${kube_flags[@]}") + # Post-condition: busybox0 & busybox1 should error as they are RC's, and since busybox2 is malformed, it should error kube::test::if_has_string "${output_message}" 'error when pausing "hack/testdata/recursive/rc/busybox.yaml' kube::test::if_has_string "${output_message}" 'error when pausing "hack/testdata/recursive/rc/rc/busybox.yaml' kube::test::if_has_string "${output_message}" "Object 'Kind' is missing" - ## Resume the deployment + ## Attempt to resume the replication controllers recursively output_message=$(! kubectl rollout resume -f hack/testdata/recursive/rc --recursive 2>&1 "${kube_flags[@]}") + # Post-condition: busybox0 & busybox1 should error as they are RC's, and since busybox2 is malformed, it should error kube::test::if_has_string "${output_message}" 'error when resuming "hack/testdata/recursive/rc/busybox.yaml' kube::test::if_has_string "${output_message}" 'error when resuming "hack/testdata/recursive/rc/rc/busybox.yaml' kube::test::if_has_string "${output_message}" "Object 'Kind' is missing"