mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 19:41:17 +00:00
Add tests for AI intelligence, Docker/K8s agents, log redaction, and general router helper functions.
143 lines
4.5 KiB
Go
143 lines
4.5 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/config"
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/models"
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/monitoring"
|
|
)
|
|
|
|
func TestRouterGetMonitor_Defaults(t *testing.T) {
|
|
defaultMonitor, _, _ := newTestMonitor(t)
|
|
router := &Router{monitor: defaultMonitor}
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/", nil)
|
|
monitor, err := router.getMonitor(req)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if monitor != defaultMonitor {
|
|
t.Fatalf("expected default monitor to be returned")
|
|
}
|
|
}
|
|
|
|
func TestRouterGetMonitor_WithTenant(t *testing.T) {
|
|
defaultMonitor, _, _ := newTestMonitor(t)
|
|
tenantMonitor, _, _ := newTestMonitor(t)
|
|
|
|
mtm := &monitoring.MultiTenantMonitor{}
|
|
setUnexportedField(t, mtm, "monitors", map[string]*monitoring.Monitor{
|
|
"tenant-1": tenantMonitor,
|
|
})
|
|
|
|
router := &Router{monitor: defaultMonitor, mtMonitor: mtm}
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/", nil)
|
|
ctx := context.WithValue(req.Context(), OrgIDContextKey, "tenant-1")
|
|
req = req.WithContext(ctx)
|
|
|
|
monitor, err := router.getMonitor(req)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if monitor != tenantMonitor {
|
|
t.Fatalf("expected tenant monitor to be returned")
|
|
}
|
|
}
|
|
|
|
func TestMultiTenantStateProvider_DefaultAndTenant(t *testing.T) {
|
|
defaultMonitor, defaultState, _ := newTestMonitor(t)
|
|
defaultState.VMs = []models.VM{{ID: "vm-default"}}
|
|
|
|
tenantMonitor, tenantState, _ := newTestMonitor(t)
|
|
tenantState.VMs = []models.VM{{ID: "vm-tenant"}}
|
|
|
|
mtm := &monitoring.MultiTenantMonitor{}
|
|
setUnexportedField(t, mtm, "monitors", map[string]*monitoring.Monitor{
|
|
"tenant-1": tenantMonitor,
|
|
})
|
|
|
|
provider := NewMultiTenantStateProvider(mtm, defaultMonitor)
|
|
|
|
snapDefault := provider.GetStateForTenant("")
|
|
if len(snapDefault.VMs) != 1 || snapDefault.VMs[0].ID != "vm-default" {
|
|
t.Fatalf("unexpected default snapshot: %#v", snapDefault.VMs)
|
|
}
|
|
snapDefault = provider.GetStateForTenant("default")
|
|
if len(snapDefault.VMs) != 1 || snapDefault.VMs[0].ID != "vm-default" {
|
|
t.Fatalf("unexpected default snapshot: %#v", snapDefault.VMs)
|
|
}
|
|
|
|
snapTenant := provider.GetStateForTenant("tenant-1")
|
|
if len(snapTenant.VMs) != 1 || snapTenant.VMs[0].ID != "vm-tenant" {
|
|
t.Fatalf("unexpected tenant snapshot: %#v", snapTenant.VMs)
|
|
}
|
|
}
|
|
|
|
func TestMultiTenantStateProvider_FallbackOnError(t *testing.T) {
|
|
defaultMonitor, defaultState, _ := newTestMonitor(t)
|
|
defaultState.VMs = []models.VM{{ID: "vm-default"}}
|
|
|
|
mtp := config.NewMultiTenantPersistence(t.TempDir())
|
|
mtm := monitoring.NewMultiTenantMonitor(&config.Config{}, mtp, nil)
|
|
defer mtm.Stop()
|
|
|
|
provider := NewMultiTenantStateProvider(mtm, defaultMonitor)
|
|
|
|
snap := provider.GetStateForTenant("../bad")
|
|
if len(snap.VMs) != 1 || snap.VMs[0].ID != "vm-default" {
|
|
t.Fatalf("expected fallback snapshot, got %#v", snap.VMs)
|
|
}
|
|
}
|
|
|
|
func TestSetMultiTenantMonitor_WiresHandlers(t *testing.T) {
|
|
defaultMonitor, _, _ := newTestMonitor(t)
|
|
mtm := &monitoring.MultiTenantMonitor{}
|
|
setUnexportedField(t, mtm, "monitors", map[string]*monitoring.Monitor{
|
|
"default": defaultMonitor,
|
|
})
|
|
|
|
router := &Router{
|
|
alertHandlers: &AlertHandlers{},
|
|
notificationHandlers: &NotificationHandlers{},
|
|
dockerAgentHandlers: &DockerAgentHandlers{},
|
|
hostAgentHandlers: &HostAgentHandlers{},
|
|
kubernetesAgentHandlers: &KubernetesAgentHandlers{},
|
|
systemSettingsHandler: &SystemSettingsHandler{},
|
|
resourceHandlers: &ResourceHandlers{},
|
|
}
|
|
|
|
router.SetMultiTenantMonitor(mtm)
|
|
|
|
if router.mtMonitor != mtm {
|
|
t.Fatalf("expected router mtMonitor to be updated")
|
|
}
|
|
if router.monitor != defaultMonitor {
|
|
t.Fatalf("expected router monitor to be set to default monitor")
|
|
}
|
|
if router.alertHandlers.mtMonitor != mtm {
|
|
t.Fatalf("expected alertHandlers mtMonitor to be set")
|
|
}
|
|
if router.notificationHandlers.mtMonitor != mtm {
|
|
t.Fatalf("expected notificationHandlers mtMonitor to be set")
|
|
}
|
|
if router.dockerAgentHandlers.mtMonitor != mtm {
|
|
t.Fatalf("expected dockerAgentHandlers mtMonitor to be set")
|
|
}
|
|
if router.hostAgentHandlers.mtMonitor != mtm {
|
|
t.Fatalf("expected hostAgentHandlers mtMonitor to be set")
|
|
}
|
|
if router.kubernetesAgentHandlers.mtMonitor != mtm {
|
|
t.Fatalf("expected kubernetesAgentHandlers mtMonitor to be set")
|
|
}
|
|
if router.systemSettingsHandler.mtMonitor != mtm {
|
|
t.Fatalf("expected systemSettingsHandler mtMonitor to be set")
|
|
}
|
|
if router.resourceHandlers.tenantStateProvider == nil {
|
|
t.Fatalf("expected tenant state provider to be set")
|
|
}
|
|
}
|