channel_monitor_v2_aggregator_test.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. //go:build unit
  2. package service
  3. import (
  4. "testing"
  5. "time"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestChannelMonitorV2MaxChunkForDepth(t *testing.T) {
  9. now := time.Date(2026, 8, 8, 12, 0, 0, 0, time.UTC)
  10. // Within last day → tightest ceiling (2h).
  11. require.Equal(t, channelMonitorV2MaxChunkNear1d, channelMonitorV2MaxChunkForDepth(now, now.Add(-2*time.Hour)))
  12. // Between 1d and 7d → 4h.
  13. require.Equal(t, channelMonitorV2MaxChunkNear7d, channelMonitorV2MaxChunkForDepth(now, now.Add(-2*24*time.Hour)))
  14. // Older than 7d → 6h (never 24h default).
  15. require.Equal(t, channelMonitorV2MaxChunkFar, channelMonitorV2MaxChunkForDepth(now, now.Add(-10*24*time.Hour)))
  16. require.Less(t, channelMonitorV2MaxChunkFar, 24*time.Hour)
  17. require.Equal(t, time.Hour, channelMonitorV2BackfillChunkInit)
  18. require.Equal(t, 15*time.Minute, channelMonitorV2MinBackfillChunk)
  19. }
  20. func TestChannelMonitorV2AggregatorAdaptiveChunk(t *testing.T) {
  21. s := NewChannelMonitorV2Aggregator(nil, nil, nil)
  22. now := time.Date(2026, 8, 8, 12, 0, 0, 0, time.UTC)
  23. cursor := now.Add(-3 * time.Hour)
  24. // Failure shrinks chunk and sets backoff floor.
  25. s.backfillChunk = 2 * time.Hour
  26. s.recordBackfillFailure(now, cursor)
  27. require.Equal(t, time.Hour, s.backfillChunk)
  28. require.Equal(t, time.Minute, s.nextWaitFloor)
  29. require.Equal(t, 1, s.backfillFailures)
  30. // Repeated failure halves again and raises floor.
  31. s.recordBackfillFailure(now, cursor)
  32. require.Equal(t, 30*time.Minute, s.backfillChunk)
  33. require.Equal(t, 2*time.Minute, s.nextWaitFloor)
  34. // Fast success grows within depth ceiling and clears backoff.
  35. s.recordBackfillSuccess(cursor.Add(-30*time.Minute), 5*time.Second, now)
  36. require.Equal(t, 0, s.backfillFailures)
  37. require.Equal(t, time.Duration(0), s.nextWaitFloor)
  38. require.Greater(t, s.backfillChunk, 30*time.Minute)
  39. require.LessOrEqual(t, s.backfillChunk, channelMonitorV2MaxChunkForDepth(now, cursor.Add(-30*time.Minute)))
  40. }