Files
knowledge-governance/cmd/test-weknora-e2e-report/main_test.go
T
zheromiku dcdc8d1ddd feat: 知识治理平台(含已验证发布/回滚契约)
全栈知识治理平台首次入库(P1-P10 + 发布链路模拟验证闭环):

- 治理核心:源目录/变更集/人工审核/发布批次/发布执行(fail-closed 闸口)
- 测试通道:WeKnora 测试 KB 上传/轮询/验收;poll 完成时写入
  parser_generation/index_generation,修复 manual/seed 路径发布闸口永久拦截
- 发布适配器 v071(本地 source=测试角色 / 云端 target=生产角色 模拟验证通过):
  * ES 导出/导入 mapping 自适应(.keyword 子字段、可选 tenant_id)
  * OSS locator 支持嵌套 scheme;chunks.seq_id 由目标序列分配
  * bundle 归档同身份重试原子替换;verifier 按 bundle chunk_type 计数
  * 回滚 job payload 支持 prior_execution_id(strict 解码)
- 三通道发布+回滚演练实测:publish 4/4 verified,检索命中,
  rollback 4/4 rolled_back,目标端 PG is_enabled=false、ES is_enabled=false
- 前端 A·Data-console 风格全站统一,120 用例通过
- 门禁:go vet / go test 全包通过,gofmt 干净
2026-09-30 10:54:06 +08:00

88 lines
3.2 KiB
Go

package main
import (
"context"
"encoding/json"
"testing"
"knowledge-governance/internal/governance"
postgresstore "knowledge-governance/internal/platform/postgres"
"knowledge-governance/internal/platform/weknora"
)
func TestVerifyPublicationReturnsSanitizedEvidence(t *testing.T) {
store := &reportStoreStub{
publication: postgresstore.PublicationForValidation{ID: "tp-1", TestKBID: "kb-1", KnowledgeID: "knowledge-secret-id"},
acceptance: []governance.AcceptanceRecord{
{CheckType: "knowledge_exists", State: string(governance.AcceptancePassed)},
{CheckType: "chunks_present", State: string(governance.AcceptancePassed)},
{CheckType: "retrieval_hit", State: string(governance.AcceptanceManualRequired)},
},
}
client := &reportClientStub{
knowledge: weknora.Knowledge{ID: "knowledge-secret-id", KnowledgeBaseID: "kb-1", ParseStatus: "completed"},
chunks: []weknora.Chunk{
{ID: "chunk-1", KnowledgeID: "knowledge-secret-id", ChunkType: "text"},
{ID: "chunk-2", KnowledgeID: "knowledge-secret-id", ChunkType: "text"},
},
search: []weknora.SearchResult{{KnowledgeID: "knowledge-secret-id", Content: "answer contains MIKU-GOV-P3-5927", Score: 0.02}},
}
report, err := verifyPublication(context.Background(), store, client, "tp-1", "unique marker", "MIKU-GOV-P3-5927")
if err != nil {
t.Fatalf("verifyPublication() error = %v", err)
}
if report.PublicationID != "tp-1" || report.RemoteStatus != "completed" || report.ChunkTotal != 2 || !report.AllChunksMatch || report.SearchResultCount != 1 || report.TargetSearchHits != 1 || !report.MarkerFound || !report.StructuralPassed || report.SemanticState != "manual_required" {
t.Fatalf("report = %#v", report)
}
encoded, err := json.Marshal(report)
if err != nil {
t.Fatal(err)
}
for _, forbidden := range []string{"knowledge-secret-id", "chunk-1", "unique marker", "MIKU-GOV-P3-5927"} {
if string(encoded) == forbidden || contains(string(encoded), forbidden) {
t.Fatalf("report leaked %q: %s", forbidden, encoded)
}
}
}
func contains(value, fragment string) bool {
for index := 0; index+len(fragment) <= len(value); index++ {
if value[index:index+len(fragment)] == fragment {
return true
}
}
return false
}
type reportStoreStub struct {
publication postgresstore.PublicationForValidation
acceptance []governance.AcceptanceRecord
}
func (store *reportStoreStub) LoadPublicationForValidation(context.Context, string) (postgresstore.PublicationForValidation, error) {
return store.publication, nil
}
func (store *reportStoreStub) ListAcceptanceResults(context.Context, string) ([]governance.AcceptanceRecord, error) {
return store.acceptance, nil
}
type reportClientStub struct {
knowledge weknora.Knowledge
chunks []weknora.Chunk
search []weknora.SearchResult
}
func (client *reportClientStub) GetKnowledge(context.Context, string) (weknora.Knowledge, error) {
return client.knowledge, nil
}
func (client *reportClientStub) ListChunks(context.Context, string, int, int, []string) ([]weknora.Chunk, int64, error) {
return client.chunks, int64(len(client.chunks)), nil
}
func (client *reportClientStub) SearchKnowledge(context.Context, weknora.SearchRequest) ([]weknora.SearchResult, error) {
return client.search, nil
}