Files
go-sip/contracts/local_v04_test.go
T

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")
}
}