Files
MAcode/tcs-iptv/internal/chain/chainmaker_conformance_test.go
T
selfrelease 166f460d57 feat(chain): ChainMaker 真实链接入脚手架(build tag 隔离)+ 契约测试
- internal/chain/chainmaker.go [//go:build chainmaker]: ChainMakerClient 适配器骨架,
  实现 chain.Client 全部方法到合约 Invoke/Query,按角色证书做链上鉴权,错误映射回标准错误
- internal/chain/chainmaker_stub.go [//go:build !chainmaker]: 占位构造函数,
  保证默认构建不依赖 SDK、主工程始终可编译
- contracts/tcs_registry/registry.go: 补齐合约方法
  RegisterHashBinding/VerifyEpisodeHash/ListEpisodes/HashExists/RecordVersionChange/
  RevokeEpisode/Restore/RestoreEpisode/SetContentStatus/QueryMappings/ListContents
  并增加集级哈希/映射/版本计数索引 KV 设计
- config: TCS_CHAIN_BACKEND=memory|pg|chainmaker + TCS_CHAINMAKER_SDK_CONF 开关
- cmd/api-svc: newChain 按 backend 选择,chainmaker 失败逐级降级 pg 到内存
- internal/chain/conformance_test.go: chain.Client 契约测试套件,双实现共用
  MemoryChain 默认跑;PersistentChain 经 TCS_TEST_PG_DSN;ChainMaker 经 -tags 与 env
- 验证: 默认 build/vet/test 全绿;MemoryChain 与 PersistentChain 契约套件均通过,行为一致
2026-06-14 20:47:21 +08:00

30 lines
899 B
Go

//go:build chainmaker
package chain
import (
"os"
"testing"
"github.com/stretchr/testify/require"
)
// TestChainMakerClient_Conformance 让真实链实现跑同一套契约套件。
//
// 仅在 `go test -tags chainmaker` 且配置了测试链时运行:
// - TCS_TEST_CHAINMAKER_CONF:测试链 sdk_config.yml 路径
//
// 注意:真实链不易"清空状态",建议每次用全新 maCode/合约实例,或对接专用测试链。
// 本用例提供接线骨架,实际跑通需真实 ChainMaker 测试网与已部署的 tcs_registry 合约。
func TestChainMakerClient_Conformance(t *testing.T) {
conf := os.Getenv("TCS_TEST_CHAINMAKER_CONF")
if conf == "" {
t.Skip("未设置 TCS_TEST_CHAINMAKER_CONF,跳过真实链契约测试")
}
RunClientConformance(t, func(t *testing.T) Client {
c, err := NewChainMakerClient(conf, nil)
require.NoError(t, err)
return c
})
}