Files
knowledge-governance/internal/libraryrelease/release_gate_test.go
T
姚章浩 ea4cffbcaa
build / build (push) Successful in 1m20s
style: gofmt release_gate_test.go
2026-10-28 19:14:35 +08:00

39 lines
1.2 KiB
Go

package libraryrelease
import (
"context"
"errors"
"testing"
"time"
)
// failingObserver 模拟"预备份引用无法持久化":真实场景是治理库写入失败。
type failingObserver struct{ stageLog }
func (f *failingObserver) BackupPrepared(context.Context, BackupRef) error {
return errors.New("persist backup ref failed")
}
// 预备份引用持久化失败时必须零写入:没有可恢复基线就不许碰目标。
func TestRunRefusesToWriteWhenBackupReferenceCannotBePersisted(t *testing.T) {
target := &fakeTarget{}
backups := &fakeBackups{}
recorder := &failingObserver{}
outcome := Run(context.Background(), request(time.Now()), target, backups, recorder)
if outcome.State == "succeeded" {
t.Fatalf("state = %s, must not succeed without a recoverable backup", outcome.State)
}
if len(target.applied) != 0 {
t.Fatalf("applied stages = %v, must be zero when the backup reference is lost", target.applied)
}
if target.restored != 0 {
t.Fatalf("restore must not run when nothing was written (restored=%d)", target.restored)
}
if !recorder.has("prebackup:failed") {
t.Fatalf("stage log = %v, want prebackup:failed", recorder.entries)
}
if outcome.Recovery == "" {
t.Fatal("failed outcome must explain how to recover")
}
}