Files
go-sip/contracts/current_topology_test.go
T

60 lines
2.1 KiB
Go

package contracts_test
import (
"encoding/json"
"os"
"strings"
"testing"
)
func TestCurrentContractTopology(t *testing.T) {
type route struct {
RoutingKey string `json:"routing_key"`
BindingKey string `json:"binding_key"`
Queue string `json:"queue"`
}
var topology struct {
Ownership string `json:"ownership"`
Dispatcher struct {
Exchange string `json:"exchange"`
Control route `json:"control"`
Task route `json:"task"`
} `json:"dispatcher"`
SaaS struct {
Exchange string `json:"exchange"`
Result route `json:"result"`
} `json:"saas"`
}
data, err := os.ReadFile("local/mq-topology.json")
if err != nil {
t.Fatal(err)
}
if err := json.Unmarshal(data, &topology); err != nil {
t.Fatal(err)
}
if topology.Ownership != "saas" || topology.Dispatcher.Exchange != "agent-call.dispatchers.v1" || topology.SaaS.Exchange != "agent-call.saas.v1" {
t.Fatalf("unapproved owner/exchanges: %+v", topology)
}
if topology.Dispatcher.Control.Queue != "agent-call.d.<dispatcher_id>.control.v1" || topology.Dispatcher.Control.BindingKey != "d.<dispatcher_id>.control.in" {
t.Fatalf("wrong control queue or exact binding: %+v", topology.Dispatcher.Control)
}
if topology.Dispatcher.Task.Queue != "agent-call.d.<dispatcher_id>.task.<task_id>.v1" || topology.Dispatcher.Task.BindingKey != "d.<dispatcher_id>.task.<task_id>.in" {
t.Fatalf("wrong per-task queue or binding: %+v", topology.Dispatcher.Task)
}
result := topology.SaaS.Result
if result.Queue != "agent-call.saas.events.v1" || result.RoutingKey != "d.<dispatcher_id>.out" || result.BindingKey != result.RoutingKey {
t.Fatalf("SaaS must consume a shared queue bound exactly to each D: %+v", result)
}
for _, r := range []route{topology.Dispatcher.Control, topology.Dispatcher.Task, result} {
if r.RoutingKey != r.BindingKey || strings.ContainsAny(r.BindingKey, "*#") {
t.Fatalf("route must have exact binding: %+v", r)
}
}
for _, id := range []string{"d-1", "d-2"} {
key := strings.ReplaceAll(result.RoutingKey, "<dispatcher_id>", id)
if len(key) > 255 || key == result.BindingKey {
t.Fatalf("invalid dispatcher-specific binding: %q", key)
}
}
}