mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-27 14:07:31 +00:00
37454ef478
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.
51 lines
1.5 KiB
Go
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()
|
|
}
|