mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-10-31 18:28:13 +00:00
197 lines
6.9 KiB
Bash
Executable File
197 lines
6.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Copyright 2025 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_kuberc_tests() {
|
|
set -o nounset
|
|
set -o errexit
|
|
|
|
create_and_use_new_namespace
|
|
kube::log::status "Testing kuberc"
|
|
|
|
# Enable KUBERC feature
|
|
export KUBECTL_KUBERC=true
|
|
|
|
cat > "${TMPDIR:-/tmp}"/kuberc_file << EOF
|
|
apiVersion: kubectl.config.k8s.io/v1alpha1
|
|
kind: Preference
|
|
aliases:
|
|
- name: crns
|
|
command: create namespace
|
|
appendArgs:
|
|
- test-kuberc-ns
|
|
- name: getn
|
|
command: get
|
|
prependArgs:
|
|
- namespace
|
|
flags:
|
|
- name: output
|
|
default: wide
|
|
- name: crole
|
|
command: create role
|
|
flags:
|
|
- name: verb
|
|
default: get,watch
|
|
- name: getrole
|
|
command: get
|
|
flags:
|
|
- name: output
|
|
default: json
|
|
- name: runx
|
|
command: run
|
|
flags:
|
|
- name: image
|
|
default: nginx
|
|
- name: labels
|
|
default: app=test,env=test
|
|
- name: env
|
|
default: DNS_DOMAIN=test
|
|
- name: namespace
|
|
default: test-kuberc-ns
|
|
appendArgs:
|
|
- test-pod-2
|
|
- --
|
|
- custom-arg1
|
|
- custom-arg2
|
|
- name: setx
|
|
command: set image
|
|
appendArgs:
|
|
- pod/test-pod-2
|
|
- test-pod-2=busybox
|
|
overrides:
|
|
- command: apply
|
|
flags:
|
|
- name: server-side
|
|
default: "true"
|
|
- name: dry-run
|
|
default: "server"
|
|
- name: validate
|
|
default: "strict"
|
|
- command: delete
|
|
flags:
|
|
- name: interactive
|
|
default: "true"
|
|
- command: get
|
|
flags:
|
|
- name: namespace
|
|
default: "test-kuberc-ns"
|
|
- name: output
|
|
default: "json"
|
|
EOF
|
|
|
|
# Pre-condition: the test-kuberc-ns namespace does not exist
|
|
kube::test::get_object_assert 'namespaces' "{{range.items}}{{ if eq ${id_field:?} \"test-kuberc-ns\" }}found{{end}}{{end}}:" ':'
|
|
# Alias command crns successfully creates namespace
|
|
kubectl crns --kuberc="${TMPDIR:-/tmp}"/kuberc_file
|
|
# Post-condition: namespace 'test-kuberc-ns' is created.
|
|
kube::test::get_object_assert 'namespaces/test-kuberc-ns' "{{$id_field}}" 'test-kuberc-ns'
|
|
|
|
# Alias command crns successfully creates namespace
|
|
kubectl getn --kuberc="${TMPDIR:-/tmp}"/kuberc_file test-kuberc-ns
|
|
# Post-condition: namespace 'test-kuberc-ns' is created.
|
|
kube::test::get_object_assert 'namespaces/test-kuberc-ns' "{{$id_field}}" 'test-kuberc-ns'
|
|
|
|
# Alias command crns successfully creates namespace
|
|
kubectl getn test-kuberc-ns --output=json --kuberc="${TMPDIR:-/tmp}"/kuberc_file
|
|
# Post-condition: namespace 'test-kuberc-ns' is created.
|
|
kube::test::get_object_assert 'namespaces/test-kuberc-ns' "{{$id_field}}" 'test-kuberc-ns'
|
|
|
|
# check array flags are appended after implicit defaults
|
|
kubectl crole testkubercrole --verb=list --namespace test-kuberc-ns --resource=pods --kuberc="${TMPDIR:-/tmp}"/kuberc_file
|
|
output_message=$(kubectl getrole role/testkubercrole -n test-kuberc-ns -oyaml --kuberc="${TMPDIR:-/tmp}"/kuberc_file)
|
|
kube::test::if_has_string "${output_message}" 'list'
|
|
kube::test::if_has_not_string "${output_message}" 'watch' 'get'
|
|
# Post-condition: remove role
|
|
kubectl delete role testkubercrole --namespace=test-kuberc-ns
|
|
|
|
# Alias run command creates a pod with the given configurations
|
|
kubectl runx --kuberc "${TMPDIR:-/tmp}"/kuberc_file
|
|
# Post-Condition: assertion object exists
|
|
kube::test::get_object_assert 'pod/test-pod-2 --namespace=test-kuberc-ns' "{{$id_field}}" 'test-pod-2'
|
|
# Not explicitly pass namespace to assure that default flag value is used
|
|
output_message=$(kubectl get pod/test-pod-2 2>&1 "${kube_flags[@]:?}" --kuberc="${TMPDIR:-/tmp}"/kuberc_file)
|
|
kube::test::if_has_string "${output_message}" 'nginx' 'app=test' 'env=test' 'DNS_DOMAIN=test' 'custom-arg1'
|
|
# output flag is defaulted to json and assure that it is correct format
|
|
kube::test::if_has_string "${output_message}" '{'
|
|
|
|
# pass explicit invalid namespace to assure that it takes precedence over the value in kuberc
|
|
output_message=$(! kubectl get pod/test-pod-2 -n kube-system 2>&1 "${kube_flags[@]:?}" --kuberc="${TMPDIR:-/tmp}"/kuberc_file)
|
|
kube::test::if_has_string "${output_message}" 'pods "test-pod-2" not found'
|
|
|
|
# Alias set env command sets new env var
|
|
kubectl setx --kuberc="${TMPDIR:-/tmp}"/kuberc_file -n test-kuberc-ns
|
|
# explicitly pass same namespace also defined in kuberc
|
|
output_message=$(kubectl get pod/test-pod-2 -n test-kuberc-ns 2>&1 "${kube_flags[@]:?}" --kuberc="${TMPDIR:-/tmp}"/kuberc_file)
|
|
kube::test::if_has_string "${output_message}" 'busybox'
|
|
kube::test::if_has_not_string "${output_message}" 'nginx'
|
|
|
|
# default overrides should prevent actual apply as they are all dry-run=server
|
|
# also assure that explicit flags are also passed
|
|
output_message=$(kubectl apply -n test-kuberc-ns -f hack/testdata/pod.yaml --kuberc="${TMPDIR:-/tmp}"/kuberc_file)
|
|
kube::test::if_has_string "${output_message}" 'serverside-applied (server dry run)'
|
|
|
|
# interactive flag is defaulted to true and prompted as no
|
|
output_message=$(kubectl delete pod/test-pod-2 -n test-kuberc-ns <<< $'n\n' --kuberc="${TMPDIR:-/tmp}"/kuberc_file)
|
|
kube::test::if_has_string "${output_message}" 'pod/test-pod-2'
|
|
# assure that it is not deleted
|
|
output_message=$(kubectl get pod/test-pod-2 2>&1 "${kube_flags[@]:?}" --kuberc="${TMPDIR:-/tmp}"/kuberc_file)
|
|
kube::test::if_has_string "${output_message}" "test-pod-2"
|
|
|
|
cat > "${TMPDIR:-/tmp}"/kuberc_file_multi << EOF
|
|
---
|
|
apiVersion: kubectl.config.k8s.io/v1alpha1
|
|
kind: Preference
|
|
overrides:
|
|
- command: get
|
|
flags:
|
|
- name: namespace
|
|
default: "test-kuberc-ns"
|
|
- name: output
|
|
default: "json"
|
|
unknown: invalid
|
|
---
|
|
apiVersion: kubectl.config.k8s.io/notexist
|
|
kind: Preference
|
|
overrides:
|
|
- command: get
|
|
flags:
|
|
- name: namespace
|
|
default: "test-kuberc-ns"
|
|
- name: output
|
|
default: "json"
|
|
EOF
|
|
|
|
# assure that it is not deleted
|
|
output_message=$(kubectl get pod/test-pod-2 2>&1 "${kube_flags[@]:?}" --kuberc="${TMPDIR:-/tmp}"/kuberc_file_multi)
|
|
# assure that correct kuberc is found and printed in output_message
|
|
kube::test::if_has_string "${output_message}" "test-pod-2"
|
|
# assure that warning message is also printed for the notexist kuberc version
|
|
kube::test::if_has_string "${output_message}" "strict decoding error" "unknown"
|
|
|
|
# explicitly overwriting the value that is also defaulted in kuberc and
|
|
# assure that explicit value supersedes
|
|
output_message=$(kubectl delete namespace/test-kuberc-ns --interactive=false --kuberc="${TMPDIR:-/tmp}"/kuberc_file)
|
|
kube::test::if_has_string "${output_message}" 'namespace "test-kuberc-ns" deleted'
|
|
|
|
unset KUBECTL_KUBERC
|
|
|
|
set +o nounset
|
|
set +o errexit
|
|
}
|