diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_restart_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_restart_test.go index 5dc47d21a8f..c4425e8379e 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_restart_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_restart_test.go @@ -23,6 +23,8 @@ import ( "strings" "testing" + "github.com/stretchr/testify/assert" + appsv1 "k8s.io/api/apps/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -70,6 +72,56 @@ func TestRolloutRestartOne(t *testing.T) { } } +func TestRolloutRestartError(t *testing.T) { + deploymentName := "deployment/nginx-deployment" + ns := scheme.Codecs.WithoutConversion() + tf := cmdtesting.NewTestFactory().WithNamespace("test") + + info, _ := runtime.SerializerInfoForMediaType(ns.SupportedMediaTypes(), runtime.ContentTypeJSON) + encoder := ns.EncoderForVersion(info.Serializer, rolloutRestartGroupVersionEncoder) + tf.Client = &RolloutRestartRESTClient{ + RESTClient: &fake.RESTClient{ + GroupVersion: rolloutRestartGroupVersionEncoder, + NegotiatedSerializer: ns, + Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { + switch p, m := req.URL.Path, req.Method; { + case p == "/namespaces/test/deployments/nginx-deployment" && (m == "GET" || m == "PATCH"): + responseDeployment := &appsv1.Deployment{} + responseDeployment.Name = deploymentName + body := ioutil.NopCloser(bytes.NewReader([]byte(runtime.EncodeOrDie(encoder, responseDeployment)))) + return &http.Response{StatusCode: http.StatusOK, Header: cmdtesting.DefaultHeader(), Body: body}, nil + default: + t.Fatalf("unexpected request: %#v\n%#v", req.URL, req) + return nil, nil + } + }), + }, + } + + streams, _, bufOut, _ := genericclioptions.NewTestIOStreams() + opt := NewRolloutRestartOptions(streams) + err := opt.Complete(tf, nil, []string{deploymentName}) + assert.NoError(t, err) + err = opt.Validate() + assert.NoError(t, err) + opt.Restarter = func(obj runtime.Object) ([]byte, error) { + return runtime.Encode(scheme.Codecs.LegacyCodec(appsv1.SchemeGroupVersion), obj) + } + + expectedErr := "failed to create patch for nginx-deployment: if restart has already been triggered within the past second, please wait before attempting to trigger another" + err = opt.RunRestart() + if err == nil { + t.Errorf("error expected but not fired") + } + if err.Error() != expectedErr { + t.Errorf("unexpected error fired %v", err) + } + + if bufOut.String() != "" { + t.Errorf("unexpected message") + } +} + // Tests that giving selectors with no matching objects shows an error func TestRolloutRestartSelectorNone(t *testing.T) { labelSelector := "app=test"