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>
64 lines
1.9 KiB
Go
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")
|
|
}
|
|
}
|