cloudapi: V2
V2 is compliant with api.openshift.com design guidelines. Errors are predefined, have codes, and are queryable. All requests have an operationId set: a unique identifier which is sortable by time. This is added to the response in case of an error. All returned objects have the href, id, and kind field set.
This commit is contained in:
parent
19eb65e9fd
commit
5a9d8c792b
28 changed files with 4877 additions and 585 deletions
95
internal/cloudapi/v2/errors_test.go
Normal file
95
internal/cloudapi/v2/errors_test.go
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
package v2
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestHTTPErrorReturnsEchoHTTPError(t *testing.T) {
|
||||
for _, se := range getServiceErrors() {
|
||||
err := HTTPError(se.code)
|
||||
echoError, ok := err.(*echo.HTTPError)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, se.httpStatus, echoError.Code)
|
||||
serviceErrorCode, ok := echoError.Message.(ServiceErrorCode)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, se.code, serviceErrorCode)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAPIError(t *testing.T) {
|
||||
e := echo.New()
|
||||
for _, se := range getServiceErrors() {
|
||||
ctx := e.NewContext(nil, nil)
|
||||
ctx.Set("operationID", "test-operation-id")
|
||||
apiError := APIError(se.code, nil, ctx)
|
||||
require.Equal(t, fmt.Sprintf("/api/composer/v2/errors/%d", se.code), apiError.Href)
|
||||
require.Equal(t, fmt.Sprintf("%d", se.code), apiError.Id)
|
||||
require.Equal(t, "Error", apiError.Kind)
|
||||
require.Equal(t, fmt.Sprintf("COMPOSER-%d", se.code), apiError.Code)
|
||||
require.Equal(t, "test-operation-id", apiError.OperationId)
|
||||
require.Equal(t, se.reason, apiError.Reason)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAPIErrorOperationID(t *testing.T) {
|
||||
ctx := echo.New().NewContext(nil, nil)
|
||||
|
||||
apiError := APIError(ErrorUnauthenticated, nil, ctx)
|
||||
require.Equal(t, "COMPOSER-10003", apiError.Code)
|
||||
|
||||
ctx.Set("operationID", 5)
|
||||
apiError = APIError(ErrorUnauthenticated, nil, ctx)
|
||||
require.Equal(t, "COMPOSER-10003", apiError.Code)
|
||||
|
||||
ctx.Set("operationID", "test-operation-id")
|
||||
apiError = APIError(ErrorUnauthenticated, nil, ctx)
|
||||
require.Equal(t, "COMPOSER-401", apiError.Code)
|
||||
}
|
||||
|
||||
func TestAPIErrorList(t *testing.T) {
|
||||
ctx := echo.New().NewContext(nil, nil)
|
||||
ctx.Set("operationID", "test-operation-id")
|
||||
|
||||
// negative values return empty list
|
||||
errs := APIErrorList(-10, -30, ctx)
|
||||
require.Equal(t, 0, errs.Size)
|
||||
require.Equal(t, 0, len(errs.Items))
|
||||
errs = APIErrorList(0, -30, ctx)
|
||||
require.Equal(t, 0, errs.Size)
|
||||
require.Equal(t, 0, len(errs.Items))
|
||||
errs = APIErrorList(-10, 0, ctx)
|
||||
require.Equal(t, 0, errs.Size)
|
||||
require.Equal(t, 0, len(errs.Items))
|
||||
|
||||
// all of them
|
||||
errs = APIErrorList(0, 1000, ctx)
|
||||
require.Equal(t, len(getServiceErrors()), errs.Size)
|
||||
|
||||
// some of them
|
||||
errs = APIErrorList(0, 10, ctx)
|
||||
require.Equal(t, 10, errs.Size)
|
||||
require.Equal(t, len(getServiceErrors()), errs.Total)
|
||||
require.Equal(t, 0, errs.Page)
|
||||
require.Equal(t, "COMPOSER-401", errs.Items[0].Code)
|
||||
errs = APIErrorList(1, 10, ctx)
|
||||
require.Equal(t, 10, errs.Size)
|
||||
require.Equal(t, len(getServiceErrors()), errs.Total)
|
||||
require.Equal(t, 1, errs.Page)
|
||||
require.Equal(t, "COMPOSER-11", errs.Items[0].Code)
|
||||
|
||||
// high page
|
||||
errs = APIErrorList(1000, 1, ctx)
|
||||
require.Equal(t, 0, errs.Size)
|
||||
require.Equal(t, len(getServiceErrors()), errs.Total)
|
||||
require.Equal(t, 1000, errs.Page)
|
||||
|
||||
// zero pagesize
|
||||
errs = APIErrorList(1000, 0, ctx)
|
||||
require.Equal(t, 0, errs.Size)
|
||||
require.Equal(t, len(getServiceErrors()), errs.Total)
|
||||
require.Equal(t, 1000, errs.Page)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue