mirror of https://github.com/docker/docs.git
85 lines
2.3 KiB
Go
85 lines
2.3 KiB
Go
package validation
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// NewSerializableError errors if some random error is not returned
|
|
func TestNewSerializableErrorNonValidationError(t *testing.T) {
|
|
_, err := NewSerializableError(fmt.Errorf("not validation error"))
|
|
require.Error(t, err)
|
|
}
|
|
|
|
// NewSerializableError succeeds if a validation error is passed to it
|
|
func TestNewSerializableErrorValidationError(t *testing.T) {
|
|
vError := ErrValidation{"validation error"}
|
|
s, err := NewSerializableError(vError)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "ErrValidation", s.Name)
|
|
require.Equal(t, vError, s.Error)
|
|
}
|
|
|
|
// We can unmarshal a marshalled SerializableError for all validation errors
|
|
func TestUnmarshalSerialiableErrorSuccessfully(t *testing.T) {
|
|
validationErrors := []error{
|
|
ErrValidation{"bad validation"},
|
|
ErrBadHierarchy{Missing: "root", Msg: "badness"},
|
|
ErrBadRoot{"bad root"},
|
|
ErrBadTargets{"bad targets"},
|
|
ErrBadSnapshot{"bad snapshot"},
|
|
}
|
|
|
|
for _, validError := range validationErrors {
|
|
origS, err := NewSerializableError(validError)
|
|
require.NoError(t, err)
|
|
jsonBytes, err := json.Marshal(origS)
|
|
require.NoError(t, err)
|
|
|
|
var newS SerializableError
|
|
err = json.Unmarshal(jsonBytes, &newS)
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, validError, newS.Error)
|
|
}
|
|
}
|
|
|
|
// If the name is unrecognized, unmarshalling will error
|
|
func TestUnmarshalUnknownErrorName(t *testing.T) {
|
|
origS := SerializableError{Name: "boop", Error: ErrBadRoot{"bad"}}
|
|
b, err := json.Marshal(origS)
|
|
require.NoError(t, err)
|
|
|
|
var newS SerializableError
|
|
err = json.Unmarshal(b, &newS)
|
|
require.Error(t, err)
|
|
}
|
|
|
|
// If the error is unmarshallable, unmarshalling will error even if the name
|
|
// is valid
|
|
func TestUnmarshalInvalidError(t *testing.T) {
|
|
var newS SerializableError
|
|
err := json.Unmarshal([]byte(`{"Name": "ErrBadRoot", "Error": "meh"}`), &newS)
|
|
require.Error(t, err)
|
|
}
|
|
|
|
// If there is no name, unmarshalling will error even if the error is valid
|
|
func TestUnmarshalNoName(t *testing.T) {
|
|
origS := SerializableError{Error: ErrBadRoot{"bad"}}
|
|
b, err := json.Marshal(origS)
|
|
require.NoError(t, err)
|
|
|
|
var newS SerializableError
|
|
err = json.Unmarshal(b, &newS)
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestUnmarshalInvalidJSON(t *testing.T) {
|
|
var newS SerializableError
|
|
err := json.Unmarshal([]byte("{"), &newS)
|
|
require.Error(t, err)
|
|
}
|