k8s.io/kubernetes@v1.31.0-alpha.0.0.20240520171757-56147500dadc/test/cmd/events.sh (about)

     1  #!/usr/bin/env bash
     2  
     3  # Copyright 2022 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  
    17  set -o errexit
    18  set -o nounset
    19  set -o pipefail
    20  
    21  # Runs tests for kubectl diff
    22  run_kubectl_events_tests() {
    23      set -o nounset
    24      set -o errexit
    25  
    26      create_and_use_new_namespace
    27      kube::log::status "Testing kubectl events"
    28  
    29      ### Create a new namespace
    30      # Pre-condition: the test-events namespace does not exist
    31      kube::test::get_object_assert 'namespaces' "{{range.items}}{{ if eq ${id_field:?} \"test-events\" }}found{{end}}{{end}}:" ':'
    32      # Command
    33      kubectl create namespace test-events
    34      # Post-condition: namespace 'test-events' is created.
    35      kube::test::get_object_assert 'namespaces/test-events' "{{$id_field}}" 'test-events'
    36  
    37      # Pre-condition: event does not exist for Cronjob/pi in any namespace
    38      output_message=$(kubectl events -A "${kube_flags[@]:?}" 2>&1)
    39      kube::test::if_has_not_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
    40  
    41      # Pre-condition: cronjob does not exist in test-events namespace
    42      kube::test::get_object_assert 'cronjob --namespace=test-events' "{{range.items}}{{ if eq $id_field \"pi\" }}found{{end}}{{end}}:" ':'
    43      ### Create a cronjob in a specific namespace
    44      kubectl create cronjob pi --schedule="59 23 31 2 *" --namespace=test-events "--image=$IMAGE_PERL" -- perl -Mbignum=bpi -wle 'print bpi(20)' "${kube_flags[@]:?}"
    45      ### Create a crd
    46      kubectl create -f - << __EOF__
    47  {
    48    "kind": "CustomResourceDefinition",
    49    "apiVersion": "apiextensions.k8s.io/v1",
    50    "metadata": {
    51      "name": "cronjobs.example.com"
    52    },
    53    "spec": {
    54      "group": "example.com",
    55      "scope": "Namespaced",
    56      "names": {
    57        "plural": "cronjobs",
    58        "singular": "cronjob",
    59        "kind": "Cronjob"
    60      },
    61      "versions": [
    62        {
    63          "name": "v1",
    64          "served": true,
    65          "storage": true,
    66          "schema": {
    67            "openAPIV3Schema": {
    68              "type": "object",
    69              "properties": {
    70                "spec": {
    71                  "type": "object",
    72                  "properties": {
    73                    "image": {"type": "string"}
    74                  }
    75                }
    76              }
    77            }
    78          }
    79        }
    80      ]
    81    }
    82  }
    83  __EOF__
    84  
    85      ### Create a example.com/v1 Cronjob in a specific namespace
    86      kubectl create -f - << __EOF__
    87  {
    88    "kind": "Cronjob",
    89    "apiVersion": "example.com/v1",
    90    "metadata": {
    91      "name": "pi",
    92      "namespace": "test-events"
    93    },
    94    "spec": {
    95      "image": "test"
    96    }
    97  }
    98  __EOF__
    99  
   100      # Post-Condition: assertion object exists
   101      kube::test::get_object_assert 'cronjob/pi --namespace=test-events' "{{$id_field}}" 'pi'
   102  
   103      # Post-Condition: events --all-namespaces returns event for Cronjob/pi
   104      output_message=$(kubectl events -A "${kube_flags[@]:?}" 2>&1)
   105      kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   106  
   107      # Post-Condition: events for test-events namespace returns event for Cronjob/pi
   108      output_message=$(kubectl events -n test-events "${kube_flags[@]:?}" 2>&1)
   109      kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   110  
   111      # Post-Condition: events returns event for Cronjob/pi when --for flag is used
   112      output_message=$(kubectl events -n test-events --for=Cronjob/pi "${kube_flags[@]:?}" 2>&1)
   113      kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   114  
   115      # Post-Condition: events returns event for fully qualified Cronjob.v1.batch/pi when --for flag is used
   116      output_message=$(kubectl events -n test-events --for Cronjob.v1.batch/pi "${kube_flags[@]:?}" 2>&1)
   117      kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   118  
   119      # Post-Condition: events not returns event for fully qualified Cronjob.v1.example.com/pi when --for flag is used
   120      output_message=$(kubectl events -n test-events --for Cronjob.v1.example.com/pi "${kube_flags[@]:?}" 2>&1)
   121      kube::test::if_has_not_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   122  
   123      # Post-Condition: events returns event for fully qualified without version Cronjob.batch/pi when --for flag is used
   124      output_message=$(kubectl events -n test-events --for=Cronjob.batch/pi "${kube_flags[@]:?}" 2>&1)
   125      kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   126  
   127      # Post-Condition: events returns event for Cronjob/pi when watch is enabled
   128      output_message=$(kubectl events -n test-events --for=Cronjob/pi --watch --request-timeout=1 "${kube_flags[@]:?}" 2>&1)
   129      kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   130  
   131      # Post-Condition: events returns event for Cronjob/pi when filtered by Warning
   132      output_message=$(kubectl events -n test-events --for=Cronjob/pi --types=Warning "${kube_flags[@]:?}" 2>&1)
   133      kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   134  
   135      # Post-Condition: events not returns event for Cronjob/pi when filtered only by Normal
   136      output_message=$(kubectl events -n test-events --for=Cronjob/pi --types=Normal "${kube_flags[@]:?}" 2>&1)
   137      kube::test::if_has_not_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   138  
   139      # Post-Condition: events returns event for Cronjob/pi without headers
   140      output_message=$(kubectl events -n test-events --for=Cronjob/pi --no-headers "${kube_flags[@]:?}" 2>&1)
   141      kube::test::if_has_not_string "${output_message}" "LAST SEEN" "TYPE" "REASON"
   142      kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   143  
   144      # Post-Condition: events returns event for Cronjob/pi in json format
   145      output_message=$(kubectl events -n test-events --for=Cronjob/pi --output=json "${kube_flags[@]:?}" 2>&1)
   146      kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   147  
   148      # Post-Condition: events returns event for Cronjob/pi in yaml format
   149      output_message=$(kubectl events -n test-events --for=Cronjob/pi --output=yaml "${kube_flags[@]:?}" 2>&1)
   150      kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"
   151  
   152      #Clean up
   153      kubectl delete cronjob pi --namespace=test-events
   154      kubectl delete cronjobs.v1.example.com pi --namespace=test-events
   155      kubectl delete crd cronjobs.example.com
   156      kubectl delete namespace test-events
   157  
   158      set +o nounset
   159      set +o errexit
   160  }