Add unit test for error case

This commit is contained in:
Arda Güçlü 2022-11-18 10:37:56 +03:00
parent fb3d9e3ac9
commit 4699801d65

View File

@ -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"