40 lines
1.1 KiB
Go
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")
|
|
}
|
|
}
|
|
}
|