Skip to content

Commit

Permalink
Merge pull request kubernetes#77681 from soltysh/fix_get
Browse files Browse the repository at this point in the history
Fix handling empty result when invoking kubectl get
  • Loading branch information
k8s-ci-robot authored Aug 17, 2019
2 parents 732b8ca + 09ecba5 commit d2b5530
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 2 deletions.
4 changes: 2 additions & 2 deletions pkg/kubectl/cmd/get/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -750,8 +750,8 @@ func (o *GetOptions) printGeneric(r *resource.Result) error {
}

var obj runtime.Object
if !singleItemImplied || len(infos) > 1 {
// we have more than one item, so coerce all items into a list.
if !singleItemImplied || len(infos) != 1 {
// we have zero or multple items, so coerce all items into a list.
// we don't want an *unstructured.Unstructured list yet, as we
// may be dealing with non-unstructured objects. Compose all items
// into an corev1.List, and then decode using an unstructured scheme.
Expand Down
54 changes: 54 additions & 0 deletions pkg/kubectl/cmd/get/get_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -702,6 +702,60 @@ func TestGetObjectIgnoreNotFound(t *testing.T) {
}
}

func TestEmptyResult(t *testing.T) {
cmdtesting.InitTestErrorHandler(t)

tf := cmdtesting.NewTestFactory().WithNamespace("test")
defer tf.Cleanup()
codec := scheme.Codecs.LegacyCodec(scheme.Scheme.PrioritizedVersionsAllGroups()...)

tf.UnstructuredClient = &fake.RESTClient{
NegotiatedSerializer: resource.UnstructuredPlusDefaultContentConfig().NegotiatedSerializer,
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
return &http.Response{StatusCode: 200, Header: cmdtesting.DefaultHeader(), Body: cmdtesting.ObjBody(codec, &corev1.PodList{})}, nil
}),
}

streams, _, _, errbuf := genericclioptions.NewTestIOStreams()
cmd := NewCmdGet("kubectl", tf, streams)
// we're assuming that an empty file is being passed from stdin
cmd.Flags().Set("filename", "-")
cmd.Run(cmd, []string{})

if !strings.Contains(errbuf.String(), "No resources found") {
t.Errorf("unexpected output: %q", errbuf.String())
}
}

func TestEmptyResultJSON(t *testing.T) {
cmdtesting.InitTestErrorHandler(t)

tf := cmdtesting.NewTestFactory().WithNamespace("test")
defer tf.Cleanup()
codec := scheme.Codecs.LegacyCodec(scheme.Scheme.PrioritizedVersionsAllGroups()...)

tf.UnstructuredClient = &fake.RESTClient{
NegotiatedSerializer: resource.UnstructuredPlusDefaultContentConfig().NegotiatedSerializer,
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
return &http.Response{StatusCode: 200, Header: cmdtesting.DefaultHeader(), Body: cmdtesting.ObjBody(codec, &corev1.PodList{})}, nil
}),
}

streams, _, outbuf, errbuf := genericclioptions.NewTestIOStreams()
cmd := NewCmdGet("kubectl", tf, streams)
// we're assuming that an empty file is being passed from stdin
cmd.Flags().Set("filename", "-")
cmd.Flags().Set("output", "json")
cmd.Run(cmd, []string{})

if errbuf.Len() > 0 {
t.Errorf("unexpected error: %q", errbuf.String())
}
if !strings.Contains(outbuf.String(), `"items": []`) {
t.Errorf("unexpected output: %q", outbuf.String())
}
}

func TestGetSortedObjects(t *testing.T) {
pods := &corev1.PodList{
ListMeta: metav1.ListMeta{
Expand Down

0 comments on commit d2b5530

Please sign in to comment.