...

Text file src/k8s.io/kubernetes/test/cmd/exec.sh

Documentation: k8s.io/kubernetes/test/cmd

     1#!/usr/bin/env bash
     2
     3# Copyright 2019 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
    21run_kubectl_exec_pod_tests() {
    22  set -o nounset
    23  set -o errexit
    24
    25  create_and_use_new_namespace
    26  kube::log::status "Testing kubectl exec POD COMMAND"
    27
    28  ### Test execute non-existing POD
    29  output_message=$(! kubectl exec abc date 2>&1)
    30  # POD abc should error since it doesn't exist
    31  kube::test::if_has_string "${output_message}" 'pods "abc" not found'
    32
    33  ### Test execute multiple resources
    34  output_message=$(! kubectl exec -f - 2>&1 -- echo test << __EOF__
    35apiVersion: v1
    36kind: Pod
    37metadata:
    38  name: test
    39spec:
    40  containers:
    41  - name: nginx
    42    image: nginx
    43---
    44apiVersion: v1
    45kind: Pod
    46metadata:
    47  name: test2
    48spec:
    49  containers:
    50  - name: nginx
    51    image: nginx
    52__EOF__
    53)
    54  kube::test::if_has_string "${output_message}" 'cannot exec into multiple objects at a time'
    55
    56  ### Test execute existing POD
    57  # Create test-pod
    58  kubectl create -f hack/testdata/pod.yaml
    59  # Execute existing POD
    60  output_message=$(! kubectl exec test-pod date 2>&1)
    61  # POD test-pod is exists this is shouldn't have output not found
    62  kube::test::if_has_not_string "${output_message}" 'pods "test-pod" not found'
    63  # These must be pass the validate
    64  kube::test::if_has_not_string "${output_message}" 'pod or type/name must be specified'
    65
    66  # Clean up
    67  kubectl delete pods test-pod
    68
    69  set +o nounset
    70  set +o errexit
    71}
    72
    73run_kubectl_exec_resource_name_tests() {
    74  set +o nounset
    75  set +o errexit
    76
    77  create_and_use_new_namespace
    78  kube::log::status "Testing kubectl exec TYPE/NAME COMMAND"
    79
    80  ### Test execute invalid resource type
    81  output_message=$(! kubectl exec foo/bar date 2>&1)
    82  # resource type foo should error since it's invalid
    83  kube::test::if_has_string "${output_message}" 'error:'
    84
    85  ### Test execute non-existing resources
    86  output_message=$(! kubectl exec deployments/bar date 2>&1)
    87  # resource type foo should error since it doesn't exist
    88  kube::test::if_has_string "${output_message}" '"bar" not found'
    89
    90  kubectl create -f hack/testdata/pod.yaml
    91  kubectl create -f hack/testdata/frontend-replicaset.yaml
    92  kubectl create -f hack/testdata/configmap.yaml
    93
    94  ### Test execute non-implemented resources
    95  output_message=$(! kubectl exec configmap/test-set-env-config date 2>&1)
    96  # resource type configmap should error since configmap not implemented to be attached
    97  kube::test::if_has_string "${output_message}" 'not implemented'
    98
    99  ### Test execute exists and valid resource type.
   100  # Just check the output, since test-cmd not run kubelet, pod never be assigned.
   101  # and not really can run `kubectl exec` command
   102
   103  output_message=$(! kubectl exec pods/test-pod date 2>&1)
   104  # POD test-pod is exists this is shouldn't have output not found
   105  kube::test::if_has_not_string "${output_message}" 'not found'
   106  # These must be pass the validate
   107  kube::test::if_has_not_string "${output_message}" 'pod, type/name or --filename must be specified'
   108
   109  output_message=$(! kubectl exec replicaset/frontend date 2>&1)
   110  # Replicaset frontend is valid and exists will select the first pod.
   111  # and Shouldn't have output not found
   112  kube::test::if_has_not_string "${output_message}" 'not found'
   113  # These must be pass the validate
   114  kube::test::if_has_not_string "${output_message}" 'pod, type/name or --filename must be specified'
   115
   116  # Clean up
   117  kubectl delete pods/test-pod
   118  kubectl delete replicaset/frontend
   119  kubectl delete configmap/test-set-env-config
   120
   121  set +o nounset
   122  set +o errexit
   123}

View as plain text