feat: 更新CC码监管方案业务版文档,新增摘要、UGC专项、直播专项、存量处置、误判申诉、水印嵌入、CC码生命周期、组织保障等章节;同步macode到cccode重命名及其他代码变更
This commit is contained in:
@@ -12,13 +12,13 @@ import (
|
||||
// 全链路一致:发码→入库→正确注入,追责判定审播一致。
|
||||
func TestAccountability_Consistent(t *testing.T) {
|
||||
s := newService(t)
|
||||
maCode, ctid, cert := issueOne(t, s)
|
||||
require.NoError(t, s.IngestToLibrary(chain.RoleReviewer, maCode, ctid, "M", "陕西IPTV媒资库"))
|
||||
require.NoError(t, s.PublishToOperator(PublishRequest{MACode: maCode, Certificate: cert}))
|
||||
_, err := s.InjectToCDN(chain.RoleOperator, ctid, maCode, "filehash-abc", "CT-SX", "cdn://x")
|
||||
ccCode, ctid, cert := issueOne(t, s)
|
||||
require.NoError(t, s.IngestToLibrary(chain.RoleReviewer, ccCode, ctid, "M", "陕西IPTV媒资库"))
|
||||
require.NoError(t, s.PublishToOperator(PublishRequest{CCCode: ccCode, Certificate: cert}))
|
||||
_, err := s.InjectToCDN(chain.RoleOperator, ctid, ccCode, "filehash-abc", "CT-SX", "cdn://x")
|
||||
require.NoError(t, err)
|
||||
|
||||
rep := s.Accountability(maCode)
|
||||
rep := s.Accountability(ccCode)
|
||||
assert.True(t, rep.Consistent, "全链路应一致")
|
||||
assert.Nil(t, rep.FirstChange)
|
||||
assert.Equal(t, "filehash-abc", rep.BaselineHash)
|
||||
@@ -28,19 +28,19 @@ func TestAccountability_Consistent(t *testing.T) {
|
||||
// 注入环节偷换:追责定位到 cdn_inject 节点与运营商。
|
||||
func TestAccountability_TamperLocated(t *testing.T) {
|
||||
s := newService(t)
|
||||
maCode, ctid, cert := issueOne(t, s)
|
||||
require.NoError(t, s.IngestToLibrary(chain.RoleReviewer, maCode, ctid, "M", "媒资库"))
|
||||
require.NoError(t, s.PublishToOperator(PublishRequest{MACode: maCode, Certificate: cert}))
|
||||
ccCode, ctid, cert := issueOne(t, s)
|
||||
require.NoError(t, s.IngestToLibrary(chain.RoleReviewer, ccCode, ctid, "M", "媒资库"))
|
||||
require.NoError(t, s.PublishToOperator(PublishRequest{CCCode: ccCode, Certificate: cert}))
|
||||
|
||||
// 直接往存证里记录一次"被偷换"的注入(绕过校验模拟违规留痕)
|
||||
// 实际中 InjectToCDN 会拒绝不匹配,但运营商侧若绕过校验偷换,存证仍会暴露
|
||||
_, _ = s.InjectToCDN(chain.RoleOperator, ctid, maCode, "filehash-abc", "CT-SX", "cdn://x")
|
||||
_, _ = s.InjectToCDN(chain.RoleOperator, ctid, ccCode, "filehash-abc", "CT-SX", "cdn://x")
|
||||
s.prov.Record(model.ProvenanceEvent{
|
||||
MACode: maCode, Node: model.NodeInject, HashValue: "TAMPERED",
|
||||
CCCode: ccCode, Node: model.NodeInject, HashValue: "TAMPERED",
|
||||
Operator: "CT-SX-违规", Detail: "疑似偷换",
|
||||
})
|
||||
|
||||
rep := s.Accountability(maCode)
|
||||
rep := s.Accountability(ccCode)
|
||||
assert.False(t, rep.Consistent)
|
||||
require.NotNil(t, rep.FirstChange)
|
||||
assert.Equal(t, model.NodeInject, rep.FirstChange.Node)
|
||||
@@ -50,22 +50,22 @@ func TestAccountability_TamperLocated(t *testing.T) {
|
||||
// 转码版哈希不同属合法,不应误判为篡改。
|
||||
func TestAccountability_TranscodeNotFlagged(t *testing.T) {
|
||||
s := newService(t)
|
||||
maCode, ctid, _ := issueOne(t, s)
|
||||
ccCode, ctid, _ := issueOne(t, s)
|
||||
_, err := s.BindTranscoded(chain.RoleReviewer, ctid, "filehash-abc", "h265-4k", "H.265", "4K", "v1-4k")
|
||||
require.NoError(t, err)
|
||||
s.prov.Record(model.ProvenanceEvent{MACode: maCode, Node: model.NodeTranscode, HashValue: "h265-4k", Operator: "转码中心"})
|
||||
s.prov.Record(model.ProvenanceEvent{CCCode: ccCode, Node: model.NodeTranscode, HashValue: "h265-4k", Operator: "转码中心"})
|
||||
|
||||
rep := s.Accountability(maCode)
|
||||
rep := s.Accountability(ccCode)
|
||||
assert.True(t, rep.Consistent, "转码版哈希不同属合法,不应判为篡改")
|
||||
}
|
||||
|
||||
func TestCopyrightEvidence(t *testing.T) {
|
||||
s := newService(t)
|
||||
maCode, _, _ := issueOne(t, s)
|
||||
ccCode, _, _ := issueOne(t, s)
|
||||
|
||||
ev, err := s.CopyrightEvidence(maCode)
|
||||
ev, err := s.CopyrightEvidence(ccCode)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, maCode, ev.MACode)
|
||||
assert.Equal(t, ccCode, ev.CCCode)
|
||||
assert.NotEmpty(t, ev.Trail)
|
||||
assert.False(t, ev.FirstSeenAt.IsZero(), "应有最早登记时间戳")
|
||||
assert.Contains(t, ev.Statement, "谁先锁定谁有权")
|
||||
@@ -86,7 +86,7 @@ func TestMatchInfringement(t *testing.T) {
|
||||
matches, err := s.MatchInfringement("a1b2c3d4e5f60718", 5, 10)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, matches)
|
||||
assert.Equal(t, issued.MACode, matches[0].MACode)
|
||||
assert.Equal(t, issued.CCCode, matches[0].CCCode)
|
||||
assert.Equal(t, "high", matches[0].Similarity)
|
||||
assert.Equal(t, 0, matches[0].Distance)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user