diff --git a/pkg/kubectl/cmd/delete_test.go b/pkg/kubectl/cmd/delete_test.go index 1e8c964838a..79be18a66df 100644 --- a/pkg/kubectl/cmd/delete_test.go +++ b/pkg/kubectl/cmd/delete_test.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/fake" ) @@ -447,3 +448,54 @@ func TestDeleteMultipleSelector(t *testing.T) { t.Errorf("unexpected output: %s", buf.String()) } } + +func TestResourceErrors(t *testing.T) { + testCases := map[string]struct { + args []string + flags map[string]string + errFn func(error) bool + }{ + "no args": { + args: []string{}, + errFn: func(err error) bool { return strings.Contains(err.Error(), "you must provide one or more resources") }, + }, + "resources but no selectors": { + args: []string{"pods"}, + errFn: func(err error) bool { + return strings.Contains(err.Error(), "resource(s) were provided, but no name, label selector, or --all flag specified") + }, + }, + "multiple resources but no selectors": { + args: []string{"pods,deployments"}, + errFn: func(err error) bool { + return strings.Contains(err.Error(), "resource(s) were provided, but no name, label selector, or --all flag specified") + }, + }, + } + + for k, testCase := range testCases { + f, tf, _ := NewAPIFactory() + tf.Printer = &testPrinter{} + tf.Namespace = "test" + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + + buf := bytes.NewBuffer([]byte{}) + cmd := NewCmdDelete(f, buf) + cmd.SetOutput(buf) + + for k, v := range testCase.flags { + cmd.Flags().Set(k, v) + } + err := RunDelete(f, buf, cmd, testCase.args, &DeleteOptions{}) + if !testCase.errFn(err) { + t.Errorf("%s: unexpected error: %v", k, err) + continue + } + if tf.Printer.(*testPrinter).Objects != nil { + t.Errorf("unexpected print to default printer") + } + if buf.Len() > 0 { + t.Errorf("buffer should be empty: %s", string(buf.Bytes())) + } + } +} diff --git a/pkg/kubectl/cmd/label_test.go b/pkg/kubectl/cmd/label_test.go index 24c2cff20ea..dbfdf9a8688 100644 --- a/pkg/kubectl/cmd/label_test.go +++ b/pkg/kubectl/cmd/label_test.go @@ -295,6 +295,18 @@ func TestLabelErrors(t *testing.T) { args: []string{"pods=bar"}, errFn: func(err error) bool { return strings.Contains(err.Error(), "one or more resources must be specified") }, }, + "resources but no selectors": { + args: []string{"pods", "app=bar"}, + errFn: func(err error) bool { + return strings.Contains(err.Error(), "resource(s) were provided, but no name, label selector, or --all flag specified") + }, + }, + "multiple resources but no selectors": { + args: []string{"pods,deployments", "app=bar"}, + errFn: func(err error) bool { + return strings.Contains(err.Error(), "resource(s) were provided, but no name, label selector, or --all flag specified") + }, + }, } for k, testCase := range testCases { diff --git a/pkg/kubectl/resource/builder.go b/pkg/kubectl/resource/builder.go index ae19557fd9a..2e71537b56e 100644 --- a/pkg/kubectl/resource/builder.go +++ b/pkg/kubectl/resource/builder.go @@ -688,6 +688,9 @@ func (b *Builder) visitorResult() *Result { return &Result{singular: singular, visitor: visitors, sources: b.paths} } + if len(b.resources) != 0 { + return &Result{err: fmt.Errorf("resource(s) were provided, but no name, label selector, or --all flag specified")} + } return &Result{err: fmt.Errorf("you must provide one or more resources by argument or filename (%s)", strings.Join(InputExtensions, "|"))} }