107 lines
4.2 KiB
Go
107 lines
4.2 KiB
Go
package config
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLoadFromEnvUsesDefaults(t *testing.T) {
|
|
t.Setenv(redisAddrEnvVar, "127.0.0.1:6379")
|
|
|
|
cfg, err := LoadFromEnv()
|
|
require.NoError(t, err)
|
|
|
|
defaults := DefaultConfig()
|
|
require.Equal(t, defaults.ShutdownTimeout, cfg.ShutdownTimeout)
|
|
require.Equal(t, defaults.Logging.Level, cfg.Logging.Level)
|
|
require.Equal(t, defaults.InternalHTTP, cfg.InternalHTTP)
|
|
require.Equal(t, defaults.AdminHTTP, cfg.AdminHTTP)
|
|
require.Equal(t, "127.0.0.1:6379", cfg.Redis.Addr)
|
|
require.Equal(t, defaults.Redis.DB, cfg.Redis.DB)
|
|
require.Equal(t, defaults.Redis.DomainEventsStream, cfg.Redis.DomainEventsStream)
|
|
require.Equal(t, defaults.Redis.DomainEventsStreamMaxLen, cfg.Redis.DomainEventsStreamMaxLen)
|
|
require.Equal(t, defaults.Telemetry, cfg.Telemetry)
|
|
}
|
|
|
|
func TestLoadFromEnvAppliesOverrides(t *testing.T) {
|
|
t.Setenv(shutdownTimeoutEnvVar, "9s")
|
|
t.Setenv(logLevelEnvVar, "debug")
|
|
t.Setenv(internalHTTPAddrEnvVar, "127.0.0.1:18091")
|
|
t.Setenv(internalHTTPReadHeaderTimeoutEnvVar, "3s")
|
|
t.Setenv(internalHTTPRequestTimeoutEnvVar, "750ms")
|
|
t.Setenv(adminHTTPAddrEnvVar, "127.0.0.1:19091")
|
|
t.Setenv(adminHTTPIdleTimeoutEnvVar, "90s")
|
|
t.Setenv(redisAddrEnvVar, "127.0.0.1:6380")
|
|
t.Setenv(redisUsernameEnvVar, "alice")
|
|
t.Setenv(redisPasswordEnvVar, "secret")
|
|
t.Setenv(redisDBEnvVar, "3")
|
|
t.Setenv(redisTLSEnabledEnvVar, "true")
|
|
t.Setenv(redisOperationTimeoutEnvVar, "900ms")
|
|
t.Setenv(redisKeyspacePrefixEnvVar, "user:custom:")
|
|
t.Setenv(redisDomainEventsStreamEnvVar, "user:test_events")
|
|
t.Setenv(redisDomainEventsStreamMaxLenEnvVar, "2048")
|
|
t.Setenv(otelServiceNameEnvVar, "galaxy-user-stage12")
|
|
t.Setenv(otelTracesExporterEnvVar, "otlp")
|
|
t.Setenv(otelMetricsExporterEnvVar, "otlp")
|
|
t.Setenv(otelExporterOTLPTracesProtocolEnvVar, "grpc")
|
|
t.Setenv(otelExporterOTLPMetricsProtocolEnvVar, "http/protobuf")
|
|
t.Setenv(otelStdoutTracesEnabledEnvVar, "true")
|
|
t.Setenv(otelStdoutMetricsEnabledEnvVar, "true")
|
|
|
|
cfg, err := LoadFromEnv()
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, 9*time.Second, cfg.ShutdownTimeout)
|
|
require.Equal(t, "debug", cfg.Logging.Level)
|
|
require.Equal(t, "127.0.0.1:18091", cfg.InternalHTTP.Addr)
|
|
require.Equal(t, 3*time.Second, cfg.InternalHTTP.ReadHeaderTimeout)
|
|
require.Equal(t, 750*time.Millisecond, cfg.InternalHTTP.RequestTimeout)
|
|
require.Equal(t, "127.0.0.1:19091", cfg.AdminHTTP.Addr)
|
|
require.Equal(t, 90*time.Second, cfg.AdminHTTP.IdleTimeout)
|
|
require.Equal(t, "127.0.0.1:6380", cfg.Redis.Addr)
|
|
require.Equal(t, "alice", cfg.Redis.Username)
|
|
require.Equal(t, "secret", cfg.Redis.Password)
|
|
require.Equal(t, 3, cfg.Redis.DB)
|
|
require.True(t, cfg.Redis.TLSEnabled)
|
|
require.Equal(t, 900*time.Millisecond, cfg.Redis.OperationTimeout)
|
|
require.Equal(t, "user:custom:", cfg.Redis.KeyspacePrefix)
|
|
require.Equal(t, "user:test_events", cfg.Redis.DomainEventsStream)
|
|
require.Equal(t, int64(2048), cfg.Redis.DomainEventsStreamMaxLen)
|
|
require.Equal(t, "galaxy-user-stage12", cfg.Telemetry.ServiceName)
|
|
require.Equal(t, "otlp", cfg.Telemetry.TracesExporter)
|
|
require.Equal(t, "otlp", cfg.Telemetry.MetricsExporter)
|
|
require.Equal(t, "grpc", cfg.Telemetry.TracesProtocol)
|
|
require.Equal(t, "http/protobuf", cfg.Telemetry.MetricsProtocol)
|
|
require.True(t, cfg.Telemetry.StdoutTracesEnabled)
|
|
require.True(t, cfg.Telemetry.StdoutMetricsEnabled)
|
|
}
|
|
|
|
func TestLoadFromEnvRejectsInvalidValues(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
envName string
|
|
envVal string
|
|
}{
|
|
{name: "invalid duration", envName: shutdownTimeoutEnvVar, envVal: "later"},
|
|
{name: "invalid bool", envName: redisTLSEnabledEnvVar, envVal: "sometimes"},
|
|
{name: "invalid log level", envName: logLevelEnvVar, envVal: "verbose"},
|
|
{name: "invalid int", envName: redisDBEnvVar, envVal: "db-three"},
|
|
{name: "invalid stream max len", envName: redisDomainEventsStreamMaxLenEnvVar, envVal: "many"},
|
|
{name: "invalid traces exporter", envName: otelTracesExporterEnvVar, envVal: "zipkin"},
|
|
{name: "invalid metrics protocol", envName: otelExporterOTLPMetricsProtocolEnvVar, envVal: "udp"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Setenv(redisAddrEnvVar, "127.0.0.1:6379")
|
|
t.Setenv(tt.envName, tt.envVal)
|
|
|
|
_, err := LoadFromEnv()
|
|
require.Error(t, err)
|
|
})
|
|
}
|
|
}
|