Feature 57 (config and provisioning): release mesh-controller, the reviewed release branch merged with main, on top of main
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/novox/mesh-controller/internal/link"
|
||||
)
|
||||
|
||||
// novox/hq ADR 0366 §3: a module's own runtime stated unhealthy by its runtime-health raises the module's usual
|
||||
// condition, module.<module>.<machine>.unhealthy, through ADR 0240's path, saying the tool's reason, and the first
|
||||
// statement that says it healthy clears it.
|
||||
func TestAnUnhealthyOwnRuntimeRaisesTheModulesUsualCondition(t *testing.T) {
|
||||
open := aMesh(t)
|
||||
ctx := t.Context()
|
||||
inv, k := open.inventory, conditionsFrom
|
||||
const key = "module.mesh-vault.anchor.unhealthy"
|
||||
said := func(at time.Time, state, reason string) link.Health {
|
||||
return link.Health{Contract: link.LivenessContract, At: at, Resources: []link.ResourceHealth{{
|
||||
Module: "mesh-vault", Resource: "mesh-vault.own-runtime", Kind: "process", Target: "mesh-vault-runtime.service",
|
||||
State: state, Reason: reason, Since: at, Check: "tool"}}}
|
||||
}
|
||||
why := "re-sealing to the operator key failed on 3 passes in a row: the operator key is not readable"
|
||||
for i := 0; i < 2; i++ {
|
||||
at := h0.Add(time.Duration(i) * time.Minute)
|
||||
if err := stateHealth(ctx, inv, k, "anchor", said(at, link.StateUnhealthy, why), at); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
c, had, err := k.Get(ctx, key)
|
||||
if err != nil || !had {
|
||||
t.Fatalf("two unhealthy statements of its own runtime raised no %s: %v", key, err)
|
||||
}
|
||||
evidence := ""
|
||||
for _, e := range c.Evidence {
|
||||
evidence += e.Said + "\n"
|
||||
}
|
||||
if !strings.Contains(c.Summary+evidence, "operator key is not readable") {
|
||||
t.Errorf("the condition does not say the tool's reason: %s / %s", c.Summary, evidence)
|
||||
}
|
||||
at := h0.Add(3 * time.Minute)
|
||||
if err := stateHealth(ctx, inv, k, "anchor", said(at, link.StateHealthy, ""), at); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
list, err := k.Open(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, o := range list {
|
||||
if o.Key == key {
|
||||
t.Fatalf("a healthy statement did not clear %s", key)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user