42 lines
1.3 KiB
Go
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)
|
|
}
|
|
}
|