axe/internal/db/db_test.go
2026-10-18 22:07:25 +03:00

63 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}
})
}
}