...

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

Documentation: k8s.io/kubernetes/test/cmd

     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
    17set -o errexit
    18set -o nounset
    19set -o pipefail
    20
    21# Runs tests for kubectl diff
    22run_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}

View as plain text