| #!/usr/bin/env bash |
| |
| # Copyright 2019 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_kubectl_exec_pod_tests() { |
| set -o nounset |
| set -o errexit |
| |
| create_and_use_new_namespace |
| kube::log::status "Testing kubectl exec POD COMMAND" |
| |
| ### Test execute non-existing POD |
| output_message=$(! kubectl exec abc date 2>&1) |
| # POD abc should error since it doesn't exist |
| kube::test::if_has_string "${output_message}" 'pods "abc" not found' |
| |
| ### Test execute multiple resources |
| output_message=$(! kubectl exec -f - 2>&1 -- echo test << __EOF__ |
| apiVersion: v1 |
| kind: Pod |
| metadata: |
| name: test |
| spec: |
| containers: |
| - name: nginx |
| image: nginx |
| --- |
| apiVersion: v1 |
| kind: Pod |
| metadata: |
| name: test2 |
| spec: |
| containers: |
| - name: nginx |
| image: nginx |
| __EOF__ |
| ) |
| kube::test::if_has_string "${output_message}" 'cannot exec into multiple objects at a time' |
| |
| ### Test execute existing POD |
| # Create test-pod |
| kubectl create -f hack/testdata/pod.yaml |
| # Execute existing POD |
| output_message=$(! kubectl exec test-pod date 2>&1) |
| # POD test-pod is exists this is shouldn't have output not found |
| kube::test::if_has_not_string "${output_message}" 'pods "test-pod" not found' |
| # These must be pass the validate |
| kube::test::if_has_not_string "${output_message}" 'pod or type/name must be specified' |
| |
| # Clean up |
| kubectl delete pods test-pod |
| |
| set +o nounset |
| set +o errexit |
| } |
| |
| run_kubectl_exec_resource_name_tests() { |
| set +o nounset |
| set +o errexit |
| |
| create_and_use_new_namespace |
| kube::log::status "Testing kubectl exec TYPE/NAME COMMAND" |
| |
| ### Test execute invalid resource type |
| output_message=$(! kubectl exec foo/bar date 2>&1) |
| # resource type foo should error since it's invalid |
| kube::test::if_has_string "${output_message}" 'error:' |
| |
| ### Test execute non-existing resources |
| output_message=$(! kubectl exec deployments/bar date 2>&1) |
| # resource type foo should error since it doesn't exist |
| kube::test::if_has_string "${output_message}" '"bar" not found' |
| |
| kubectl create -f hack/testdata/pod.yaml |
| kubectl create -f hack/testdata/frontend-replicaset.yaml |
| kubectl create -f hack/testdata/configmap.yaml |
| |
| ### Test execute non-implemented resources |
| output_message=$(! kubectl exec configmap/test-set-env-config date 2>&1) |
| # resource type configmap should error since configmap not implemented to be attached |
| kube::test::if_has_string "${output_message}" 'not implemented' |
| |
| ### Test execute exists and valid resource type. |
| # Just check the output, since test-cmd not run kubelet, pod never be assigned. |
| # and not really can run `kubectl exec` command |
| |
| output_message=$(! kubectl exec pods/test-pod date 2>&1) |
| # POD test-pod is exists this is shouldn't have output not found |
| kube::test::if_has_not_string "${output_message}" 'not found' |
| # These must be pass the validate |
| kube::test::if_has_not_string "${output_message}" 'pod, type/name or --filename must be specified' |
| |
| output_message=$(! kubectl exec replicaset/frontend date 2>&1) |
| # Replicaset frontend is valid and exists will select the first pod. |
| # and Shouldn't have output not found |
| kube::test::if_has_not_string "${output_message}" 'not found' |
| # These must be pass the validate |
| kube::test::if_has_not_string "${output_message}" 'pod, type/name or --filename must be specified' |
| |
| # Clean up |
| kubectl delete pods/test-pod |
| kubectl delete replicaset/frontend |
| kubectl delete configmap/test-set-env-config |
| |
| set +o nounset |
| set +o errexit |
| } |