diff --git a/pkg/httperrors/errors.go b/pkg/httperrors/errors.go index a047f6440f..4e4b226e03 100644 --- a/pkg/httperrors/errors.go +++ b/pkg/httperrors/errors.go @@ -26,37 +26,37 @@ func errorMessage(msg string, params ...interface{}) (string, httputils.Error) { } func NewBadGatewayError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(502, "BadGateway", msg, err) } func NewNotImplementedError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(501, "NotImplemented", msg, err) } func NewInternalServerError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(500, "InternalServerError", msg, err) } func NewResourceNotReadyError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(500, "ResourceNotReadyError", msg, err) } func NewOutOfResourceError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(500, "NewOutOfResourceError", msg, err) } func NewServerStatusError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(400, "ServerStatusError", msg, err) } func NewPaymentError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(402, "PaymentError", msg, err) } @@ -66,42 +66,42 @@ func NewImageNotFoundError(imageId string) *httputils.JSONClientError { } func NewResourceNotFoundError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(404, "ResourceNotFoundError", msg, err) } func NewSpecNotFoundError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(404, "SpecNotFoundError", msg, err) } func NewActionNotFoundError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(404, "ActionNotFoundError", msg, err) } func NewTenantNotFoundError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(404, "TenantNotFoundError", msg, err) } func NewUserNotFoundError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(404, "UserNotFoundError", msg, err) } func NewInvalidStatusError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(400, "InvalidStatusError", msg, err) } func NewInputParameterError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(400, "InputParameterError", msg, err) } func NewWeakPasswordError() *httputils.JSONClientError { - msg, err := errorMessage("password must be 12 chars of at least one digit, letter, uppercase letter and punctuate", nil) + msg, err := errorMessage("password must be 12 chars of at least one digit, letter, uppercase letter and punctuate") return NewJsonClientError(400, "WeakPasswordError", msg, err) } @@ -111,57 +111,57 @@ func NewMissingParameterError(paramName string) *httputils.JSONClientError { } func NewInsufficientResourceError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(400, "InsufficientResourceError", msg, err) } func NewOutOfQuotaError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(400, "OutOfQuotaError", msg, err) } func NewNotSufficientPrivilegeError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(403, "NotSufficientPrivilegeError", msg, err) } func NewUnsupportOperationError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(406, "UnsupportOperationError", msg, err) } func NewNotEmptyError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(406, "NotEmptyError", msg, err) } func NewBadRequestError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(400, "BadRequestError", msg, err) } func NewUnauthorizedError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(401, "UnauthorizedError", msg, err) } func NewInvalidCredentialError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(401, "InvalidCredentialError", msg, err) } func NewForbiddenError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(403, "ForbiddenError", msg, err) } func NewNotFoundError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(404, "NotFoundError", msg, err) } func NewNotAcceptableError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(406, "NotAcceptableError", msg, err) } @@ -171,17 +171,17 @@ func NewDuplicateNameError(resName string, resId string) *httputils.JSONClientEr } func NewConflictError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(409, "ConflictError", msg, err) } func NewResourceBusyError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(409, "ResourceBusyError", msg, err) } func NewRequireLicenseError(msg string, params ...interface{}) *httputils.JSONClientError { - msg, err := errorMessage(msg, params) + msg, err := errorMessage(msg, params...) return NewJsonClientError(402, "RequireLicenseError", msg, err) } diff --git a/pkg/httperrors/errors_test.go b/pkg/httperrors/errors_test.go new file mode 100644 index 0000000000..051bc74d9a --- /dev/null +++ b/pkg/httperrors/errors_test.go @@ -0,0 +1,52 @@ +package httperrors + +import ( + "testing" +) + +func TestVariadic(t *testing.T) { + conv := func(v interface{}) interface{} { return v } + cases := []struct { + name string + msg string + params []interface{} + out string + }{ + { + name: "no params", + msg: "hello", + out: "hello", + }, + { + name: "no params (with fmt escape)", + msg: "hello %s %d %v", + out: "hello %s %d %v", + }, + { + name: "with params (no fmt escape)", + msg: "hello", + params: []interface{}{conv("world")}, + out: "hello%!(EXTRA string=world)", + }, + { + name: "with params (with fmt escape)", + msg: "hello %s", + params: []interface{}{conv("world")}, + out: "hello world", + }, + } + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + msg, _ := errorMessage(c.msg, c.params...) + if msg != c.out { + t.Errorf("want %s, got %s", c.out, msg) + } + }) + t.Run(c.name+"_New", func(t *testing.T) { + err := NewInputParameterError(c.msg, c.params...) + if err.Details != c.out { + t.Errorf("want %s, got %s", c.out, err.Details) + } + }) + } +}