47 lines
1.5 KiB
Go
47 lines
1.5 KiB
Go
package admin_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.wntrmute.dev/kyle/crossbar/internal/admin"
|
|
"git.wntrmute.dev/kyle/crossbar/internal/health"
|
|
)
|
|
|
|
// The hosts view shows the per-model context the poller learned, and an empty object (never
|
|
// null) for a host with nothing learned.
|
|
func TestHostsShowsPerModelContext(t *testing.T) {
|
|
r := newRig(t)
|
|
r.hosts.st["alpha"] = health.Status{
|
|
Healthy: true,
|
|
Loaded: []string{"m"},
|
|
NCtx: 0, // a router: the host-level figure stays unknown
|
|
Models: map[string]health.ModelCtx{"m": {NCtx: 65536, Slots: 2}},
|
|
}
|
|
rec := r.do(t, "GET", "/_crossbar/hosts", "")
|
|
if rec.Code != 200 {
|
|
t.Fatalf("%d %s", rec.Code, rec.Body.String())
|
|
}
|
|
var out map[string]admin.HostView
|
|
if err := json.Unmarshal(rec.Body.Bytes(), &out); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := out["alpha"].Models["m"]; got != (health.ModelCtx{NCtx: 65536, Slots: 2}) {
|
|
t.Errorf("alpha.models[m] = %+v, want {65536 2}", got)
|
|
}
|
|
if out["alpha"].NCtx != 0 {
|
|
t.Errorf("alpha.n_ctx = %d, want 0 (unknown at host level on a router)", out["alpha"].NCtx)
|
|
}
|
|
var raw map[string]json.RawMessage
|
|
if err := json.Unmarshal(rec.Body.Bytes(), &raw); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if beta := string(raw["beta"]); !strings.Contains(beta, `"models":{}`) {
|
|
t.Errorf("beta = %s, want \"models\":{} (never null)", beta)
|
|
}
|
|
if alpha := string(raw["alpha"]); !strings.Contains(alpha, `"models":{"m":{"n_ctx":65536,"slots":2}}`) {
|
|
t.Errorf("alpha = %s, want models keyed by id with n_ctx and slots", alpha)
|
|
}
|
|
}
|