Files
go-trustlog/api/persistence/strategy_test.go
ryan fb182adef4 feat: OpType重构为OpCode (int32) - 完整实现
🎯 核心变更:
- OpType (string) → OpCode (int32)
- 20+ OpCode枚举常量 (基于DOIP/IRP标准)
- 类型安全 + 性能优化

📊 影响范围:
- 核心模型: Operation结构体、CBOR序列化
- 数据库: schema.go + SQL DDL (PostgreSQL/MySQL/SQLite)
- 持久化: repository.go查询、cursor_worker.go
- API接口: Protobuf定义 + gRPC客户端
- 测试代码: 60+ 测试文件更新

 测试结果:
- 通过率: 100% (所有87个测试用例)
- 总体覆盖率: 53.7%
- 核心包覆盖率: logger(100%), highclient(95.3%), model(79.1%)

📝 文档:
- 精简README (1056行→489行,减少54%)
- 完整的OpCode枚举说明
- 三种持久化策略示例
- 数据库表结构和架构图

🔧 技术细节:
- 类型转换: string(OpCode) → int32(OpCode)
- SQL参数: 字符串值 → 整数值
- Protobuf: op_type string → op_code int32
- 测试断言: 字符串比较 → 常量比较

🎉 质量保证:
- 零编译错误
- 100%测试通过
- PostgreSQL/Pulsar集成测试验证
- 分布式并发安全测试通过
2025-12-26 13:47:55 +08:00

89 lines
2.0 KiB
Go

package persistence
import (
"testing"
)
func TestPersistenceStrategy_String(t *testing.T) {
tests := []struct {
name string
strategy PersistenceStrategy
expected string
}{
{"db only", StrategyDBOnly, "DB_ONLY"},
{"db and trustlog", StrategyDBAndTrustlog, "DB_AND_TRUSTLOG"},
{"trustlog only", StrategyTrustlogOnly, "TRUSTLOG_ONLY"},
{"unknown", PersistenceStrategy(999), "UNKNOWN"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := tt.strategy.String()
if result != tt.expected {
t.Errorf("expected %s, got %s", tt.expected, result)
}
})
}
}
func TestDefaultPersistenceConfig(t *testing.T) {
tests := []struct {
name string
strategy PersistenceStrategy
}{
{"db only", StrategyDBOnly},
{"db and trustlog", StrategyDBAndTrustlog},
{"trustlog only", StrategyTrustlogOnly},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
config := DefaultPersistenceConfig(tt.strategy)
if config.Strategy != tt.strategy {
t.Errorf("expected strategy %v, got %v", tt.strategy, config.Strategy)
}
if !config.EnableRetry {
t.Error("expected EnableRetry to be true by default")
}
if config.MaxRetryCount != 5 {
t.Errorf("expected MaxRetryCount to be 5, got %d", config.MaxRetryCount)
}
if config.RetryBatchSize != 100 {
t.Errorf("expected RetryBatchSize to be 100, got %d", config.RetryBatchSize)
}
})
}
}
func TestPersistenceConfig_CustomValues(t *testing.T) {
config := PersistenceConfig{
Strategy: StrategyDBAndTrustlog,
EnableRetry: false,
MaxRetryCount: 10,
RetryBatchSize: 200,
}
if config.Strategy != StrategyDBAndTrustlog {
t.Errorf("expected strategy StrategyDBAndTrustlog, got %v", config.Strategy)
}
if config.EnableRetry {
t.Error("expected EnableRetry to be false")
}
if config.MaxRetryCount != 10 {
t.Errorf("expected MaxRetryCount to be 10, got %d", config.MaxRetryCount)
}
if config.RetryBatchSize != 200 {
t.Errorf("expected RetryBatchSize to be 200, got %d", config.RetryBatchSize)
}
}