Files
Agent-System/internal/workspace/cleanup_test.go
T
weichenandCursor 2ddaf769ca feat(workspace): gate cleanup on verified receipts
Hash deliverables through Capability.ReadArtifact, resolve backends on the server, and refuse workspace removal until frozen members match FAV receipts.

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

64 lines
1.9 KiB
Go

package workspace
import (
"context"
"os"
"path/filepath"
"testing"
)
func TestOpaqueID_StripsPhysicalPath(t *testing.T) {
got := OpaqueID("/data/dev/workspaces/run_abc/output.md", "")
if got != "run_abc" {
t.Fatalf("got %q", got)
}
if OpaqueID("already-opaque") != "already-opaque" {
t.Fatal("opaque id changed")
}
}
func TestCleanup_RequiresVerifiedReceipts(t *testing.T) {
root := t.TempDir()
cap := NewCapability(root, nil)
ctx := context.Background()
ref, err := cap.Issue(WorkspaceRef{ID: "ws_clean", ProjectScope: 1, RunID: "run_clean"})
if err != nil {
t.Fatal(err)
}
if err := cap.WriteArtifact(ctx, ref, DeliverableKey, []byte("# body\n")); err != nil {
t.Fatal(err)
}
frozen := FrozenManifest{
SHA256: "deadbeef", StorageIdentity: "env:dev", WorkspaceID: ref.ID,
Members: []FrozenMember{{LogicalID: "doc_a", Digest: "abc", Kind: "document"}},
}
if err := cap.Cleanup(ctx, ref, frozen, nil); err == nil {
t.Fatal("cleanup without receipts must fail")
}
if _, err := os.Stat(filepath.Join(root, "workspaces", ref.ID, DeliverableKey)); err != nil {
t.Fatalf("workspace removed without receipts: %v", err)
}
receipts := []RetentionReceipt{{
LogicalID: "doc_a", Digest: "abc", StorageIdentity: "env:dev", Verified: true,
}}
if err := cap.Cleanup(ctx, ref, frozen, receipts); err != nil {
t.Fatal(err)
}
if _, err := os.Stat(filepath.Join(root, "workspaces", ref.ID)); !os.IsNotExist(err) {
t.Fatalf("workspace still present: %v", err)
}
}
func TestCleanup_MismatchDigestRejected(t *testing.T) {
frozen := FrozenManifest{
SHA256: "x", StorageIdentity: "env:dev",
Members: []FrozenMember{{LogicalID: "doc_a", Digest: "abc", Kind: "document"}},
}
err := AssertCleanupAllowed(frozen, []RetentionReceipt{{
LogicalID: "doc_a", Digest: "other", StorageIdentity: "env:dev", Verified: true,
}})
if err == nil {
t.Fatal("mismatch must fail")
}
}