76 lines
1.5 KiB
Go
76 lines
1.5 KiB
Go
package gateway
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"testing"
|
|
|
|
"forge.cadoles.com/Cadoles/emissary/internal/spec"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type validatorTestCase struct {
|
|
Name string
|
|
Source string
|
|
ExpectedResult bool
|
|
}
|
|
|
|
var validatorTestCases = []validatorTestCase{
|
|
{
|
|
Name: "SpecOK",
|
|
Source: "testdata/spec-ok.json",
|
|
ExpectedResult: true,
|
|
},
|
|
{
|
|
Name: "SpecMissingProp",
|
|
Source: "testdata/spec-missing-prop.json",
|
|
ExpectedResult: false,
|
|
},
|
|
{
|
|
Name: "SpecAdditionalProp",
|
|
Source: "testdata/spec-additional-prop.json",
|
|
ExpectedResult: false,
|
|
},
|
|
}
|
|
|
|
func TestValidator(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
validator := spec.NewValidator()
|
|
if err := validator.Register(NameGateway, schema); err != nil {
|
|
t.Fatalf("+%v", errors.WithStack(err))
|
|
}
|
|
|
|
for _, tc := range validatorTestCases {
|
|
func(tc *validatorTestCase) {
|
|
t.Run(tc.Name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rawSpec, err := ioutil.ReadFile(tc.Source)
|
|
if err != nil {
|
|
t.Fatalf("+%v", errors.WithStack(err))
|
|
}
|
|
|
|
var spec spec.RawSpec
|
|
|
|
if err := json.Unmarshal(rawSpec, &spec); err != nil {
|
|
t.Fatalf("+%v", errors.WithStack(err))
|
|
}
|
|
|
|
ctx := context.Background()
|
|
|
|
result, err := validator.Validate(ctx, &spec)
|
|
|
|
if e, g := tc.ExpectedResult, result; e != g {
|
|
t.Errorf("result: expected '%v', got '%v'", e, g)
|
|
}
|
|
|
|
if tc.ExpectedResult && err != nil {
|
|
t.Errorf("+%v", errors.WithStack(err))
|
|
}
|
|
})
|
|
}(&tc)
|
|
}
|
|
}
|