mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 18:00:08 +00:00
Add cascading deletion test cases to kubectl tests
This commit is contained in:
parent
20aa573865
commit
b6e2a09c2b
@ -42,30 +42,60 @@ kube::test::get_caller() {
|
|||||||
|
|
||||||
# Force exact match of a returned result for a object query. Wrap this with || to support multiple
|
# Force exact match of a returned result for a object query. Wrap this with || to support multiple
|
||||||
# valid return types.
|
# valid return types.
|
||||||
|
# This runs `kubectl get` once and asserts that the result is as expected.
|
||||||
|
## $1: Object on which get should be run
|
||||||
|
# $2: The go-template to run on the result
|
||||||
|
# $3: The expected output
|
||||||
|
# $4: Additional args to be passed to kubectl
|
||||||
kube::test::get_object_assert() {
|
kube::test::get_object_assert() {
|
||||||
local object=$1
|
kube::test::object_assert 1 "$@"
|
||||||
local request=$2
|
}
|
||||||
local expected=$3
|
|
||||||
local args=${4:-}
|
|
||||||
|
|
||||||
res=$(eval kubectl get "${kube_flags[@]}" ${args} $object -o go-template=\"$request\")
|
# Asserts that the output of a given get query is as expected.
|
||||||
|
# Runs the query multiple times before failing it.
|
||||||
|
# $1: Object on which get should be run
|
||||||
|
# $2: The go-template to run on the result
|
||||||
|
# $3: The expected output
|
||||||
|
# $4: Additional args to be passed to kubectl
|
||||||
|
kube::test::wait_object_assert() {
|
||||||
|
kube::test::object_assert 10 "$@"
|
||||||
|
}
|
||||||
|
|
||||||
if [[ "$res" =~ ^$expected$ ]]; then
|
# Asserts that the output of a given get query is as expected.
|
||||||
echo -n ${green}
|
# Can run the query multiple times before failing it.
|
||||||
echo "$(kube::test::get_caller): Successful get $object $request: $res"
|
# $1: Number of times the query should be run before failing it.
|
||||||
echo -n ${reset}
|
# $2: Object on which get should be run
|
||||||
return 0
|
# $3: The go-template to run on the result
|
||||||
else
|
# $4: The expected output
|
||||||
echo ${bold}${red}
|
# $5: Additional args to be passed to kubectl
|
||||||
echo "$(kube::test::get_caller): FAIL!"
|
kube::test::object_assert() {
|
||||||
echo "Get $object $request"
|
local tries=$1
|
||||||
echo " Expected: $expected"
|
local object=$2
|
||||||
echo " Got: $res"
|
local request=$3
|
||||||
echo ${reset}${red}
|
local expected=$4
|
||||||
caller
|
local args=${5:-}
|
||||||
echo ${reset}
|
|
||||||
return 1
|
for j in $(seq 1 ${tries}); do
|
||||||
fi
|
res=$(eval kubectl get "${kube_flags[@]}" ${args} $object -o go-template=\"$request\")
|
||||||
|
if [[ "$res" =~ ^$expected$ ]]; then
|
||||||
|
echo -n ${green}
|
||||||
|
echo "$(kube::test::get_caller 3): Successful get $object $request: $res"
|
||||||
|
echo -n ${reset}
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo "Waiting for Get $object $request $args: expected: $expected, got: $res"
|
||||||
|
sleep $((${j}-1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ${bold}${red}
|
||||||
|
echo "$(kube::test::get_caller 3): FAIL!"
|
||||||
|
echo "Get $object $request"
|
||||||
|
echo " Expected: $expected"
|
||||||
|
echo " Got: $res"
|
||||||
|
echo ${reset}${red}
|
||||||
|
caller
|
||||||
|
echo ${reset}
|
||||||
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
kube::test::get_object_jsonpath_assert() {
|
kube::test::get_object_jsonpath_assert() {
|
||||||
|
@ -947,8 +947,8 @@ run_kubectl_apply_deployments_tests() {
|
|||||||
# need to explicitly remove replicasets and pods because we changed the deployment selector and orphaned things
|
# need to explicitly remove replicasets and pods because we changed the deployment selector and orphaned things
|
||||||
kubectl delete deployments,rs,pods --all --cascade=false --grace-period=0
|
kubectl delete deployments,rs,pods --all --cascade=false --grace-period=0
|
||||||
# Post-Condition: no Deployments, ReplicaSets, Pods exist
|
# Post-Condition: no Deployments, ReplicaSets, Pods exist
|
||||||
kube::test::get_object_assert deployments "{{range.items}}{{$id_field}}:{{end}}" ''
|
kube::test::wait_object_assert deployments "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
kube::test::get_object_assert replicasets "{{range.items}}{{$id_field}}:{{end}}" ''
|
kube::test::wait_object_assert replicasets "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
kube::test::get_object_assert pods "{{range.items}}{{$id_field}}:{{end}}" ''
|
kube::test::get_object_assert pods "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2273,6 +2273,37 @@ run_deployment_tests() {
|
|||||||
# Clean up
|
# Clean up
|
||||||
kubectl delete deployment test-nginx "${kube_flags[@]}"
|
kubectl delete deployment test-nginx "${kube_flags[@]}"
|
||||||
|
|
||||||
|
### Test cascading deletion
|
||||||
|
## Test that rs is deleted when deployment is deleted.
|
||||||
|
# Pre-condition: no deployment exists
|
||||||
|
kube::test::get_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
# Create deployment
|
||||||
|
kubectl create -f test/fixtures/doc-yaml/user-guide/deployment.yaml "${kube_flags[@]}"
|
||||||
|
# Wait for rs to come up.
|
||||||
|
kube::test::wait_object_assert rs "{{range.items}}{{$rs_replicas_field}}{{end}}" '3'
|
||||||
|
# Deleting the deployment should delete the rs.
|
||||||
|
kubectl delete deployment nginx-deployment "${kube_flags[@]}"
|
||||||
|
kube::test::wait_object_assert rs "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
|
||||||
|
## Test that rs is not deleted when deployment is deleted with cascade set to false.
|
||||||
|
# Pre-condition: no deployment and rs exist
|
||||||
|
kube::test::get_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
kube::test::get_object_assert rs "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
# Create deployment
|
||||||
|
kubectl create deployment nginx-deployment --image=gcr.io/google-containers/nginx:test-cmd
|
||||||
|
# Wait for rs to come up.
|
||||||
|
kube::test::wait_object_assert rs "{{range.items}}{{$rs_replicas_field}}{{end}}" '1'
|
||||||
|
# Delete the deployment with cascade set to false.
|
||||||
|
kubectl delete deployment nginx-deployment "${kube_flags[@]}" --cascade=false
|
||||||
|
# Wait for the deployment to be deleted and then verify that rs is not
|
||||||
|
# deleted.
|
||||||
|
kube::test::wait_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
kube::test::get_object_assert rs "{{range.items}}{{$rs_replicas_field}}{{end}}" '1'
|
||||||
|
# Cleanup
|
||||||
|
# Find the name of the rs to be deleted.
|
||||||
|
output_message=$(kubectl get rs "${kube_flags[@]}" -o template --template={{range.items}}{{$id_field}}{{end}})
|
||||||
|
kubectl delete rs ${output_message} "${kube_flags[@]}"
|
||||||
|
|
||||||
### Auto scale deployment
|
### Auto scale deployment
|
||||||
# Pre-condition: no deployment exists
|
# Pre-condition: no deployment exists
|
||||||
kube::test::get_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" ''
|
kube::test::get_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
@ -2385,6 +2416,21 @@ run_rs_tests() {
|
|||||||
# Post-condition: no pods from frontend replica set
|
# Post-condition: no pods from frontend replica set
|
||||||
kube::test::get_object_assert 'pods -l "tier=frontend"' "{{range.items}}{{$id_field}}:{{end}}" ''
|
kube::test::get_object_assert 'pods -l "tier=frontend"' "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
|
||||||
|
### Create and then delete a replica set with cascade=false, make sure it doesn't delete pods.
|
||||||
|
# Pre-condition: no replica set exists
|
||||||
|
kube::test::get_object_assert rs "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
# Command
|
||||||
|
kubectl create -f hack/testdata/frontend-replicaset.yaml "${kube_flags[@]}"
|
||||||
|
kube::log::status "Deleting rs"
|
||||||
|
kubectl delete rs frontend "${kube_flags[@]}" --cascade=false
|
||||||
|
# Wait for the rs to be deleted.
|
||||||
|
kube::test::wait_object_assert rs "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
# Post-condition: All 3 pods still remain from frontend replica set
|
||||||
|
kube::test::get_object_assert 'pods -l "tier=frontend"' "{{range.items}}{{$pod_container_name_field}}:{{end}}" 'php-redis:php-redis:php-redis:'
|
||||||
|
# Cleanup
|
||||||
|
kubectl delete pods -l "tier=frontend" "${kube_flags[@]}"
|
||||||
|
kube::test::get_object_assert pods "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
|
|
||||||
### Create replica set frontend from YAML
|
### Create replica set frontend from YAML
|
||||||
# Pre-condition: no replica set exists
|
# Pre-condition: no replica set exists
|
||||||
kube::test::get_object_assert rs "{{range.items}}{{$id_field}}:{{end}}" ''
|
kube::test::get_object_assert rs "{{range.items}}{{$id_field}}:{{end}}" ''
|
||||||
@ -2662,7 +2708,7 @@ runTests() {
|
|||||||
i=0
|
i=0
|
||||||
create_and_use_new_namespace() {
|
create_and_use_new_namespace() {
|
||||||
i=$(($i+1))
|
i=$(($i+1))
|
||||||
kube::log::status "Creating namespace"
|
kube::log::status "Creating namespace namespace${i}"
|
||||||
kubectl create namespace "namespace${i}"
|
kubectl create namespace "namespace${i}"
|
||||||
kubectl config set-context "${CONTEXT}" --namespace="namespace${i}"
|
kubectl config set-context "${CONTEXT}" --namespace="namespace${i}"
|
||||||
}
|
}
|
||||||
@ -2690,6 +2736,7 @@ runTests() {
|
|||||||
second_port_field="(index .spec.ports 1).port"
|
second_port_field="(index .spec.ports 1).port"
|
||||||
second_port_name="(index .spec.ports 1).name"
|
second_port_name="(index .spec.ports 1).name"
|
||||||
image_field="(index .spec.containers 0).image"
|
image_field="(index .spec.containers 0).image"
|
||||||
|
pod_container_name_field="(index .spec.containers 0).name"
|
||||||
container_name_field="(index .spec.template.spec.containers 0).name"
|
container_name_field="(index .spec.template.spec.containers 0).name"
|
||||||
hpa_min_field=".spec.minReplicas"
|
hpa_min_field=".spec.minReplicas"
|
||||||
hpa_max_field=".spec.maxReplicas"
|
hpa_max_field=".spec.maxReplicas"
|
||||||
|
Loading…
Reference in New Issue
Block a user