Files
gemini-grs/config/config_test.go

147 lines
3.1 KiB
Go

package config
import (
"os"
"testing"
"github.com/rs/zerolog"
"github.com/stretchr/testify/assert"
)
func TestGetConfig(t *testing.T) {
// Set up test environment variables
envVars := map[string]string{
EnvLogLevel: "debug",
EnvRootPath: ".",
EnvNumWorkers: "5",
EnvWorkerBatchSize: "100",
EnvMaxResponseSize: "1048576",
EnvResponseTimeout: "30",
}
for k, v := range envVars {
os.Setenv(k, v)
defer os.Unsetenv(k)
}
// Get configuration
config := GetConfig()
// Assert configuration values
assert.Equal(t, zerolog.DebugLevel, config.LogLevel)
assert.Equal(t, ".", config.RootPath)
assert.Equal(t, 5, config.NumOfWorkers)
assert.Equal(t, 100, config.WorkerBatchSize)
assert.Equal(t, 1048576, config.MaxResponseSize)
assert.Equal(t, 30, config.ResponseTimeout)
}
func TestParsePositiveInt(t *testing.T) {
tests := []struct {
name string
param string
input string
want int
wantErr bool
errType interface{}
errMessage string
}{
{
name: "valid positive",
param: "TEST_PARAM",
input: "42",
want: 42,
wantErr: false,
},
{
name: "zero",
param: "TEST_PARAM",
input: "0",
wantErr: true,
errType: &ValidationError{},
errMessage: "invalid value '0' for TEST_PARAM: must be positive",
},
{
name: "negative",
param: "TEST_PARAM",
input: "-1",
wantErr: true,
errType: &ValidationError{},
errMessage: "invalid value '-1' for TEST_PARAM: must be positive",
},
{
name: "invalid",
param: "TEST_PARAM",
input: "abc",
wantErr: true,
errType: &ValidationError{},
errMessage: "invalid value 'abc' for TEST_PARAM: must be a valid integer",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := parsePositiveInt(tt.param, tt.input)
if tt.wantErr {
assert.Error(t, err)
assert.IsType(t, tt.errType, err)
if tt.errMessage != "" {
assert.Equal(t, tt.errMessage, err.Error())
}
} else {
assert.NoError(t, err)
assert.Equal(t, tt.want, got)
}
})
}
}
func TestConfigValidation(t *testing.T) {
tests := []struct {
name string
envVars map[string]string
wantErr bool
errMessage string
}{
{
name: "invalid log level",
envVars: map[string]string{
EnvLogLevel: "invalid",
},
wantErr: true,
errMessage: "invalid value 'invalid' for LOG_LEVEL: must be one of: debug, info, warn, error",
},
{
name: "invalid worker count",
envVars: map[string]string{
EnvLogLevel: "debug",
EnvRootPath: ".",
EnvNumWorkers: "-1",
},
wantErr: true,
errMessage: "invalid value '-1' for NUM_OF_WORKERS: must be positive",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Clear environment
os.Clearenv()
// Set required environment variables
for k, v := range tt.envVars {
os.Setenv(k, v)
}
// Defer cleanup
defer os.Clearenv()
if tt.wantErr {
assert.PanicsWithError(t, tt.errMessage, func() {
GetConfig()
})
}
})
}
}