Files
Agent-System/internal/dataset/runner_test.go
T
weichenandCursor be0c1e843f feat(dataset): registry, pause/resume backfill, destroy gates, eight tracks
批准 dataset 分类入库;SKIP LOCKED 分批;销毁默认 fail closed。restore 演练拒绝共享 env DSN。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 02:40:12 +00:00

54 lines
1.6 KiB
Go

package dataset
import (
"context"
"testing"
"time"
"chat-agent-system/internal/artifactvault"
)
func TestPauseResumeAndReplayCounts(t *testing.T) {
ctx := context.Background()
now := time.Now().UTC()
body := []byte("# pause resume body")
enum := NewMemoryEnumerator()
enum.Seed(artifactvault.KindApproved, []artifactvault.Candidate{
{Kind: artifactvault.KindApproved, SourcePK: 1, LogicalID: "doc_a", SnapshotID: 2, ApprovedAt: &now, Payload: body, EventID: "approved:doc_a:2"},
{Kind: artifactvault.KindApproved, SourcePK: 2, LogicalID: "doc_b", SnapshotID: 3, ApprovedAt: &now, Payload: body, EventID: "approved:doc_b:3"},
})
mem := artifactvault.NewMemoryRegistry()
run := NewMemoryRunner(enum, mem)
job := NewJob("pause", "dev", "scratch", 38)
st, err := run.RunBatch(ctx, job, artifactvault.KindApproved, 0, 1)
if err != nil {
t.Fatal(err)
}
if st.Scanned != 1 {
t.Fatalf("first batch scanned=%d", st.Scanned)
}
job.Pause()
if _, err := run.RunBatch(ctx, job, artifactvault.KindApproved, 0, 1); err == nil {
t.Fatal("paused job must refuse batches")
}
if err := job.Resume(); err != nil {
t.Fatal(err)
}
st, err = run.RunBatch(ctx, job, artifactvault.KindApproved, 0, 50)
if err != nil {
t.Fatal(err)
}
if st.Scanned != 2 || st.Succeeded != 2 || mem.Coverage(ctx).Required != 2 {
t.Fatalf("resume stats=%+v required=%d", st, mem.Coverage(ctx).Required)
}
job.Checkpoints = map[string]Checkpoint{}
st, err = run.RunBatch(ctx, job, artifactvault.KindApproved, 0, 50)
if err != nil {
t.Fatal(err)
}
if mem.Coverage(ctx).Required != 2 {
t.Fatalf("replay duplicated artifacts %d stats=%+v", mem.Coverage(ctx).Required, st)
}
}