mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-05-07 00:37:36 +00:00
104 lines
3 KiB
Go
104 lines
3 KiB
Go
package mock
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
var mockConfigEnvKeys = []string{
|
|
"PULSE_MOCK_NODES",
|
|
"PULSE_MOCK_VMS_PER_NODE",
|
|
"PULSE_MOCK_LXCS_PER_NODE",
|
|
"PULSE_MOCK_DOCKER_HOSTS",
|
|
"PULSE_MOCK_DOCKER_CONTAINERS",
|
|
"PULSE_MOCK_GENERIC_HOSTS",
|
|
"PULSE_MOCK_K8S_CLUSTERS",
|
|
"PULSE_MOCK_K8S_NODES",
|
|
"PULSE_MOCK_K8S_PODS",
|
|
"PULSE_MOCK_K8S_DEPLOYMENTS",
|
|
"PULSE_MOCK_RANDOM_METRICS",
|
|
"PULSE_MOCK_STOPPED_PERCENT",
|
|
"PULSE_MOCK_UPDATE_INTERVAL",
|
|
}
|
|
|
|
func TestLoadMockConfigLogsInvalidOverridesAndKeepsLegacyFallbacks(t *testing.T) {
|
|
resetMockConfigEnv(t)
|
|
t.Setenv("PULSE_MOCK_NODES", "invalid")
|
|
t.Setenv("PULSE_MOCK_VMS_PER_NODE", "-2")
|
|
t.Setenv("PULSE_MOCK_RANDOM_METRICS", "sometimes")
|
|
t.Setenv("PULSE_MOCK_STOPPED_PERCENT", "not-a-percent")
|
|
t.Setenv("PULSE_MOCK_UPDATE_INTERVAL", "not-a-duration")
|
|
|
|
var buf bytes.Buffer
|
|
origLogger := log.Logger
|
|
log.Logger = zerolog.New(&buf).Level(zerolog.DebugLevel).With().Timestamp().Logger()
|
|
defer func() {
|
|
log.Logger = origLogger
|
|
}()
|
|
|
|
cfg := LoadMockConfig()
|
|
|
|
if cfg.NodeCount != DefaultConfig.NodeCount {
|
|
t.Fatalf("expected NodeCount default %d, got %d", DefaultConfig.NodeCount, cfg.NodeCount)
|
|
}
|
|
if cfg.VMsPerNode != DefaultConfig.VMsPerNode {
|
|
t.Fatalf("expected VMsPerNode default %d, got %d", DefaultConfig.VMsPerNode, cfg.VMsPerNode)
|
|
}
|
|
if cfg.RandomMetrics != DefaultConfig.RandomMetrics {
|
|
t.Fatalf("expected RandomMetrics=%t (default) for invalid legacy override, got %t", DefaultConfig.RandomMetrics, cfg.RandomMetrics)
|
|
}
|
|
if cfg.StoppedPercent != DefaultConfig.StoppedPercent {
|
|
t.Fatalf("expected StoppedPercent default %f, got %f", DefaultConfig.StoppedPercent, cfg.StoppedPercent)
|
|
}
|
|
if cfg.UpdateInterval != DefaultConfig.UpdateInterval {
|
|
t.Fatalf("expected UpdateInterval default %s, got %s", DefaultConfig.UpdateInterval, cfg.UpdateInterval)
|
|
}
|
|
|
|
logOutput := buf.String()
|
|
for _, envKey := range []string{
|
|
`"env":"PULSE_MOCK_NODES"`,
|
|
`"env":"PULSE_MOCK_VMS_PER_NODE"`,
|
|
`"env":"PULSE_MOCK_RANDOM_METRICS"`,
|
|
`"env":"PULSE_MOCK_STOPPED_PERCENT"`,
|
|
`"env":"PULSE_MOCK_UPDATE_INTERVAL"`,
|
|
} {
|
|
if !strings.Contains(logOutput, envKey) {
|
|
t.Fatalf("expected warning log to include %s, got %q", envKey, logOutput)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestLoadMockConfigAppliesValidOverrides(t *testing.T) {
|
|
resetMockConfigEnv(t)
|
|
t.Setenv("PULSE_MOCK_NODES", "7")
|
|
t.Setenv("PULSE_MOCK_RANDOM_METRICS", "true")
|
|
t.Setenv("PULSE_MOCK_STOPPED_PERCENT", "25")
|
|
t.Setenv("PULSE_MOCK_UPDATE_INTERVAL", "15s")
|
|
|
|
cfg := LoadMockConfig()
|
|
|
|
if cfg.NodeCount != 7 {
|
|
t.Fatalf("expected NodeCount=7, got %d", cfg.NodeCount)
|
|
}
|
|
if !cfg.RandomMetrics {
|
|
t.Fatal("expected RandomMetrics=true")
|
|
}
|
|
if cfg.StoppedPercent != 0.25 {
|
|
t.Fatalf("expected StoppedPercent=0.25, got %f", cfg.StoppedPercent)
|
|
}
|
|
if cfg.UpdateInterval != 15*time.Second {
|
|
t.Fatalf("expected UpdateInterval=15s, got %s", cfg.UpdateInterval)
|
|
}
|
|
}
|
|
|
|
func resetMockConfigEnv(t *testing.T) {
|
|
t.Helper()
|
|
for _, key := range mockConfigEnvKeys {
|
|
t.Setenv(key, "")
|
|
}
|
|
}
|