mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			137 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
# Copyright 2018 The Kubernetes 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.
 | 
						|
 | 
						|
set -o errexit
 | 
						|
set -o nounset
 | 
						|
set -o pipefail
 | 
						|
 | 
						|
run_wait_tests() {
 | 
						|
    set -o nounset
 | 
						|
    set -o errexit
 | 
						|
 | 
						|
    kube::log::status "Testing kubectl wait"
 | 
						|
 | 
						|
    create_and_use_new_namespace
 | 
						|
 | 
						|
    # wait --for=create should time out
 | 
						|
    set +o errexit
 | 
						|
    # Command: Wait with jsonpath support fields not exist in the first place
 | 
						|
    output_message=$(kubectl wait --for=create deploy/test-1 --timeout=1s 2>&1)
 | 
						|
    set -o errexit
 | 
						|
 | 
						|
    # Post-Condition: Wait failed
 | 
						|
    kube::test::if_has_string "${output_message}" 'timed out waiting for the condition'
 | 
						|
 | 
						|
    # create test data
 | 
						|
    kubectl create deployment test-1 --image=busybox
 | 
						|
    kubectl create deployment test-2 --image=busybox
 | 
						|
 | 
						|
    # Post-Condition: deployments exists
 | 
						|
    kube::test::get_object_assert "deployments" "{{range .items}}{{.metadata.name}},{{end}}" 'test-1,test-2,'
 | 
						|
 | 
						|
    # wait with jsonpath will timout for busybox deployment
 | 
						|
    set +o errexit
 | 
						|
    # Command: Wait with jsonpath support fields not exist in the first place
 | 
						|
    output_message=$(kubectl wait --for=jsonpath=.status.readyReplicas=1 deploy/test-1 2>&1)
 | 
						|
    set -o errexit
 | 
						|
 | 
						|
    # Post-Condition: Wait failed
 | 
						|
    kube::test::if_has_string "${output_message}" 'timed out'
 | 
						|
 | 
						|
    # wait with mixed case jsonpath
 | 
						|
    output_message=$(kubectl wait --for=jsonpath=.status.unavailableReplicas=1 deploy/test-1 2>&1)
 | 
						|
 | 
						|
    # Post-Condition: Wait failed
 | 
						|
    kube::test::if_has_string "${output_message}" 'test-1 condition met'
 | 
						|
 | 
						|
    # Delete all deployments async to kubectl wait
 | 
						|
    ( sleep 2 && kubectl delete deployment --all ) &
 | 
						|
 | 
						|
    # Command: Wait for all deployments to be deleted
 | 
						|
    output_message=$(kubectl wait deployment --for=delete --all)
 | 
						|
 | 
						|
    # Post-Condition: Wait was successful
 | 
						|
    kube::test::if_has_string "${output_message}" 'test-1 condition met'
 | 
						|
    kube::test::if_has_string "${output_message}" 'test-2 condition met'
 | 
						|
 | 
						|
    # create test data to test timeout error is occurred in correct time
 | 
						|
    kubectl apply -f - <<EOF
 | 
						|
apiVersion: apps/v1
 | 
						|
kind: Deployment
 | 
						|
metadata:
 | 
						|
  labels:
 | 
						|
    app: dtest
 | 
						|
  name: dtest
 | 
						|
spec:
 | 
						|
  replicas: 3
 | 
						|
  selector:
 | 
						|
    matchLabels:
 | 
						|
      app: dtest
 | 
						|
  template:
 | 
						|
    metadata:
 | 
						|
      labels:
 | 
						|
        app: dtest
 | 
						|
    spec:
 | 
						|
      containers:
 | 
						|
      - name: bb
 | 
						|
        image: busybox
 | 
						|
        command: ["/bin/sh", "-c", "sleep infinity"]
 | 
						|
EOF
 | 
						|
 | 
						|
    # Make sure deployment is successfully applied
 | 
						|
    kube::test::wait_object_assert deployments "{{range.items}}{{${id_field:?}}}{{end}}" 'dtest'
 | 
						|
 | 
						|
    set +o errexit
 | 
						|
    # wait timeout error because condition is invalid
 | 
						|
    start_sec=$(date +"%s")
 | 
						|
    output_message=$(time kubectl wait pod --selector=app=dtest --for=condition=InvalidCondition --timeout=1s 2>&1)
 | 
						|
    end_sec=$(date +"%s")
 | 
						|
    len_sec=$((end_sec-start_sec))
 | 
						|
    set -o errexit
 | 
						|
    kube::test::if_has_string "${output_message}" 'timed out waiting for the condition '
 | 
						|
    test $len_sec -ge 1 && test $len_sec -le 2
 | 
						|
 | 
						|
    # Clean deployment
 | 
						|
    kubectl delete deployment dtest
 | 
						|
 | 
						|
    # create test data
 | 
						|
    kubectl create deployment test-3 --image=busybox
 | 
						|
 | 
						|
    # wait with jsonpath without value to succeed
 | 
						|
    set +o errexit
 | 
						|
    # Command: Wait with jsonpath without value
 | 
						|
    output_message_0=$(kubectl wait --for=jsonpath='{.status.replicas}' deploy/test-3 2>&1)
 | 
						|
    # Command: Wait with relaxed jsonpath and filter expression
 | 
						|
    output_message_1=$(kubectl wait \
 | 
						|
        --for='jsonpath=spec.template.spec.containers[?(@.name=="busybox")].image=busybox' \
 | 
						|
        deploy/test-3)
 | 
						|
    # Command: Wait with jsonpath without value with check-once behavior
 | 
						|
    output_message_2=$(kubectl wait --for=jsonpath='{.status.replicas}' deploy/test-3 --timeout=0 2>&1)
 | 
						|
    set -o errexit
 | 
						|
 | 
						|
    # Post-Condition: Wait succeed
 | 
						|
    kube::test::if_has_string "${output_message_0}" 'deployment.apps/test-3 condition met'
 | 
						|
    kube::test::if_has_string "${output_message_1}" 'deployment.apps/test-3 condition met'
 | 
						|
    kube::test::if_has_string "${output_message_2}" 'deployment.apps/test-3 condition met'
 | 
						|
 | 
						|
    # Clean deployment
 | 
						|
    kubectl delete deployment test-3
 | 
						|
 | 
						|
    set +o nounset
 | 
						|
    set +o errexit
 | 
						|
}
 | 
						|
 |