diff --git a/hack/lib/test.sh b/hack/lib/test.sh index 6c7f41337c2b..1650a38d7298 100644 --- a/hack/lib/test.sh +++ b/hack/lib/test.sh @@ -224,7 +224,7 @@ kube::test::if_has_string() { local message=$1 local match=$2 - if [[ $(echo "$message" | grep "$match") ]]; then + if echo "$message" | grep -q "$match"; then echo "Successful" echo "message:$message" echo "has:$match" @@ -238,6 +238,24 @@ kube::test::if_has_string() { fi } +kube::test::if_has_not_string() { + local message=$1 + local match=$2 + + if echo "$message" | grep -q "$match"; then + echo "FAIL!" + echo "message:$message" + echo "has:$match" + caller + return 1 + else + echo "Successful" + echo "message:$message" + echo "has not:$match" + return 0 + fi +} + # Returns true if the required resource is part of supported resources. # Expects env vars: # SUPPORTED_RESOURCES: Array of all resources supported by the apiserver. "*" diff --git a/hack/make-rules/test-cmd-util.sh b/hack/make-rules/test-cmd-util.sh index a4808b5c7684..c430ddb1bded 100644 --- a/hack/make-rules/test-cmd-util.sh +++ b/hack/make-rules/test-cmd-util.sh @@ -1037,6 +1037,46 @@ run_kubectl_get_tests() { # Post-condition: POD abc should error since it doesn't exist kube::test::if_has_string "${output_message}" 'pods "abc" not found' + ### Test retrieval of pods when none exist with non-human readable output format flag specified + # Pre-condition: no pods exist + kube::test::get_object_assert pods "{{range.items}}{{$id_field}}:{{end}}" '' + # Command + output_message=$(kubectl get pods 2>&1 "${kube_flags[@]}" -o json) + # Post-condition: The text "No resources found" should not be part of the output + kube::test::if_has_not_string "${output_message}" 'No resources found' + # Command + output_message=$(kubectl get pods 2>&1 "${kube_flags[@]}" -o yaml) + # Post-condition: The text "No resources found" should not be part of the output + kube::test::if_has_not_string "${output_message}" 'No resources found' + # Command + output_message=$(kubectl get pods 2>&1 "${kube_flags[@]}" -o name) + # Post-condition: The text "No resources found" should not be part of the output + kube::test::if_has_not_string "${output_message}" 'No resources found' + # Command + output_message=$(kubectl get pods 2>&1 "${kube_flags[@]}" -o jsonpath='{.items}') + # Post-condition: The text "No resources found" should not be part of the output + kube::test::if_has_not_string "${output_message}" 'No resources found' + # Command + output_message=$(kubectl get pods 2>&1 "${kube_flags[@]}" -o go-template='{{.items}}') + # Post-condition: The text "No resources found" should not be part of the output + kube::test::if_has_not_string "${output_message}" 'No resources found' + # Command + output_message=$(kubectl get pods 2>&1 "${kube_flags[@]}" -o custom-columns=NAME:.metadata.name) + # Post-condition: The text "No resources found" should not be part of the output + kube::test::if_has_not_string "${output_message}" 'No resources found' + + ### Test retrieval of pods when none exist, with human-readable output format flag specified + # Pre-condition: no pods exist + kube::test::get_object_assert pods "{{range.items}}{{$id_field}}:{{end}}" '' + # Command + output_message=$(kubectl get pods 2>&1 "${kube_flags[@]}") + # Post-condition: The text "No resources found" should be part of the output + kube::test::if_has_string "${output_message}" 'No resources found' + # Command + output_message=$(kubectl get pods 2>&1 "${kube_flags[@]}" -o wide) + # Post-condition: The text "No resources found" should be part of the output + kube::test::if_has_string "${output_message}" 'No resources found' + ### Test retrieval of non-existing POD with json output flag specified # Pre-condition: no POD exists kube::test::get_object_assert pods "{{range.items}}{{$id_field}}:{{end}}" '' diff --git a/pkg/kubectl/cmd/get.go b/pkg/kubectl/cmd/get.go index f6257ea9754f..2542b8a7c9b1 100644 --- a/pkg/kubectl/cmd/get.go +++ b/pkg/kubectl/cmd/get.go @@ -319,9 +319,6 @@ func RunGet(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args [ } errs = append(errs, err) } - if len(infos) == 0 && len(errs) == 0 { - outputEmptyListWarning(errOut) - } res := "" if len(infos) > 0 {