Files

40 lines
1.1 KiB
Go

package contract
import (
"encoding/json"
"testing"
"git.ipao.vip/rogee/go-sip/contracts"
)
func TestDecodeServiceUsesApprovedMessageTypeAndCorrelation(t *testing.T) {
for _, name := range []string{"command-query", "call-query", "ai-config-request", "command-query-result", "call-query-result", "ai-config-result"} {
raw, err := contracts.Files.ReadFile("upstream/v1/examples/" + name + ".json")
if err != nil {
t.Fatal(err)
}
message, err := DecodeService(raw)
if err != nil {
t.Fatalf("%s: %v", name, err)
}
if message.MessageType == "" || message.DispatcherID == "" || message.MessageID == "" {
t.Fatal("message identity was lost")
}
var body map[string]any
if err := json.Unmarshal(raw, &body); err != nil {
t.Fatal(err)
}
body["message_kind"] = "request"
bad, _ := json.Marshal(body)
if _, err := DecodeService(bad); err == nil {
t.Fatal("invented message_kind accepted")
}
delete(body, "message_kind")
body["schema_version"] = "1.0"
bad, _ = json.Marshal(body)
if _, err := DecodeService(bad); err == nil {
t.Fatal("legacy service envelope accepted")
}
}
}