Files
poimen-workflows/internal/clusters/cluster_manager_test.go
T

148 lines
3.5 KiB
Go
Raw Normal View History

package clusters
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestRegisterCluster(t *testing.T) {
cm := NewClusterManager()
err := cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
assert.NoError(t, err)
cluster, exists := cm.GetCluster("prod")
assert.True(t, exists)
assert.Equal(t, "prod", cluster.Name)
}
func TestUnregisterCluster(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
err := cm.UnregisterCluster("prod")
assert.NoError(t, err)
_, exists := cm.GetCluster("prod")
assert.False(t, exists)
}
func TestListClusters(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
cm.RegisterCluster("staging", "https://k8s-staging.com", 50)
clusters := cm.ListClusters()
assert.Equal(t, 2, len(clusters))
}
func TestHealthCheck(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
err := cm.HealthCheck("prod")
assert.NoError(t, err)
cluster, _ := cm.GetCluster("prod")
assert.True(t, cluster.Healthy)
}
func TestMarkUnhealthy(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
cm.MarkUnhealthy("prod")
cluster, _ := cm.GetCluster("prod")
assert.False(t, cluster.Healthy)
}
func TestAllocateTask(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
err := cm.AllocateTask("prod")
assert.NoError(t, err)
cluster, _ := cm.GetCluster("prod")
assert.Equal(t, 1, cluster.Usage)
}
func TestAllocateTaskUnhealthy(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
cm.MarkUnhealthy("prod")
err := cm.AllocateTask("prod")
assert.Error(t, err)
}
func TestAllocateTaskAtCapacity(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 1)
cm.AllocateTask("prod")
err := cm.AllocateTask("prod")
assert.Error(t, err)
}
func TestReleaseTask(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
cm.AllocateTask("prod")
cm.ReleaseTask("prod")
cluster, _ := cm.GetCluster("prod")
assert.Equal(t, 0, cluster.Usage)
}
func TestFindBestCluster(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
cm.RegisterCluster("staging", "https://k8s-staging.com", 50)
cm.AllocateTask("staging")
cm.AllocateTask("staging")
best, err := cm.FindBestCluster()
assert.NoError(t, err)
assert.Equal(t, "prod", best)
}
func TestGetCapacitySummary(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
cm.RegisterCluster("staging", "https://k8s-staging.com", 50)
cm.AllocateTask("prod")
summary := cm.GetCapacitySummary()
assert.Equal(t, 150, summary["total_capacity"])
assert.Equal(t, 1, summary["total_usage"])
assert.Equal(t, 2, summary["healthy_clusters"])
}
func TestGetHealthStatus(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
cm.RegisterCluster("staging", "https://k8s-staging.com", 50)
cm.MarkUnhealthy("staging")
status := cm.GetHealthStatus()
assert.True(t, status["prod"])
assert.False(t, status["staging"])
}
func TestRegisterClusterError(t *testing.T) {
cm := NewClusterManager()
cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
err := cm.RegisterCluster("prod", "https://k8s-prod.com", 100)
assert.Error(t, err)
}