...
1#!/usr/bin/env bash
2
3# Copyright 2018 The Kubernetes Authors.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17set -o errexit
18set -o nounset
19set -o pipefail
20
21# Runs tests related to kubectl delete --all-namespaces.
22run_kubectl_delete_allnamespaces_tests() {
23 set -o nounset
24 set -o errexit
25
26 ns_one="namespace-$(date +%s)-${RANDOM}"
27 ns_two="namespace-$(date +%s)-${RANDOM}"
28 kubectl create namespace "${ns_one}"
29 kubectl create namespace "${ns_two}"
30
31 kubectl create configmap "one" --namespace="${ns_one}"
32 kubectl create configmap "two" --namespace="${ns_two}"
33 kubectl label configmap "one" --namespace="${ns_one}" deletetest=true
34 kubectl label configmap "two" --namespace="${ns_two}" deletetest=true
35
36 # dry-run
37 kubectl delete configmap --dry-run=client -l deletetest=true --all-namespaces
38 kubectl delete configmap --dry-run=server -l deletetest=true --all-namespaces
39 kubectl config set-context "${CONTEXT}" --namespace="${ns_one}"
40 kube::test::get_object_assert 'configmap -l deletetest' "{{range.items}}{{${id_field:?}}}:{{end}}" 'one:'
41 kubectl config set-context "${CONTEXT}" --namespace="${ns_two}"
42 kube::test::get_object_assert 'configmap -l deletetest' "{{range.items}}{{${id_field:?}}}:{{end}}" 'two:'
43
44 kubectl delete configmap -l deletetest=true --all-namespaces
45
46 # no configmaps should be in either of those namespaces with label deletetest
47 kubectl config set-context "${CONTEXT}" --namespace="${ns_one}"
48 kube::test::get_object_assert 'configmap -l deletetest' "{{range.items}}{{${id_field:?}}}:{{end}}" ''
49 kubectl config set-context "${CONTEXT}" --namespace="${ns_two}"
50 kube::test::get_object_assert 'configmap -l deletetest' "{{range.items}}{{${id_field:?}}}:{{end}}" ''
51
52 set +o nounset
53 set +o errexit
54}
55
56# Runs tests related to kubectl delete --confirm
57run_kubectl_delete_interactive_tests() {
58 set -o nounset
59 set -o errexit
60
61 ns_one="namespace-$(date +%s)-${RANDOM}"
62 ns_two="namespace-$(date +%s)-${RANDOM}"
63 kubectl create namespace "${ns_one}"
64 kubectl create namespace "${ns_two}"
65
66 # create configmaps
67 kubectl create configmap "one" --namespace="${ns_one}"
68 kubectl create configmap "two" --namespace="${ns_two}"
69 kubectl label configmap "one" --namespace="${ns_one}" deletetest=true
70 kubectl label configmap "two" --namespace="${ns_two}" deletetest=true
71
72 # not confirm dry-run=server deletions
73 output_message=$(kubectl delete configmap --dry-run=server --interactive -l deletetest=true --all-namespaces <<< $'n\n')
74 kube::test::if_has_string "${output_message}" 'configmap/two' 'configmap/one'
75 # confirm dry-run=server deletions
76 kubectl delete configmap --dry-run=server --interactive -l deletetest=true --all-namespaces <<< $'y\n'
77 # not confirm resource deletions
78 output_message=$(kubectl delete configmap --interactive -l deletetest=true --all-namespaces <<< $'n\n')
79 kube::test::if_has_string "${output_message}" 'configmap/two' 'configmap/one'
80 kubectl config set-context "${CONTEXT}" --namespace="${ns_one}"
81 kube::test::get_object_assert 'configmap -l deletetest' "{{range.items}}{{${id_field:?}}}:{{end}}" 'one:'
82 kubectl config set-context "${CONTEXT}" --namespace="${ns_two}"
83 kube::test::get_object_assert 'configmap -l deletetest' "{{range.items}}{{${id_field:?}}}:{{end}}" 'two:'
84
85 # clean configmaps with label deletetest=true
86 kubectl delete configmap -l deletetest=true --all-namespaces
87
88 # create new configmaps
89 kubectl create configmap "third" --namespace="${ns_one}"
90 kubectl create configmap "fourth" --namespace="${ns_two}"
91 kubectl label configmap "third" --namespace="${ns_one}" deletetest2=true
92 kubectl label configmap "fourth" --namespace="${ns_two}" deletetest2=true
93
94 # confirm all resource deletions with waiting
95 kubectl delete configmaps --interactive -l deletetest2=true --all-namespaces --wait <<< $'y\n'
96
97 # no configmaps should be in either of those namespaces with label deletetest2
98 kubectl config set-context "${CONTEXT}" --namespace="${ns_one}"
99 kube::test::get_object_assert 'configmap -l deletetest2' "{{range.items}}{{${id_field:?}}}:{{end}}" ''
100 kubectl config set-context "${CONTEXT}" --namespace="${ns_two}"
101 kube::test::get_object_assert 'configmap -l deletetest2' "{{range.items}}{{${id_field:?}}}:{{end}}" ''
102
103 # clean configmaps with label deletetest2=true
104 kubectl delete configmap -l deletetest2=true --all-namespaces
105
106 # create new configmaps in one namespace
107 kubectl create configmap "fifth" --namespace="${ns_one}"
108 kubectl create configmap "sixth" --namespace="${ns_one}"
109 kubectl label configmap "fifth" --namespace="${ns_one}" deletetest3=true
110 kubectl label configmap "sixth" --namespace="${ns_one}" deletetest3=true
111
112 # confirm all resource deletions with forcing and waiting
113 kubectl delete configmaps -l deletetest3=true --force --interactive --namespace="${ns_one}" --wait <<< $'y\n'
114
115 # no configmaps should be in either of those namespaces with label deletetest3
116 kubectl config set-context "${CONTEXT}" --namespace="${ns_one}"
117 kube::test::get_object_assert 'configmap -l deletetest3' "{{range.items}}{{${id_field:?}}}:{{end}}" ''
118
119 set +o nounset
120 set +o errexit
121}
View as plain text