63 lines
1.9 KiB
Go
63 lines
1.9 KiB
Go
|
|
package db
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"testing"
|
|||
|
|
|
|||
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// applyPoolEnv читает env: пустые переменные не трогают дефолты pgxpool,
|
|||
|
|
// заполненные — применяются, кривые — ошибка на старте.
|
|||
|
|
func TestApplyPoolEnv(t *testing.T) {
|
|||
|
|
// Дефолт: ни одной переменной — конфиг не меняется.
|
|||
|
|
cfg := &pgxpool.Config{}
|
|||
|
|
before := *cfg
|
|||
|
|
if err := applyPoolEnv(cfg); err != nil {
|
|||
|
|
t.Fatalf("empty env: %v", err)
|
|||
|
|
}
|
|||
|
|
if cfg.MaxConns != before.MaxConns || cfg.MinConns != before.MinConns {
|
|||
|
|
t.Fatalf("empty env must not touch config: %+v", cfg)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Заданные значения применяются как есть.
|
|||
|
|
t.Setenv("DB_MAX_CONNS", "20")
|
|||
|
|
t.Setenv("DB_MIN_CONNS", "2")
|
|||
|
|
t.Setenv("DB_MAX_CONN_LIFETIME", "1h")
|
|||
|
|
t.Setenv("DB_MAX_CONN_IDLE_TIME", "30m")
|
|||
|
|
cfg = &pgxpool.Config{}
|
|||
|
|
if err := applyPoolEnv(cfg); err != nil {
|
|||
|
|
t.Fatalf("valid env: %v", err)
|
|||
|
|
}
|
|||
|
|
if cfg.MaxConns != 20 || cfg.MinConns != 2 {
|
|||
|
|
t.Fatalf("conns not applied: max=%d min=%d", cfg.MaxConns, cfg.MinConns)
|
|||
|
|
}
|
|||
|
|
if cfg.MaxConnLifetime.Hours() != 1 {
|
|||
|
|
t.Fatalf("lifetime not applied: %v", cfg.MaxConnLifetime)
|
|||
|
|
}
|
|||
|
|
if cfg.MaxConnIdleTime.Minutes() != 30 {
|
|||
|
|
t.Fatalf("idle time not applied: %v", cfg.MaxConnIdleTime)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Кривые значения — фейл-фаст, а не молчаливый дефолт.
|
|||
|
|
func TestApplyPoolEnvInvalid(t *testing.T) {
|
|||
|
|
cases := []struct {
|
|||
|
|
env string
|
|||
|
|
val string
|
|||
|
|
}{
|
|||
|
|
{"DB_MAX_CONNS", "ten"},
|
|||
|
|
{"DB_MAX_CONNS", "0"},
|
|||
|
|
{"DB_MIN_CONNS", "-1"},
|
|||
|
|
{"DB_MAX_CONN_LIFETIME", "1h30"},
|
|||
|
|
{"DB_MAX_CONN_IDLE_TIME", "0s"},
|
|||
|
|
}
|
|||
|
|
for _, c := range cases {
|
|||
|
|
t.Run(c.env+"="+c.val, func(t *testing.T) {
|
|||
|
|
t.Setenv(c.env, c.val)
|
|||
|
|
if err := applyPoolEnv(&pgxpool.Config{}); err == nil {
|
|||
|
|
t.Fatalf("%s=%s must fail", c.env, c.val)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|