Files
pulse/internal/api/reporting_monitor_reload_test.go
rcourtman 37454ef478 Schedule the existing VM inventory CSV export
Reuse the canonical inventory exporter and report delivery workflow so
operators can email or save a current organization-wide inventory weekly
or monthly. Keep delivery checks, bounded retries and recovery states
shared, with existing pricing and customer entitlements unchanged.

Refresh the shared inventory for unattended reads and rebind reporting
after monitor reload so schedules use the current infrastructure state.
2026-10-17 14:24:56 +01:00

51 lines
1.5 KiB
Go

package api
import (
"context"
"sync"
"testing"
"github.com/stretchr/testify/require"
)
func TestReportingMonitorReloadUsesReplacementForInventoryAndSchedules(t *testing.T) {
original, originalPersistence, ctx, _, _ := inventoryScheduleFixture(t)
replacement, replacementPersistence, _, _, setVMCount := inventoryScheduleFixture(t)
setVMCount(62)
router := &Router{reportingHandlers: original}
router.SetMultiTenantMonitor(replacement.reportMonitorManager())
snapshot, ok := original.getReportingEnrichmentSnapshot(ctx, "default")
require.True(t, ok)
require.Len(t, buildVMInventoryRows(snapshot.Resources), 62)
persistence, err := original.reportSchedulePersistence(ctx)
require.NoError(t, err)
require.Same(t, replacementPersistence, persistence)
require.NotSame(t, originalPersistence, persistence)
// Clearing the runtime never falls back to the stopped manager.
router.SetMultiTenantMonitor(nil)
_, ok = original.getReportingEnrichmentSnapshot(ctx, "default")
require.False(t, ok)
_, err = original.reportSchedulePersistence(ctx)
require.Error(t, err)
}
func TestReportingMonitorReloadCanOverlapReportingReads(t *testing.T) {
h, _, _, _, _ := inventoryScheduleFixture(t)
manager := h.reportMonitorManager()
var readers sync.WaitGroup
readers.Add(1)
go func() {
defer readers.Done()
for range 100 {
h.getReportingEnrichmentSnapshot(context.Background(), "default")
}
}()
for range 100 {
h.SetMultiTenantMonitor(nil)
h.SetMultiTenantMonitor(manager)
}
readers.Wait()
}