Files
model-gateway/dao/error_memory_dao_test.go
T

42 lines
1.3 KiB
Go

package dao
import (
"context"
"fmt"
"testing"
"time"
"model-gateway/consts/public"
_ "gitea.redpowerfuture.com/red-future/common/consul"
"gitea.redpowerfuture.com/red-future/common/db/gfdb"
_ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
"github.com/gogf/gf/v2/net/gtrace"
)
// TestErrorMemoryDaoGetByKeyMiss 回归:错误记忆未命中必须返回 (nil, nil),
// 而非把空记录丢给 r.Struct(&res) 上浮 sql.ErrNoRows —— 否则 service.shouldRetryWithMemory
// 会把一切查询错误当 fail-closed,导致 分析→落库→重试 整条链路变死代码。
// 依赖真实 PG;不可达时跳过(不在无 PG 环境硬失败)。
func TestErrorMemoryDaoGetByKeyMiss(t *testing.T) {
ctx, span := gtrace.NewSpan(context.Background(), "TestErrorMemoryDaoGetByKeyMiss")
defer span.End()
// 探测连接:不可用则跳过
if _, err := gfdb.DB(ctx, public.DbNameModelGateway).
Model(ctx, public.TableNameErrorMemory).
NoTenantId(ctx).
Count(); err != nil {
t.Skipf("DB不可用,跳过: %v", err)
}
key := fmt.Sprintf("test-miss-%d", time.Now().UnixNano())
row, err := ErrorMemory.GetByKey(ctx, key)
if err != nil {
t.Fatalf("GetByKey 未命中不应报错: %v", err)
}
if row != nil {
t.Fatalf("GetByKey 未命中应返回 nil, got %+v", row)
}
}