57 lines
2.0 KiB
Go
57 lines
2.0 KiB
Go
package contracts
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestReadLocalV04SchemasAndRejectInvalidPaths(t *testing.T) {
|
|
for _, name := range []string{
|
|
"task-discovery-v0.4-proposal.schema.json",
|
|
"task-control-v0.4-proposal.schema.json",
|
|
"call-execute-v0.4-proposal.schema.json",
|
|
} {
|
|
data, err := ReadLocal("v0.4", name)
|
|
if err != nil || !json.Valid(data) {
|
|
t.Fatalf("embedded v0.4 schema %s: valid=%v err=%v", name, json.Valid(data), err)
|
|
}
|
|
if name == "task-discovery-v0.4-proposal.schema.json" && bytes.Contains(data, []byte("task-discovery-v0.3-proposal.schema.json")) {
|
|
t.Fatal("v0.4 task discovery must not reference the historical v0.3 schema")
|
|
}
|
|
original, err := Files.ReadFile("local/v0.4/" + name)
|
|
if err != nil || !bytes.Equal(data, original) {
|
|
t.Fatalf("runtime schema differs from embedded bundle: %s err=%v", name, err)
|
|
}
|
|
}
|
|
for _, input := range []struct{ version, name string }{
|
|
{"v0.2", "task-control-v0.4-proposal.schema.json"},
|
|
{"v0.4", ""},
|
|
{"v0.4", "../task-control-v0.4-proposal.schema.json"},
|
|
{"v0.4", "task-control-v0.4-proposal.json"},
|
|
{"v0.4", "does-not-exist.schema.json"},
|
|
} {
|
|
if _, err := ReadLocal(input.version, input.name); err == nil {
|
|
t.Fatalf("invalid or missing embedded schema accepted: %+v", input)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestReadUpstreamContractAndDecodeErrors(t *testing.T) {
|
|
data, err := Read("mq.schema.json")
|
|
if err != nil || !json.Valid(data) {
|
|
t.Fatalf("upstream MQ schema: valid=%v err=%v", json.Valid(data), err)
|
|
}
|
|
var schema map[string]json.RawMessage
|
|
if err := ReadJSON("mq.schema.json", &schema); err != nil || len(schema) == 0 {
|
|
t.Fatalf("decode upstream MQ schema: fields=%d err=%v", len(schema), err)
|
|
}
|
|
if err := ReadJSON("missing.schema.json", &schema); err == nil {
|
|
t.Fatal("missing upstream contract did not return an error")
|
|
}
|
|
var scalar int
|
|
if err := ReadJSON("mq.schema.json", &scalar); err == nil {
|
|
t.Fatal("invalid upstream schema destination did not return a decode error")
|
|
}
|
|
}
|