Files
cloud-ip-validator/internal/db/queries_settings_test.go
T

78 lines
2.4 KiB
Go

package db
import (
"errors"
"testing"
"cloudipvalidator/internal/config"
)
func TestBootstrapSettingsSeedsOnceFromConfig(t *testing.T) {
d, ctx := newTestDB(t)
cfg := &config.ControlAPI{Orchestrator: config.OrchestratorConfig{FIPSettleSeconds: 30}}
if err := d.BootstrapFromConfig(ctx, cfg); err != nil {
t.Fatalf("first bootstrap: %v", err)
}
settings, err := d.GetSettings(ctx)
if err != nil {
t.Fatalf("get settings: %v", err)
}
if settings.FIPSettleSeconds != 30 {
t.Fatalf("expected seeded value 30, got %d", settings.FIPSettleSeconds)
}
// A second bootstrap with a different YAML value must not overwrite the
// now-non-empty settings table — same "DB is source of truth once
// seeded" semantics as validators/sites/targets/check_types.
cfg2 := &config.ControlAPI{Orchestrator: config.OrchestratorConfig{FIPSettleSeconds: 99}}
if err := d.BootstrapFromConfig(ctx, cfg2); err != nil {
t.Fatalf("second bootstrap: %v", err)
}
settings, err = d.GetSettings(ctx)
if err != nil {
t.Fatalf("get settings after second bootstrap: %v", err)
}
if settings.FIPSettleSeconds != 30 {
t.Fatalf("expected YAML to be ignored on non-empty settings table, got %d", settings.FIPSettleSeconds)
}
}
func TestSetFIPSettleSecondsRejectsNegative(t *testing.T) {
d, ctx := newTestDB(t)
if err := d.BootstrapFromConfig(ctx, &config.ControlAPI{}); err != nil {
t.Fatalf("bootstrap: %v", err)
}
if err := d.SetFIPSettleSeconds(ctx, -1); !errors.Is(err, ErrValidation) {
t.Fatalf("expected ErrValidation for negative seconds, got %v", err)
}
}
func TestGetSetFIPSettleSecondsRoundTrip(t *testing.T) {
d, ctx := newTestDB(t)
if err := d.BootstrapFromConfig(ctx, &config.ControlAPI{}); err != nil {
t.Fatalf("bootstrap: %v", err)
}
before, err := d.GetSettings(ctx)
if err != nil {
t.Fatalf("get settings: %v", err)
}
if before.FIPSettleSeconds != 0 {
t.Fatalf("expected default 0, got %d", before.FIPSettleSeconds)
}
if err := d.SetFIPSettleSeconds(ctx, 45); err != nil {
t.Fatalf("set fip settle seconds: %v", err)
}
after, err := d.GetSettings(ctx)
if err != nil {
t.Fatalf("get settings after set: %v", err)
}
if after.FIPSettleSeconds != 45 {
t.Fatalf("expected 45, got %d", after.FIPSettleSeconds)
}
if after.UpdatedAt.Before(before.UpdatedAt) {
t.Fatalf("expected updated_at not to go backwards, before=%v after=%v", before.UpdatedAt, after.UpdatedAt)
}
}