From 55333c08176010dd152661f33791d59dabb38984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arda=20G=C3=BC=C3=A7l=C3=BC?= Date: Tue, 5 Sep 2023 10:40:12 +0300 Subject: [PATCH] KEP-3895: Promote interactive delete to beta Kubernetes-commit: e8564d6c5bcf5757238176f90318ae0164274af9 --- pkg/cmd/delete/delete_flags.go | 6 +- pkg/cmd/delete/delete_test.go | 110 ++++++++++++++++++--------------- pkg/cmd/util/helpers.go | 1 - 3 files changed, 63 insertions(+), 54 deletions(-) diff --git a/pkg/cmd/delete/delete_flags.go b/pkg/cmd/delete/delete_flags.go index 83998f1af..f79a23b94 100644 --- a/pkg/cmd/delete/delete_flags.go +++ b/pkg/cmd/delete/delete_flags.go @@ -160,10 +160,8 @@ func (f *DeleteFlags) AddFlags(cmd *cobra.Command) { if f.Raw != nil { cmd.Flags().StringVar(f.Raw, "raw", *f.Raw, "Raw URI to DELETE to the server. Uses the transport specified by the kubeconfig file.") } - if cmdutil.InteractiveDelete.IsEnabled() { - if f.Interactive != nil { - cmd.Flags().BoolVarP(f.Interactive, "interactive", "i", *f.Interactive, "If true, delete resource only when user confirms. This flag is in Alpha.") - } + if f.Interactive != nil { + cmd.Flags().BoolVarP(f.Interactive, "interactive", "i", *f.Interactive, "If true, delete resource only when user confirms. This flag is in Alpha.") } } diff --git a/pkg/cmd/delete/delete_test.go b/pkg/cmd/delete/delete_test.go index c47d4fc72..427b2713a 100644 --- a/pkg/cmd/delete/delete_test.go +++ b/pkg/cmd/delete/delete_test.go @@ -54,41 +54,37 @@ func TestDeleteFlagValidation(t *testing.T) { defer f.Cleanup() tests := []struct { - flags DeleteFlags - enableAlphas []cmdutil.FeatureGate - args [][]string - expectedErr string + flags DeleteFlags + args [][]string + expectedErr string }{ { flags: DeleteFlags{ Raw: pointer.String("test"), Interactive: pointer.Bool(true), }, - enableAlphas: []cmdutil.FeatureGate{cmdutil.InteractiveDelete}, - expectedErr: "--interactive can not be used with --raw", + expectedErr: "--interactive can not be used with --raw", }, } for _, test := range tests { cmd := fakecmd() - cmdtesting.WithAlphaEnvs(test.enableAlphas, t, func(t *testing.T) { - deleteOptions, err := test.flags.ToOptions(nil, genericiooptions.NewTestIOStreamsDiscard()) - if err != nil { - t.Fatalf("unexpected error creating delete options: %s", err) - } - deleteOptions.Filenames = []string{"../../../testdata/redis-master-controller.yaml"} - err = deleteOptions.Complete(f, nil, cmd) - if err != nil { - t.Fatalf("unexpected error creating delete options: %s", err) - } - err = deleteOptions.Validate() - if err == nil { - t.Fatalf("missing expected error") - } - if test.expectedErr != err.Error() { - t.Errorf("expected error %s, got %s", test.expectedErr, err) - } - }) + deleteOptions, err := test.flags.ToOptions(nil, genericiooptions.NewTestIOStreamsDiscard()) + if err != nil { + t.Fatalf("unexpected error creating delete options: %s", err) + } + deleteOptions.Filenames = []string{"../../../testdata/redis-master-controller.yaml"} + err = deleteOptions.Complete(f, nil, cmd) + if err != nil { + t.Fatalf("unexpected error creating delete options: %s", err) + } + err = deleteOptions.Validate() + if err == nil { + t.Fatalf("missing expected error") + } + if test.expectedErr != err.Error() { + t.Errorf("expected error %s, got %s", test.expectedErr, err) + } } } @@ -362,34 +358,50 @@ func TestDeleteObjectWithInteractive(t *testing.T) { }), } - cmdtesting.WithAlphaEnvs([]cmdutil.FeatureGate{cmdutil.InteractiveDelete}, t, func(t *testing.T) { - streams, in, buf, _ := genericiooptions.NewTestIOStreams() - fmt.Fprint(in, "y") - cmd := NewCmdDelete(tf, streams) - cmd.Flags().Set("filename", "../../../testdata/redis-master-controller.yaml") - cmd.Flags().Set("output", "name") - cmd.Flags().Set("interactive", "true") - cmd.Run(cmd, []string{}) + streams, in, buf, _ := genericiooptions.NewTestIOStreams() + fmt.Fprint(in, "y") + cmd := NewCmdDelete(tf, streams) + err := cmd.Flags().Set("filename", "../../../testdata/redis-master-controller.yaml") + if err != nil { + t.Errorf("unexpected error %v", err) + } + err = cmd.Flags().Set("output", "name") + if err != nil { + t.Errorf("unexpected error %v", err) + } + err = cmd.Flags().Set("interactive", "true") + if err != nil { + t.Errorf("unexpected error %v", err) + } + cmd.Run(cmd, []string{}) - if buf.String() != "You are about to delete the following 1 resource(s):\nreplicationcontroller/redis-master\nDo you want to continue? (y/n): replicationcontroller/redis-master\n" { - t.Errorf("unexpected output: %s", buf.String()) - } + if buf.String() != "You are about to delete the following 1 resource(s):\nreplicationcontroller/redis-master\nDo you want to continue? (y/n): replicationcontroller/redis-master\n" { + t.Errorf("unexpected output: %s", buf.String()) + } - streams, in, buf, _ = genericiooptions.NewTestIOStreams() - fmt.Fprint(in, "n") - cmd = NewCmdDelete(tf, streams) - cmd.Flags().Set("filename", "../../../testdata/redis-master-controller.yaml") - cmd.Flags().Set("output", "name") - cmd.Flags().Set("interactive", "true") - cmd.Run(cmd, []string{}) + streams, in, buf, _ = genericiooptions.NewTestIOStreams() + fmt.Fprint(in, "n") + cmd = NewCmdDelete(tf, streams) + err = cmd.Flags().Set("filename", "../../../testdata/redis-master-controller.yaml") + if err != nil { + t.Errorf("unexpected error %v", err) + } + err = cmd.Flags().Set("output", "name") + if err != nil { + t.Errorf("unexpected error %v", err) + } + err = cmd.Flags().Set("interactive", "true") + if err != nil { + t.Errorf("unexpected error %v", err) + } + cmd.Run(cmd, []string{}) - if buf.String() != "You are about to delete the following 1 resource(s):\nreplicationcontroller/redis-master\nDo you want to continue? (y/n): deletion is cancelled\n" { - t.Errorf("unexpected output: %s", buf.String()) - } - if buf.String() == ": replicationcontroller/redis-master\n" { - t.Errorf("unexpected output: %s", buf.String()) - } - }) + if buf.String() != "You are about to delete the following 1 resource(s):\nreplicationcontroller/redis-master\nDo you want to continue? (y/n): deletion is cancelled\n" { + t.Errorf("unexpected output: %s", buf.String()) + } + if buf.String() == ": replicationcontroller/redis-master\n" { + t.Errorf("unexpected output: %s", buf.String()) + } } func TestGracePeriodScenarios(t *testing.T) { diff --git a/pkg/cmd/util/helpers.go b/pkg/cmd/util/helpers.go index 43f72f54e..5d92b10b8 100644 --- a/pkg/cmd/util/helpers.go +++ b/pkg/cmd/util/helpers.go @@ -427,7 +427,6 @@ type FeatureGate string const ( ApplySet FeatureGate = "KUBECTL_APPLYSET" CmdPluginAsSubcommand FeatureGate = "KUBECTL_ENABLE_CMD_SHADOW" - InteractiveDelete FeatureGate = "KUBECTL_INTERACTIVE_DELETE" ) func (f FeatureGate) IsEnabled() bool {