66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
|
package sysupgrade
|
||
|
|
||
|
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
|
||
|
ShouldFail bool
|
||
|
}
|
||
|
|
||
|
var validatorTestCases = []validatorTestCase{
|
||
|
{
|
||
|
Name: "SpecOK",
|
||
|
Source: "testdata/spec-ok.json",
|
||
|
ShouldFail: false,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
func TestValidator(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
validator := spec.NewValidator()
|
||
|
if err := validator.Register(Name, 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()
|
||
|
|
||
|
err = validator.Validate(ctx, &spec)
|
||
|
|
||
|
if !tc.ShouldFail && err != nil {
|
||
|
t.Errorf("+%v", errors.WithStack(err))
|
||
|
}
|
||
|
|
||
|
if tc.ShouldFail && err == nil {
|
||
|
t.Error("validation should have failed")
|
||
|
}
|
||
|
})
|
||
|
}(tc)
|
||
|
}
|
||
|
}
|