Files
Agent-System-Backend/internal/store/context_manifest_gate_test.go
T
agent-exec-transport 8c410b9ea4
governance / governance (pull_request) Successful in 14s
ci / vet-and-test (pull_request) Successful in 1m30s
agent-exec transport 412eff9b36afd457500606d468b89f94/0636a7e1c0f0
2026-10-20 15:59:51 +00:00

46 lines
2.2 KiB
Go

package store
import (
"path/filepath"
"testing"
"agent-system-backend/pkg/extension"
)
func TestContextManifestRejectsSourcesWithoutStableIdentity(t *testing.T) {
st, err := OpenSQLite(filepath.Join(t.TempDir(), "gate.db"))
if err != nil {
t.Fatal(err)
}
defer st.Close()
complete := extension.ProjectContextManifest{ProjectID: "p1", AttemptID: "model-1", InputSHA256: "request-hash", Delivery: "attempted",
Included: []extension.ProjectContextManifestEntry{{SourceID: "s1", Revision: "r1", SourceHash: "h1", InputSHA256: "in"}},
OfferedReferences: []extension.ProjectEvidenceRef{{ID: "ref-1", SourceID: "doc", Revision: "r1", Hash: "hd"}},
ReadEvidence: []extension.ProjectContextManifestEntry{{ReferenceID: "ref-1", SourceID: "doc", Revision: "r1", SourceHash: "hd", InputSHA256: "body"}}}
broken := []func(*extension.ProjectContextManifest){
func(m *extension.ProjectContextManifest) { m.Included[0].SourceID = "" },
func(m *extension.ProjectContextManifest) { m.Included[0].SourceHash = "" },
func(m *extension.ProjectContextManifest) { m.Included[0].InputSHA256 = "" },
func(m *extension.ProjectContextManifest) { m.OfferedReferences[0].ID = "" },
func(m *extension.ProjectContextManifest) { m.OfferedReferences[0].Hash = "" },
func(m *extension.ProjectContextManifest) { m.ReadEvidence[0].ReferenceID = "" },
func(m *extension.ProjectContextManifest) { m.ReadEvidence[0].Revision = "" },
}
for i, mutate := range broken {
m := complete
m.Included = append([]extension.ProjectContextManifestEntry(nil), complete.Included...)
m.OfferedReferences = append([]extension.ProjectEvidenceRef(nil), complete.OfferedReferences...)
m.ReadEvidence = append([]extension.ProjectContextManifestEntry(nil), complete.ReadEvidence...)
mutate(&m)
if err := st.AppendContextManifest("alice", "conv-1", m); err == nil {
t.Fatalf("case %d: unrecheckable source admitted as model input", i)
}
}
if got, err := st.ListContextManifests("alice", "conv-1"); err != nil || len(got) != 0 {
t.Fatalf("rejected receipts persisted: %+v err=%v", got, err)
}
if err := st.AppendContextManifest("alice", "conv-1", complete); err != nil {
t.Fatalf("complete source identities rejected: %v", err)
}
}