mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-05-07 08:57:12 +00:00
166 lines
6.5 KiB
Go
166 lines
6.5 KiB
Go
package mock
|
|
|
|
import (
|
|
"math"
|
|
"reflect"
|
|
"strconv"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestSetMockConfigNormalizesInvalidAndOversizedValues(t *testing.T) {
|
|
prevConfig := GetConfig()
|
|
prevEnabled := IsMockEnabled()
|
|
t.Cleanup(func() {
|
|
SetMockConfig(prevConfig)
|
|
SetEnabled(prevEnabled)
|
|
})
|
|
|
|
SetEnabled(false)
|
|
|
|
overlong := strings.Repeat("a", maxMockHighLoadNodeChars+1)
|
|
SetMockConfig(MockConfig{
|
|
NodeCount: 0,
|
|
VMsPerNode: -10,
|
|
LXCsPerNode: maxMockLXCsPerNode + 5,
|
|
DockerHostCount: maxMockDockerHostCount + 1,
|
|
DockerContainersPerHost: maxMockDockerContainersPerHost + 10,
|
|
GenericHostCount: maxMockGenericHostCount + 3,
|
|
K8sClusterCount: maxMockK8sClusterCount + 1,
|
|
K8sNodesPerCluster: maxMockK8sNodesPerCluster + 1,
|
|
K8sPodsPerCluster: maxMockK8sPodsPerCluster + 1,
|
|
K8sDeploymentsPerCluster: maxMockK8sDeploymentsPerCluster + 1,
|
|
StoppedPercent: 10,
|
|
UpdateInterval: 10 * time.Minute,
|
|
HighLoadNodes: []string{" pve1 ", "pve1", "", "pve2\n", overlong, "standalone1"},
|
|
})
|
|
|
|
cfg := GetConfig()
|
|
if cfg.NodeCount != minMockNodeCount {
|
|
t.Fatalf("expected node count to normalize to %d, got %d", minMockNodeCount, cfg.NodeCount)
|
|
}
|
|
if cfg.VMsPerNode != 0 {
|
|
t.Fatalf("expected VMs per node to normalize to 0, got %d", cfg.VMsPerNode)
|
|
}
|
|
if cfg.LXCsPerNode != maxMockLXCsPerNode {
|
|
t.Fatalf("expected LXCs per node to normalize to %d, got %d", maxMockLXCsPerNode, cfg.LXCsPerNode)
|
|
}
|
|
if cfg.DockerHostCount != maxMockDockerHostCount {
|
|
t.Fatalf("expected docker host count to normalize to %d, got %d", maxMockDockerHostCount, cfg.DockerHostCount)
|
|
}
|
|
if cfg.DockerContainersPerHost != maxMockDockerContainersPerHost {
|
|
t.Fatalf(
|
|
"expected docker containers per host to normalize to %d, got %d",
|
|
maxMockDockerContainersPerHost,
|
|
cfg.DockerContainersPerHost,
|
|
)
|
|
}
|
|
if cfg.GenericHostCount != maxMockGenericHostCount {
|
|
t.Fatalf("expected generic host count to normalize to %d, got %d", maxMockGenericHostCount, cfg.GenericHostCount)
|
|
}
|
|
if cfg.K8sClusterCount != maxMockK8sClusterCount {
|
|
t.Fatalf("expected k8s cluster count to normalize to %d, got %d", maxMockK8sClusterCount, cfg.K8sClusterCount)
|
|
}
|
|
if cfg.K8sNodesPerCluster != maxMockK8sNodesPerCluster {
|
|
t.Fatalf(
|
|
"expected k8s nodes per cluster to normalize to %d, got %d",
|
|
maxMockK8sNodesPerCluster,
|
|
cfg.K8sNodesPerCluster,
|
|
)
|
|
}
|
|
if cfg.K8sPodsPerCluster != maxMockK8sPodsPerCluster {
|
|
t.Fatalf(
|
|
"expected k8s pods per cluster to normalize to %d, got %d",
|
|
maxMockK8sPodsPerCluster,
|
|
cfg.K8sPodsPerCluster,
|
|
)
|
|
}
|
|
if cfg.K8sDeploymentsPerCluster != maxMockK8sDeploymentsPerCluster {
|
|
t.Fatalf(
|
|
"expected k8s deployments per cluster to normalize to %d, got %d",
|
|
maxMockK8sDeploymentsPerCluster,
|
|
cfg.K8sDeploymentsPerCluster,
|
|
)
|
|
}
|
|
if cfg.StoppedPercent != 1 {
|
|
t.Fatalf("expected stopped percent to normalize to 1, got %f", cfg.StoppedPercent)
|
|
}
|
|
if cfg.UpdateInterval != maxMockUpdateInterval {
|
|
t.Fatalf("expected update interval to normalize to %s, got %s", maxMockUpdateInterval, cfg.UpdateInterval)
|
|
}
|
|
|
|
expectedHighLoadNodes := []string{"pve1", "pve2", "standalone1"}
|
|
if !reflect.DeepEqual(cfg.HighLoadNodes, expectedHighLoadNodes) {
|
|
t.Fatalf("expected sanitized high load nodes %v, got %v", expectedHighLoadNodes, cfg.HighLoadNodes)
|
|
}
|
|
}
|
|
|
|
func TestLoadMockConfigEnforcesUpperBoundsFromEnvironment(t *testing.T) {
|
|
t.Setenv("PULSE_MOCK_NODES", strconv.Itoa(maxMockNodeCount+500))
|
|
t.Setenv("PULSE_MOCK_VMS_PER_NODE", strconv.Itoa(maxMockVMsPerNode+500))
|
|
t.Setenv("PULSE_MOCK_LXCS_PER_NODE", strconv.Itoa(maxMockLXCsPerNode+500))
|
|
t.Setenv("PULSE_MOCK_DOCKER_HOSTS", strconv.Itoa(maxMockDockerHostCount+500))
|
|
t.Setenv("PULSE_MOCK_DOCKER_CONTAINERS", strconv.Itoa(maxMockDockerContainersPerHost+500))
|
|
t.Setenv("PULSE_MOCK_GENERIC_HOSTS", strconv.Itoa(maxMockGenericHostCount+500))
|
|
t.Setenv("PULSE_MOCK_K8S_CLUSTERS", strconv.Itoa(maxMockK8sClusterCount+500))
|
|
t.Setenv("PULSE_MOCK_K8S_NODES", strconv.Itoa(maxMockK8sNodesPerCluster+500))
|
|
t.Setenv("PULSE_MOCK_K8S_PODS", strconv.Itoa(maxMockK8sPodsPerCluster+500))
|
|
t.Setenv("PULSE_MOCK_K8S_DEPLOYMENTS", strconv.Itoa(maxMockK8sDeploymentsPerCluster+500))
|
|
t.Setenv("PULSE_MOCK_STOPPED_PERCENT", "250")
|
|
t.Setenv("PULSE_MOCK_UPDATE_INTERVAL", "10m")
|
|
|
|
cfg := LoadMockConfig()
|
|
if cfg.NodeCount != maxMockNodeCount {
|
|
t.Fatalf("expected node count %d, got %d", maxMockNodeCount, cfg.NodeCount)
|
|
}
|
|
if cfg.VMsPerNode != maxMockVMsPerNode {
|
|
t.Fatalf("expected VMs per node %d, got %d", maxMockVMsPerNode, cfg.VMsPerNode)
|
|
}
|
|
if cfg.LXCsPerNode != maxMockLXCsPerNode {
|
|
t.Fatalf("expected LXCs per node %d, got %d", maxMockLXCsPerNode, cfg.LXCsPerNode)
|
|
}
|
|
if cfg.DockerHostCount != maxMockDockerHostCount {
|
|
t.Fatalf("expected docker host count %d, got %d", maxMockDockerHostCount, cfg.DockerHostCount)
|
|
}
|
|
if cfg.DockerContainersPerHost != maxMockDockerContainersPerHost {
|
|
t.Fatalf("expected docker containers per host %d, got %d", maxMockDockerContainersPerHost, cfg.DockerContainersPerHost)
|
|
}
|
|
if cfg.GenericHostCount != maxMockGenericHostCount {
|
|
t.Fatalf("expected generic host count %d, got %d", maxMockGenericHostCount, cfg.GenericHostCount)
|
|
}
|
|
if cfg.K8sClusterCount != maxMockK8sClusterCount {
|
|
t.Fatalf("expected k8s cluster count %d, got %d", maxMockK8sClusterCount, cfg.K8sClusterCount)
|
|
}
|
|
if cfg.K8sNodesPerCluster != maxMockK8sNodesPerCluster {
|
|
t.Fatalf("expected k8s nodes per cluster %d, got %d", maxMockK8sNodesPerCluster, cfg.K8sNodesPerCluster)
|
|
}
|
|
if cfg.K8sPodsPerCluster != maxMockK8sPodsPerCluster {
|
|
t.Fatalf("expected k8s pods per cluster %d, got %d", maxMockK8sPodsPerCluster, cfg.K8sPodsPerCluster)
|
|
}
|
|
if cfg.K8sDeploymentsPerCluster != maxMockK8sDeploymentsPerCluster {
|
|
t.Fatalf(
|
|
"expected k8s deployments per cluster %d, got %d",
|
|
maxMockK8sDeploymentsPerCluster,
|
|
cfg.K8sDeploymentsPerCluster,
|
|
)
|
|
}
|
|
if cfg.StoppedPercent != 1 {
|
|
t.Fatalf("expected stopped percent 1, got %f", cfg.StoppedPercent)
|
|
}
|
|
if cfg.UpdateInterval != maxMockUpdateInterval {
|
|
t.Fatalf("expected update interval %s, got %s", maxMockUpdateInterval, cfg.UpdateInterval)
|
|
}
|
|
}
|
|
|
|
func TestLoadMockConfigInvalidStoppedPercentFallsBackToDefault(t *testing.T) {
|
|
t.Setenv("PULSE_MOCK_STOPPED_PERCENT", "NaN")
|
|
|
|
cfg := LoadMockConfig()
|
|
if math.IsNaN(cfg.StoppedPercent) {
|
|
t.Fatal("expected stopped percent to be normalized to a finite value")
|
|
}
|
|
if cfg.StoppedPercent != DefaultConfig.StoppedPercent {
|
|
t.Fatalf("expected stopped percent %f, got %f", DefaultConfig.StoppedPercent, cfg.StoppedPercent)
|
|
}
|
|
}
|