Simplified the database layer by removing custom interface wrappers and using standard library *sql.DB and *sql.Tx types directly. Changes: - Removed DBConnection and DBTransaction interfaces from database.go - Removed NewDBConnection() wrapper function - Updated TokenGenerator to use *sql.DB instead of DBConnection - Updated all validation and revocation methods to accept *sql.Tx - Updated TableManager to work with *sql.DB directly - Updated all tests to use db.Begin() instead of custom wrappers - Fixed GeneratorConfig.DB field (was DBConn) - Updated documentation in doc.go with correct API usage Benefits: - Simpler API with fewer abstractions - Works directly with database/sql standard library - Compatible with GORM (via gormDB.DB()) and Bun (share same *sql.DB) - Easier to understand and maintain - No unnecessary wrapper layers Breaking changes: - GeneratorConfig.DBConn renamed to GeneratorConfig.DB - Removed NewDBConnection() function - pass *sql.DB directly - ValidateAccess/ValidateRefresh now accept *sql.Tx instead of DBTransaction - Token.Revoke/CheckNotRevoked now accept *sql.Tx instead of DBTransaction 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
121 lines
3.5 KiB
Go
121 lines
3.5 KiB
Go
package hws_test
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.haelnorr.com/h/golib/hws"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func Test_ConfigFromEnv(t *testing.T) {
|
|
t.Run("Default values when no env vars set", func(t *testing.T) {
|
|
// Clear any existing env vars
|
|
os.Unsetenv("HWS_HOST")
|
|
os.Unsetenv("HWS_PORT")
|
|
os.Unsetenv("HWS_TRUSTED_HOST")
|
|
os.Unsetenv("HWS_GZIP")
|
|
os.Unsetenv("HWS_READ_HEADER_TIMEOUT")
|
|
os.Unsetenv("HWS_WRITE_TIMEOUT")
|
|
os.Unsetenv("HWS_IDLE_TIMEOUT")
|
|
|
|
config, err := hws.ConfigFromEnv()
|
|
require.NoError(t, err)
|
|
require.NotNil(t, config)
|
|
|
|
assert.Equal(t, "127.0.0.1", config.Host)
|
|
assert.Equal(t, uint64(3000), config.Port)
|
|
assert.Equal(t, "127.0.0.1", config.TrustedHost)
|
|
assert.Equal(t, false, config.GZIP)
|
|
assert.Equal(t, 2*time.Second, config.ReadHeaderTimeout)
|
|
assert.Equal(t, 10*time.Second, config.WriteTimeout)
|
|
assert.Equal(t, 120*time.Second, config.IdleTimeout)
|
|
})
|
|
|
|
t.Run("Custom host", func(t *testing.T) {
|
|
os.Setenv("HWS_HOST", "192.168.1.1")
|
|
defer os.Unsetenv("HWS_HOST")
|
|
|
|
config, err := hws.ConfigFromEnv()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "192.168.1.1", config.Host)
|
|
assert.Equal(t, "192.168.1.1", config.TrustedHost) // Should match host by default
|
|
})
|
|
|
|
t.Run("Custom port", func(t *testing.T) {
|
|
os.Setenv("HWS_PORT", "8080")
|
|
defer os.Unsetenv("HWS_PORT")
|
|
|
|
config, err := hws.ConfigFromEnv()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, uint64(8080), config.Port)
|
|
})
|
|
|
|
t.Run("Custom trusted host", func(t *testing.T) {
|
|
os.Setenv("HWS_HOST", "127.0.0.1")
|
|
os.Setenv("HWS_TRUSTED_HOST", "example.com")
|
|
defer os.Unsetenv("HWS_HOST")
|
|
defer os.Unsetenv("HWS_TRUSTED_HOST")
|
|
|
|
config, err := hws.ConfigFromEnv()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "127.0.0.1", config.Host)
|
|
assert.Equal(t, "example.com", config.TrustedHost)
|
|
})
|
|
|
|
t.Run("GZIP enabled", func(t *testing.T) {
|
|
os.Setenv("HWS_GZIP", "true")
|
|
defer os.Unsetenv("HWS_GZIP")
|
|
|
|
config, err := hws.ConfigFromEnv()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, true, config.GZIP)
|
|
})
|
|
|
|
t.Run("Custom timeouts", func(t *testing.T) {
|
|
os.Setenv("HWS_READ_HEADER_TIMEOUT", "5")
|
|
os.Setenv("HWS_WRITE_TIMEOUT", "30")
|
|
os.Setenv("HWS_IDLE_TIMEOUT", "300")
|
|
defer os.Unsetenv("HWS_READ_HEADER_TIMEOUT")
|
|
defer os.Unsetenv("HWS_WRITE_TIMEOUT")
|
|
defer os.Unsetenv("HWS_IDLE_TIMEOUT")
|
|
|
|
config, err := hws.ConfigFromEnv()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, 5*time.Second, config.ReadHeaderTimeout)
|
|
assert.Equal(t, 30*time.Second, config.WriteTimeout)
|
|
assert.Equal(t, 300*time.Second, config.IdleTimeout)
|
|
})
|
|
|
|
t.Run("All custom values", func(t *testing.T) {
|
|
os.Setenv("HWS_HOST", "0.0.0.0")
|
|
os.Setenv("HWS_PORT", "9000")
|
|
os.Setenv("HWS_TRUSTED_HOST", "myapp.com")
|
|
os.Setenv("HWS_GZIP", "true")
|
|
os.Setenv("HWS_READ_HEADER_TIMEOUT", "3")
|
|
os.Setenv("HWS_WRITE_TIMEOUT", "15")
|
|
os.Setenv("HWS_IDLE_TIMEOUT", "180")
|
|
defer func() {
|
|
os.Unsetenv("HWS_HOST")
|
|
os.Unsetenv("HWS_PORT")
|
|
os.Unsetenv("HWS_TRUSTED_HOST")
|
|
os.Unsetenv("HWS_GZIP")
|
|
os.Unsetenv("HWS_READ_HEADER_TIMEOUT")
|
|
os.Unsetenv("HWS_WRITE_TIMEOUT")
|
|
os.Unsetenv("HWS_IDLE_TIMEOUT")
|
|
}()
|
|
|
|
config, err := hws.ConfigFromEnv()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "0.0.0.0", config.Host)
|
|
assert.Equal(t, uint64(9000), config.Port)
|
|
assert.Equal(t, "myapp.com", config.TrustedHost)
|
|
assert.Equal(t, true, config.GZIP)
|
|
assert.Equal(t, 3*time.Second, config.ReadHeaderTimeout)
|
|
assert.Equal(t, 15*time.Second, config.WriteTimeout)
|
|
assert.Equal(t, 180*time.Second, config.IdleTimeout)
|
|
})
|
|
}
|