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_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, 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) }) 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("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_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_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, 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) }) }