52 lines
2.3 KiB
Go
52 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"time"
|
|
|
|
sdkdelivery "git.novox.be/novox/mesh-sdk/go/delivery"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// A rotation asked through the seat carries why to the command, which records it in the hand-act
|
|
// log (novox/hq ADR 0228); and with a provision too, since the vault asks why of every rotation of a
|
|
// credential it holds (issue 767).
|
|
func TestARotationThroughTheSeatCarriesWhy(t *testing.T) {
|
|
argv, err := argvFor("rotate", map[string]any{"node": "anchor", "module": "letta",
|
|
"secret": "server-password", "why": "leaked into logs", "cause": "leaked"})
|
|
if err != nil || strings.Join(argv, " ") != "secret rotate anchor letta server-password --why leaked into logs --cause leaked" {
|
|
t.Fatalf("%v %v", argv, err)
|
|
}
|
|
argv, err = argvFor("rotate", map[string]any{"node": "anchor", "module": "letta", "secret": "server-password"})
|
|
if err != nil || strings.Join(argv, " ") != "secret rotate anchor letta server-password" {
|
|
t.Fatalf("without why: %v %v", argv, err)
|
|
}
|
|
argv, err = argvFor("rotate", map[string]any{"provision": "postgres-database", "consumer": "ace", "why": "leaked",
|
|
"cause": "leaked"})
|
|
if err != nil || strings.Join(argv, " ") != "rotate postgres-database --consumer ace --why leaked --cause leaked" {
|
|
t.Fatalf("why beside a provision: %v %v", argv, err)
|
|
}
|
|
}
|
|
|
|
// Only a have that is running and healthy is a good start, at the time it was written; any other is none (novox/hq ADR 0228,
|
|
// ADR 0539 §9).
|
|
func TestAGoodStartIsAHaveRunningAndHealthy(t *testing.T) {
|
|
at := time.Date(2026, 10, 24, 17, 0, 0, 0, time.UTC)
|
|
for _, c := range []struct {
|
|
have sdkdelivery.Have
|
|
good bool
|
|
}{
|
|
{sdkdelivery.Have{Phase: sdkdelivery.PhaseRunning, Health: sdkdelivery.HealthOK}, true},
|
|
{sdkdelivery.Have{Phase: sdkdelivery.PhaseRunning, Health: sdkdelivery.HealthFailed}, false},
|
|
{sdkdelivery.Have{Phase: sdkdelivery.PhaseRunning, Health: sdkdelivery.HealthWaits}, false},
|
|
{sdkdelivery.Have{Phase: sdkdelivery.PhaseApplying, Health: sdkdelivery.HealthOK}, false},
|
|
{sdkdelivery.Have{Phase: sdkdelivery.PhaseFailed, Health: sdkdelivery.HealthFailed}, false},
|
|
{sdkdelivery.Have{Phase: sdkdelivery.PhaseHeld, Health: sdkdelivery.HealthOK}, false},
|
|
} {
|
|
got := startedOn(c.have, at)
|
|
if good := !got.IsZero(); good != c.good || good && !got.Equal(at) {
|
|
t.Errorf("%+v: started at %v, want a good start = %v", c.have, got, c.good)
|
|
}
|
|
}
|
|
}
|