| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package repository
- import (
- "database/sql"
- "testing"
- "time"
- "github.com/Wei-Shaw/sub2api/internal/config"
- "github.com/stretchr/testify/require"
- _ "github.com/lib/pq"
- )
- func TestClampDBPoolSettings(t *testing.T) {
- tests := []struct {
- name string
- connMaxLifetime int
- connMaxIdleTime int
- wantMaxLifetime time.Duration
- wantConnMaxIdleTime time.Duration
- }{
- {
- name: "zero values fall back to safe defaults",
- connMaxLifetime: 0,
- connMaxIdleTime: 0,
- wantMaxLifetime: 30 * time.Minute,
- wantConnMaxIdleTime: 5 * time.Minute,
- },
- {
- name: "negative values fall back to safe defaults",
- connMaxLifetime: -1,
- connMaxIdleTime: -5,
- wantMaxLifetime: 30 * time.Minute,
- wantConnMaxIdleTime: 5 * time.Minute,
- },
- {
- name: "reasonable values pass through",
- connMaxLifetime: 15,
- connMaxIdleTime: 3,
- wantMaxLifetime: 15 * time.Minute,
- wantConnMaxIdleTime: 3 * time.Minute,
- },
- {
- name: "values over twenty four hours fall back to safe defaults",
- connMaxLifetime: 24*60 + 1,
- connMaxIdleTime: 24*60 + 1,
- wantMaxLifetime: 30 * time.Minute,
- wantConnMaxIdleTime: 5 * time.Minute,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- cfg := &config.Config{
- Database: config.DatabaseConfig{
- MaxOpenConns: 50,
- MaxIdleConns: 10,
- ConnMaxLifetimeMinutes: tt.connMaxLifetime,
- ConnMaxIdleTimeMinutes: tt.connMaxIdleTime,
- },
- }
- settings := clampDBPoolSettings(cfg)
- require.Equal(t, 50, settings.MaxOpenConns)
- require.Equal(t, 10, settings.MaxIdleConns)
- require.Equal(t, tt.wantMaxLifetime, settings.ConnMaxLifetime)
- require.Equal(t, tt.wantConnMaxIdleTime, settings.ConnMaxIdleTime)
- })
- }
- }
- func TestApplyDBPoolSettings(t *testing.T) {
- cfg := &config.Config{
- Database: config.DatabaseConfig{
- MaxOpenConns: 40,
- MaxIdleConns: 8,
- ConnMaxLifetimeMinutes: 15,
- ConnMaxIdleTimeMinutes: 3,
- },
- }
- db, err := sql.Open("postgres", "host=127.0.0.1 port=5432 user=postgres sslmode=disable")
- require.NoError(t, err)
- t.Cleanup(func() {
- _ = db.Close()
- })
- applyDBPoolSettings(db, cfg)
- stats := db.Stats()
- require.Equal(t, 40, stats.MaxOpenConnections)
- }
|