dbtest

package
v0.0.0-...-8d16312 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 15, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package dbtest 给要 MySQL、Redis 的测试用:连接串、跳过或强制的规则、包之间的互斥、每个测试独立的账户和 key 前缀。

连接串从 QUOTAFORGE_TEST_MYSQL_MIGRATE_DSN(能建表)和 QUOTAFORGE_TEST_MYSQL_DSN(只能增删改查)读, Redis 的地址从 QUOTAFORGE_TEST_REDIS_ADDR 读。没设时跳过;QUOTAFORGE_TEST_REQUIRE_DB=1(CI)时缺了就判失败。

几个测试包同时用同一个 Redis:每个测试只用自己的 key 前缀(RedisPrefix),不清空整个库。

go test ./... 会让多个包同时跑,而它们共用一个测试库,迁移测试还要删表重建。所以每个用库的测试包 在 TestMain 里调用 Main:拿到 MySQL 的命名锁才开始跑,各包依次使用这个库。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Account

func Account(t testing.TB, s *ledger.Store, limit int64) string

Account 建一个只属于当前测试的账户,名字带随机后缀,返回名字。

func Admin

func Admin(t testing.TB) *sql.DB

Admin 用能建表的账号直接连库,给测试读表、改坏数据用。

func App

func App(t testing.TB) *sql.DB

App 用 QF 服务的账号直接连库(不经 ledger.Open,所以没有会话级的等锁上限),给测试看本账号的线程用。

func AppDSN

func AppDSN(t testing.TB) string

AppDSN 是只能增删改查的账号(QF 服务用的那种)的连接串。没设就跳过当前测试。

func Budget

func Budget(t testing.TB, db *sql.DB, account string) (limit, reserved, consumed int64)

Budget 读账户的额度行:上限、已预留、已消费。

func BudgetWaiters

func BudgetWaiters(t testing.TB, app *sql.DB) int

BudgetWaiters 是 app(App 的连接)这个账号在本库里正在执行、语句以 UPDATE budgets 开头的线程数。 测试账号没有 PROCESS 权限,读不了锁等待表,但 processlist 里看得到自己账号的全部线程。

func LockBudget

func LockBudget(t testing.TB, db *sql.DB, accountID int64) (release func())

LockBudget 在另一个事务里锁住账户的额度行,返回放锁的函数(测试结束时也会放)。

func Main

func Main(m *testing.M)

Main 用在测试包的 TestMain 里。有连接串时先拿库的锁、迁移到最新,再跑测试。

func MigrateDSN

func MigrateDSN(t testing.TB) string

MigrateDSN 是能建表的账号的连接串。没设就跳过当前测试。

func Now

func Now(t testing.TB, db *sql.DB) time.Time

Now 是数据库的当前时间(UTC)。和时间有关的断言用它,不用测试进程的时钟。

func RedisPrefix

func RedisPrefix() string

RedisPrefix 是只属于当前测试的 key 前缀,带随机串。

func RedisURL

func RedisURL(t testing.TB) string

RedisURL 是测试用 Redis 的地址(redis://主机:端口/0)。没设就跳过当前测试。

func Store

func Store(t testing.TB) *ledger.Store

Store 用 QF 服务的账号打开账本,测试结束时关闭。

func Verify

func Verify(t testing.TB, s *ledger.Store)

Verify 校验整个账本,有不成立的条目就让测试失败。

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL