Files
MyGoNavi/internal/app/data_sync_job_api_sanitize_test.go
Syngnat 11dbb1f9dd feat(sync): 接入同步任务编排与安全执行 API
- 接入任务持久化、生命周期、调度运行与检查点管理
- 提供 ID 作用域元数据、能力解析、预检和生产审批接口
- 串联水位与 MongoDB CDC 执行、错误行隔离及安全重放
2026-08-08 19:13:25 +08:00

49 lines
1.7 KiB
Go

package app
import (
"encoding/json"
"strings"
"testing"
"GoNavi-Wails/internal/syncjob"
)
func TestPublicDataSyncRunStripsBackendApprovalAndFingerprints(t *testing.T) {
definition := approvalTestDefinition()
definition.Source.Fingerprint = "source-secret-derived-proof"
definition.Target.Fingerprint = "target-secret-derived-proof"
definition.Approval = &syncjob.ExecutionApproval{
DefinitionHash: "approval-hash", TargetFingerprint: "target-secret-derived-proof", ApprovedAt: 1, ApprovedByRuntime: "desktop",
}
snapshot, err := json.Marshal(definition)
if err != nil {
t.Fatalf("marshal snapshot: %v", err)
}
public := publicDataSyncRun(syncjob.RunRecord{
DefinitionSnapshot: snapshot,
SourceFingerprint: definition.Source.Fingerprint,
TargetFingerprint: definition.Target.Fingerprint,
})
encoded, err := json.Marshal(public)
if err != nil {
t.Fatalf("marshal public run: %v", err)
}
text := string(encoded)
for _, forbidden := range []string{"source-secret-derived-proof", "target-secret-derived-proof", "approval-hash", "approvedByRuntime"} {
if strings.Contains(text, forbidden) {
t.Fatalf("public run leaked %q: %s", forbidden, text)
}
}
}
func TestPublicDataSyncRunEventScrubsLegacyErrorPayload(t *testing.T) {
event := publicDataSyncRunEvent(syncjob.RunEvent{
Type: syncjob.RunEventErrorRow,
Payload: json.RawMessage(`{"id":"error-1","sourceKey":{"email":"private@example.com"},"payload":{"secret":"raw"},"payloadHash":"safe"}`),
})
text := string(event.Payload)
if strings.Contains(text, "private@example.com") || strings.Contains(text, "\"secret\"") || !strings.Contains(text, "payloadHash") {
t.Fatalf("sanitized legacy error event = %s", text)
}
}