Skip to content

Paywall feature allows you to buy your way to the front of the line#3

Merged
andreimerlescu merged 4 commits intomainfrom
feature/paywall
Apr 13, 2026
Merged

Paywall feature allows you to buy your way to the front of the line#3
andreimerlescu merged 4 commits intomainfrom
feature/paywall

Conversation

@andreimerlescu
Copy link
Copy Markdown
Owner

@andreimerlescu andreimerlescu commented Apr 13, 2026

With demo and all!

make all
go vet ./...
go clean ./...
go test -count=1 -v ./...
=== RUN   TestEvent_String
=== PAUSE TestEvent_String
=== RUN   TestSnapshot_Full
=== PAUSE TestSnapshot_Full
=== RUN   TestSnapshot_Empty
=== PAUSE TestSnapshot_Empty
=== RUN   TestOn_SingleHandler_Called
=== PAUSE TestOn_SingleHandler_Called
=== RUN   TestOn_MultipleHandlers_AllCalled
=== PAUSE TestOn_MultipleHandlers_AllCalled
=== RUN   TestOn_DifferentEvents_DoNotCross
=== PAUSE TestOn_DifferentEvents_DoNotCross
=== RUN   TestOff_RemovesAllHandlers
=== PAUSE TestOff_RemovesAllHandlers
=== RUN   TestOff_DoesNotAffectOtherEvents
=== PAUSE TestOff_DoesNotAffectOtherEvents
=== RUN   TestEmit_NoHandlers_IsNoop
=== PAUSE TestEmit_NoHandlers_IsNoop
=== RUN   TestEmit_SnapshotDeliveredCorrectly
=== PAUSE TestEmit_SnapshotDeliveredCorrectly
=== RUN   TestSnapshot_ReflectsLiveState
=== PAUSE TestSnapshot_ReflectsLiveState
=== RUN   TestConcurrent_OnAndEmit
=== PAUSE TestConcurrent_OnAndEmit
=== RUN   TestConcurrent_OffAndEmit
=== PAUSE TestConcurrent_OffAndEmit
=== RUN   TestConcurrent_OnOffEmit_AllEvents
=== PAUSE TestConcurrent_OnOffEmit_AllEvents
=== RUN   TestIntegration_EventFull_FiredWhenRoomFull
=== PAUSE TestIntegration_EventFull_FiredWhenRoomFull
=== RUN   TestIntegration_EventFull_DoesNotFireRepeatedly
=== PAUSE TestIntegration_EventFull_DoesNotFireRepeatedly
=== RUN   TestIntegration_EventDrain_FiredAfterRelease
=== PAUSE TestIntegration_EventDrain_FiredAfterRelease
=== RUN   TestIntegration_EventDrain_OnlyFiresOnTransition
=== PAUSE TestIntegration_EventDrain_OnlyFiresOnTransition
=== RUN   TestSetRateFunc_NilDisablesPromotions
=== PAUSE TestSetRateFunc_NilDisablesPromotions
=== RUN   TestSetRateFunc_StoresAndLoads
=== PAUSE TestSetRateFunc_StoresAndLoads
=== RUN   TestRateFuncLoad_DefaultIsNil
=== PAUSE TestRateFuncLoad_DefaultIsNil
=== RUN   TestQuoteCost_NoRateFunc_ReturnsDisabled
=== PAUSE TestQuoteCost_NoRateFunc_ReturnsDisabled
=== RUN   TestQuoteCost_TokenNotFound
=== PAUSE TestQuoteCost_TokenNotFound
=== RUN   TestQuoteCost_InvalidTargetPosition
=== PAUSE TestQuoteCost_InvalidTargetPosition
=== RUN   TestQuoteCost_AlreadyAdmitted
=== PAUSE TestQuoteCost_AlreadyAdmitted
=== RUN   TestQuoteCost_AlreadyAtOrAheadOfTarget
=== PAUSE TestQuoteCost_AlreadyAtOrAheadOfTarget
=== RUN   TestQuoteCost_CorrectCalculation_FlatRate
=== PAUSE TestQuoteCost_CorrectCalculation_FlatRate
=== RUN   TestQuoteCost_SurgeRateUsesQueueDepth
=== PAUSE TestQuoteCost_SurgeRateUsesQueueDepth
=== RUN   TestQuoteCost_DoesNotMutateState
=== PAUSE TestQuoteCost_DoesNotMutateState
=== RUN   TestPromoteToken_NoRateFunc_ReturnsDisabled
=== PAUSE TestPromoteToken_NoRateFunc_ReturnsDisabled
=== RUN   TestPromoteToken_TokenNotFound
=== PAUSE TestPromoteToken_TokenNotFound
=== RUN   TestPromoteToken_InvalidTargetPosition
=== PAUSE TestPromoteToken_InvalidTargetPosition
=== RUN   TestPromoteToken_AlreadyAdmitted
=== PAUSE TestPromoteToken_AlreadyAdmitted
=== RUN   TestPromoteToken_AlreadyAhead_Noop
=== PAUSE TestPromoteToken_AlreadyAhead_Noop
=== RUN   TestPromoteToken_MovesToFront
=== PAUSE TestPromoteToken_MovesToFront
=== RUN   TestPromoteToken_MovesToIntermediate
=== PAUSE TestPromoteToken_MovesToIntermediate
=== RUN   TestPromoteToken_SetsPromotedFlag
=== PAUSE TestPromoteToken_SetsPromotedFlag
=== RUN   TestPromoteToken_ReturnsCost
=== PAUSE TestPromoteToken_ReturnsCost
=== RUN   TestPromoteToken_FiresEventPromote
=== PAUSE TestPromoteToken_FiresEventPromote
=== RUN   TestPromoteToken_NoEventOnNoop
=== PAUSE TestPromoteToken_NoEventOnNoop
=== RUN   TestPromoteToken_NoEventOnError
=== PAUSE TestPromoteToken_NoEventOnError
=== RUN   TestPromoteTokenToFront_JumpsToPositionOne
=== PAUSE TestPromoteTokenToFront_JumpsToPositionOne
=== RUN   TestPromoteToken_ConcurrentPromotions_NoCollision
=== PAUSE TestPromoteToken_ConcurrentPromotions_NoCollision
=== RUN   TestPromoteToken_SerializedUnderMutex
=== PAUSE TestPromoteToken_SerializedUnderMutex
=== RUN   TestIntegration_PromotedToken_AdmittedOnNextPoll
=== PAUSE TestIntegration_PromotedToken_AdmittedOnNextPoll
=== RUN   TestIntegration_PromotedToken_ServesRequestSuccessfully
=== PAUSE TestIntegration_PromotedToken_ServesRequestSuccessfully
=== RUN   TestIntegration_StatusEndpoint_IncludesPricing
=== PAUSE TestIntegration_StatusEndpoint_IncludesPricing
=== RUN   TestIntegration_StatusEndpoint_NoPricingWithoutRateFunc
=== PAUSE TestIntegration_StatusEndpoint_NoPricingWithoutRateFunc
=== RUN   TestIntegration_StatusEndpoint_HidesPricingWhenPassActive
=== PAUSE TestIntegration_StatusEndpoint_HidesPricingWhenPassActive
=== RUN   TestPromoteToken_QueueMovedBetweenQuoteAndPromote
=== PAUSE TestPromoteToken_QueueMovedBetweenQuoteAndPromote
=== RUN   TestPromoteToken_ReapDoesNotEvictPromotedToken
=== PAUSE TestPromoteToken_ReapDoesNotEvictPromotedToken
=== RUN   TestPromoteToken_ExpiredPromotedToken_Reaped
=== PAUSE TestPromoteToken_ExpiredPromotedToken_Reaped
=== RUN   TestSetPassDuration_Zero_DisablesPasses
=== PAUSE TestSetPassDuration_Zero_DisablesPasses
=== RUN   TestSetPassDuration_ValidRange
=== PAUSE TestSetPassDuration_ValidRange
=== RUN   TestSetPassDuration_InvalidRange
=== PAUSE TestSetPassDuration_InvalidRange
=== RUN   TestGrantPass_ReturnsTokenWhenConfigured
=== PAUSE TestGrantPass_ReturnsTokenWhenConfigured
=== RUN   TestGrantPass_ReturnsEmptyWhenDisabled
=== PAUSE TestGrantPass_ReturnsEmptyWhenDisabled
=== RUN   TestHasValidPass_EmptyToken
=== PAUSE TestHasValidPass_EmptyToken
=== RUN   TestHasValidPass_NonexistentToken
=== PAUSE TestHasValidPass_NonexistentToken
=== RUN   TestHasValidPass_ExpiredPass
=== PAUSE TestHasValidPass_ExpiredPass
=== RUN   TestHasValidPass_LivePass
=== PAUSE TestHasValidPass_LivePass
=== RUN   TestPromoteToken_IssuesPassWhenConfigured
=== PAUSE TestPromoteToken_IssuesPassWhenConfigured
=== RUN   TestPromoteToken_NoPassWhenDisabled
=== PAUSE TestPromoteToken_NoPassWhenDisabled
=== RUN   TestAutoPromote_WithValidPass
=== PAUSE TestAutoPromote_WithValidPass
=== RUN   TestAutoPromote_SkipsAlreadyPromoted
=== PAUSE TestAutoPromote_SkipsAlreadyPromoted
=== RUN   TestAutoPromote_NoopWhenInServingWindow
=== PAUSE TestAutoPromote_NoopWhenInServingWindow
=== RUN   TestAutoPromote_MissingToken
=== PAUSE TestAutoPromote_MissingToken
=== RUN   TestReap_EmptyTokenStore_IsNoop
--- PASS: TestReap_EmptyTokenStore_IsNoop (0.00s)
=== RUN   TestReap_AllLive_NoneEvicted
--- PASS: TestReap_AllLive_NoneEvicted (0.00s)
=== RUN   TestReap_AllExpired_AllEvicted
--- PASS: TestReap_AllExpired_AllEvicted (0.00s)
=== RUN   TestReap_MixedExpiredAndLive
--- PASS: TestReap_MixedExpiredAndLive (0.00s)
=== RUN   TestReap_AdvancesNowServingOnlyForOutOfWindowTickets
--- PASS: TestReap_AdvancesNowServingOnlyForOutOfWindowTickets (0.00s)
=== RUN   TestReap_DoesNotAdvanceNowServingForWindowTickets
--- PASS: TestReap_DoesNotAdvanceNowServingForWindowTickets (0.00s)
=== RUN   TestReap_ClearsMoreThanOneBatch
--- PASS: TestReap_ClearsMoreThanOneBatch (0.00s)
=== RUN   TestReap_FiresEventEvict
--- PASS: TestReap_FiresEventEvict (0.01s)
=== RUN   TestReap_DoesNotFireEventEvictWhenNothingExpired
--- PASS: TestReap_DoesNotFireEventEvictWhenNothingExpired (0.05s)
=== RUN   TestReap_DoesNotFireEventEvictForWindowOnlyEvictions
--- PASS: TestReap_DoesNotFireEventEvictForWindowOnlyEvictions (0.05s)
=== RUN   TestReapBatch_DoubleCheckPreventsRaceEviction
--- PASS: TestReapBatch_DoubleCheckPreventsRaceEviction (0.02s)
=== RUN   TestSetReaperInterval_RestartSignalSent
--- PASS: TestSetReaperInterval_RestartSignalSent (0.00s)
=== RUN   TestSetReaperInterval_DuplicateSignalDoesNotBlock
--- PASS: TestSetReaperInterval_DuplicateSignalDoesNotBlock (0.00s)
=== RUN   TestReap_ConcurrentWithTokenStoreWrites
--- PASS: TestReap_ConcurrentWithTokenStoreWrites (0.00s)
=== RUN   TestStartReaper_StopsOnContextCancel
--- PASS: TestStartReaper_StopsOnContextCancel (0.00s)
=== RUN   TestTokenStore_Len
--- PASS: TestTokenStore_Len (0.00s)
=== RUN   TestTokenStore_TouchLastPoll
--- PASS: TestTokenStore_TouchLastPoll (0.01s)
=== RUN   TestPassStore_SetAndGet
--- PASS: TestPassStore_SetAndGet (0.00s)
=== RUN   TestPassStore_GetMissing
--- PASS: TestPassStore_GetMissing (0.00s)
=== RUN   TestPassStore_GetExpired_LazyEviction
--- PASS: TestPassStore_GetExpired_LazyEviction (0.00s)
=== RUN   TestPassStore_GetLive
--- PASS: TestPassStore_GetLive (0.00s)
=== RUN   TestPassStore_Delete
--- PASS: TestPassStore_Delete (0.00s)
=== RUN   TestPassStore_Len
--- PASS: TestPassStore_Len (0.00s)
=== RUN   TestPassStore_Reap_RemovesExpired
--- PASS: TestPassStore_Reap_RemovesExpired (0.00s)
=== RUN   TestPassStore_Reap_EmptyStore
--- PASS: TestPassStore_Reap_EmptyStore (0.00s)
=== RUN   TestPassStore_Reap_AllLive
--- PASS: TestPassStore_Reap_AllLive (0.00s)
=== RUN   TestPassStore_Reap_AllExpired
--- PASS: TestPassStore_Reap_AllExpired (0.00s)
=== RUN   TestReap_AlsoSweepsPassStore
--- PASS: TestReap_AlsoSweepsPassStore (0.00s)
=== RUN   TestReap_PassSweepConcurrentWithTokenReap
--- PASS: TestReap_PassSweepConcurrentWithTokenReap (0.00s)
=== RUN   TestNewWaitingRoom_ValidCap
--- PASS: TestNewWaitingRoom_ValidCap (0.00s)
=== RUN   TestNewWaitingRoom_ZeroCap
--- PASS: TestNewWaitingRoom_ZeroCap (0.00s)
=== RUN   TestNewWaitingRoom_NegativeCap
--- PASS: TestNewWaitingRoom_NegativeCap (0.00s)
=== RUN   TestNewWaitingRoom_Panics
--- PASS: TestNewWaitingRoom_Panics (0.00s)
=== RUN   TestFastPath_RequestAdmittedImmediately
--- PASS: TestFastPath_RequestAdmittedImmediately (0.00s)
=== RUN   TestFastPath_AllSlotsFilledThenReleased
--- PASS: TestFastPath_AllSlotsFilledThenReleased (0.00s)
=== RUN   TestSlowPath_WaitingRoomServedWhenFull
--- PASS: TestSlowPath_WaitingRoomServedWhenFull (0.00s)
=== RUN   TestSlowPath_CookieIssuedWhenQueued
--- PASS: TestSlowPath_CookieIssuedWhenQueued (0.00s)
=== RUN   TestSlowPath_PositionInjectedInHTML
--- PASS: TestSlowPath_PositionInjectedInHTML (0.00s)
=== RUN   TestSlowPath_ResumePreservesQueuePosition
--- PASS: TestSlowPath_ResumePreservesQueuePosition (0.00s)
=== RUN   TestFIFO_RequestsAdmittedInOrder
--- PASS: TestFIFO_RequestsAdmittedInOrder (4.23s)
=== RUN   TestStatusEndpoint_UnknownTokenReturnsReady
--- PASS: TestStatusEndpoint_UnknownTokenReturnsReady (0.00s)
=== RUN   TestStatusEndpoint_KnownTokenReturnsPosition
--- PASS: TestStatusEndpoint_KnownTokenReturnsPosition (0.00s)
=== RUN   TestStatusEndpoint_ReturnsReadyAfterSlotOpens
--- PASS: TestStatusEndpoint_ReturnsReadyAfterSlotOpens (1.05s)
=== RUN   TestStatusEndpoint_RateLimitRejectsFastPolling
--- PASS: TestStatusEndpoint_RateLimitRejectsFastPolling (0.00s)
=== RUN   TestMaxQueueDepth_RejectsWhenFull
--- PASS: TestMaxQueueDepth_RejectsWhenFull (0.00s)
=== RUN   TestMaxQueueDepth_ZeroMeansUnlimited
--- PASS: TestMaxQueueDepth_ZeroMeansUnlimited (0.00s)
=== RUN   TestMaxQueueDepth_NegativeRejected
--- PASS: TestMaxQueueDepth_NegativeRejected (0.00s)
=== RUN   TestCookiePath_DefaultIsSlash
--- PASS: TestCookiePath_DefaultIsSlash (0.00s)
=== RUN   TestCookiePath_CustomPathUsed
--- PASS: TestCookiePath_CustomPathUsed (0.00s)
=== RUN   TestCookieDomain_DefaultIsEmpty
--- PASS: TestCookieDomain_DefaultIsEmpty (0.00s)
=== RUN   TestSetCap_ExpandAdmitsWaiters
--- PASS: TestSetCap_ExpandAdmitsWaiters (0.00s)
=== RUN   TestSetCap_InvalidCapRejected
--- PASS: TestSetCap_InvalidCapRejected (0.00s)
=== RUN   TestSetHTML_CustomHTMLServed
--- PASS: TestSetHTML_CustomHTMLServed (0.00s)
=== RUN   TestSetHTML_NilRevertsToDefault
--- PASS: TestSetHTML_NilRevertsToDefault (0.00s)
=== RUN   TestReaper_EvictsExpiredTokens
--- PASS: TestReaper_EvictsExpiredTokens (0.00s)
=== RUN   TestReaper_PreservesLiveTokens
--- PASS: TestReaper_PreservesLiveTokens (0.00s)
=== RUN   TestReaper_AdvancesNowServingOnEviction
--- PASS: TestReaper_AdvancesNowServingOnEviction (0.00s)
=== RUN   TestReaper_DoesNotAdvanceNowServingForWindowTicket
--- PASS: TestReaper_DoesNotAdvanceNowServingForWindowTicket (0.00s)
=== RUN   TestSetReaperInterval_ValidRange
--- PASS: TestSetReaperInterval_ValidRange (0.00s)
=== RUN   TestSetReaperInterval_InvalidRange
--- PASS: TestSetReaperInterval_InvalidRange (0.00s)
=== RUN   TestSetSecureCookie_DefaultIsFalse
--- PASS: TestSetSecureCookie_DefaultIsFalse (0.00s)
=== RUN   TestSetSecureCookie_TrueSetsCookieSecure
--- PASS: TestSetSecureCookie_TrueSetsCookieSecure (0.00s)
=== RUN   TestQueueDepth_AccurateWhileWaiting
--- PASS: TestQueueDepth_AccurateWhileWaiting (0.00s)
=== RUN   TestUtilization_BetweenZeroAndOne
--- PASS: TestUtilization_BetweenZeroAndOne (0.00s)
=== RUN   TestConcurrent_NoRaceUnderLoad
--- PASS: TestConcurrent_NoRaceUnderLoad (0.01s)
=== RUN   TestConcurrent_SetCapDuringLoad
--- PASS: TestConcurrent_SetCapDuringLoad (0.01s)
=== CONT  TestEvent_String
=== CONT  TestIntegration_EventDrain_OnlyFiresOnTransition
=== CONT  TestAutoPromote_WithValidPass
=== CONT  TestPromoteToken_QueueMovedBetweenQuoteAndPromote
=== CONT  TestPromoteToken_NoEventOnError
=== CONT  TestPromoteToken_MovesToFront
=== CONT  TestIntegration_EventFull_FiredWhenRoomFull
=== CONT  TestIntegration_StatusEndpoint_IncludesPricing
=== RUN   TestEvent_String/Enter
=== PAUSE TestEvent_String/Enter
=== CONT  TestPromoteToken_ConcurrentPromotions_NoCollision
=== CONT  TestIntegration_EventDrain_FiredAfterRelease
=== CONT  TestAutoPromote_MissingToken
=== CONT  TestIntegration_EventFull_DoesNotFireRepeatedly
=== CONT  TestIntegration_PromotedToken_ServesRequestSuccessfully
=== CONT  TestAutoPromote_NoopWhenInServingWindow
=== CONT  TestPromoteToken_ReturnsCost
=== CONT  TestAutoPromote_SkipsAlreadyPromoted
=== CONT  TestPromoteToken_SerializedUnderMutex
=== CONT  TestPromoteToken_SetsPromotedFlag
=== CONT  TestConcurrent_OnOffEmit_AllEvents
=== CONT  TestPromoteToken_NoEventOnNoop
=== CONT  TestPromoteToken_MovesToIntermediate
=== CONT  TestConcurrent_OffAndEmit
=== CONT  TestConcurrent_OnAndEmit
=== CONT  TestEmit_SnapshotDeliveredCorrectly
=== CONT  TestOff_DoesNotAffectOtherEvents
=== CONT  TestPromoteToken_AlreadyAhead_Noop
=== CONT  TestEmit_NoHandlers_IsNoop
=== CONT  TestOff_RemovesAllHandlers
=== CONT  TestOn_MultipleHandlers_AllCalled
=== CONT  TestOn_DifferentEvents_DoNotCross
=== CONT  TestQuoteCost_TokenNotFound
=== CONT  TestOn_SingleHandler_Called
=== CONT  TestQuoteCost_NoRateFunc_ReturnsDisabled
=== CONT  TestPromoteToken_TokenNotFound
=== CONT  TestSnapshot_Full
=== CONT  TestPromoteToken_NoRateFunc_ReturnsDisabled
=== CONT  TestPromoteToken_FiresEventPromote
=== CONT  TestPromoteTokenToFront_JumpsToPositionOne
=== CONT  TestQuoteCost_CorrectCalculation_FlatRate
--- PASS: TestAutoPromote_WithValidPass (0.00s)
--- PASS: TestPromoteToken_MovesToFront (0.00s)
=== CONT  TestIntegration_StatusEndpoint_HidesPricingWhenPassActive
=== CONT  TestIntegration_StatusEndpoint_NoPricingWithoutRateFunc
=== RUN   TestEvent_String/Exit
=== PAUSE TestEvent_String/Exit
=== CONT  TestIntegration_PromotedToken_AdmittedOnNextPoll
=== CONT  TestQuoteCost_AlreadyAdmitted
=== CONT  TestSnapshot_ReflectsLiveState
=== CONT  TestGrantPass_ReturnsEmptyWhenDisabled
=== RUN   TestEvent_String/Full
=== CONT  TestSetRateFunc_NilDisablesPromotions
=== CONT  TestPromoteToken_NoPassWhenDisabled
=== PAUSE TestEvent_String/Full
=== RUN   TestEvent_String/Drain
=== PAUSE TestEvent_String/Drain
=== RUN   TestEvent_String/Queue
=== CONT  TestSetRateFunc_StoresAndLoads
=== CONT  TestQuoteCost_InvalidTargetPosition
=== CONT  TestSetPassDuration_ValidRange
=== CONT  TestSetPassDuration_InvalidRange
=== CONT  TestPromoteToken_ExpiredPromotedToken_Reaped
=== CONT  TestSetPassDuration_Zero_DisablesPasses
=== CONT  TestHasValidPass_ExpiredPass
=== CONT  TestPromoteToken_InvalidTargetPosition
=== CONT  TestSnapshot_Empty
=== CONT  TestRateFuncLoad_DefaultIsNil
=== CONT  TestQuoteCost_SurgeRateUsesQueueDepth
=== CONT  TestQuoteCost_DoesNotMutateState
--- PASS: TestPromoteToken_QueueMovedBetweenQuoteAndPromote (0.00s)
--- PASS: TestAutoPromote_MissingToken (0.00s)
--- PASS: TestPromoteToken_ConcurrentPromotions_NoCollision (0.00s)
=== CONT  TestQuoteCost_AlreadyAtOrAheadOfTarget
=== CONT  TestHasValidPass_EmptyToken
=== CONT  TestHasValidPass_LivePass
=== PAUSE TestEvent_String/Queue
=== CONT  TestPromoteToken_IssuesPassWhenConfigured
=== RUN   TestEvent_String/Evict
=== CONT  TestGrantPass_ReturnsTokenWhenConfigured
=== CONT  TestPromoteToken_AlreadyAdmitted
--- PASS: TestAutoPromote_NoopWhenInServingWindow (0.00s)
--- PASS: TestPromoteToken_ReturnsCost (0.00s)
--- PASS: TestIntegration_StatusEndpoint_IncludesPricing (0.00s)
=== CONT  TestHasValidPass_NonexistentToken
=== CONT  TestPromoteToken_ReapDoesNotEvictPromotedToken
=== PAUSE TestEvent_String/Evict
=== RUN   TestEvent_String/Timeout
--- PASS: TestPromoteToken_SerializedUnderMutex (0.00s)
--- PASS: TestPromoteToken_SetsPromotedFlag (0.00s)
=== PAUSE TestEvent_String/Timeout
--- PASS: TestPromoteToken_MovesToIntermediate (0.00s)
--- PASS: TestConcurrent_OnOffEmit_AllEvents (0.00s)
--- PASS: TestEmit_SnapshotDeliveredCorrectly (0.00s)
--- PASS: TestAutoPromote_SkipsAlreadyPromoted (0.00s)
--- PASS: TestConcurrent_OffAndEmit (0.00s)
--- PASS: TestEmit_NoHandlers_IsNoop (0.00s)
--- PASS: TestPromoteToken_AlreadyAhead_Noop (0.00s)
--- PASS: TestQuoteCost_TokenNotFound (0.00s)
--- PASS: TestQuoteCost_NoRateFunc_ReturnsDisabled (0.00s)
--- PASS: TestPromoteToken_TokenNotFound (0.00s)
--- PASS: TestSnapshot_Full (0.00s)
--- PASS: TestPromoteToken_NoRateFunc_ReturnsDisabled (0.00s)
--- PASS: TestConcurrent_OnAndEmit (0.00s)
--- PASS: TestPromoteTokenToFront_JumpsToPositionOne (0.00s)
--- PASS: TestQuoteCost_CorrectCalculation_FlatRate (0.00s)
--- PASS: TestQuoteCost_AlreadyAdmitted (0.00s)
=== RUN   TestEvent_String/Promote
--- PASS: TestIntegration_StatusEndpoint_NoPricingWithoutRateFunc (0.00s)
--- PASS: TestGrantPass_ReturnsEmptyWhenDisabled (0.00s)
--- PASS: TestSnapshot_ReflectsLiveState (0.00s)
--- PASS: TestSetRateFunc_NilDisablesPromotions (0.00s)
--- PASS: TestPromoteToken_NoPassWhenDisabled (0.00s)
--- PASS: TestSetRateFunc_StoresAndLoads (0.00s)
--- PASS: TestIntegration_StatusEndpoint_HidesPricingWhenPassActive (0.00s)
--- PASS: TestQuoteCost_InvalidTargetPosition (0.00s)
--- PASS: TestSetPassDuration_ValidRange (0.00s)
=== PAUSE TestEvent_String/Promote
--- PASS: TestSetPassDuration_InvalidRange (0.00s)
--- PASS: TestPromoteToken_ExpiredPromotedToken_Reaped (0.00s)
--- PASS: TestSetPassDuration_Zero_DisablesPasses (0.00s)
=== RUN   TestEvent_String/Unknown
--- PASS: TestHasValidPass_ExpiredPass (0.00s)
--- PASS: TestRateFuncLoad_DefaultIsNil (0.00s)
=== PAUSE TestEvent_String/Unknown
=== CONT  TestEvent_String/Enter
=== CONT  TestEvent_String/Evict
=== CONT  TestEvent_String/Unknown
=== CONT  TestEvent_String/Exit
--- PASS: TestQuoteCost_AlreadyAtOrAheadOfTarget (0.00s)
=== CONT  TestEvent_String/Full
=== CONT  TestEvent_String/Queue
=== CONT  TestEvent_String/Drain
--- PASS: TestQuoteCost_SurgeRateUsesQueueDepth (0.00s)
=== CONT  TestEvent_String/Promote
=== CONT  TestEvent_String/Timeout
--- PASS: TestHasValidPass_EmptyToken (0.00s)
--- PASS: TestPromoteToken_IssuesPassWhenConfigured (0.00s)
--- PASS: TestGrantPass_ReturnsTokenWhenConfigured (0.00s)
--- PASS: TestHasValidPass_LivePass (0.00s)
--- PASS: TestPromoteToken_InvalidTargetPosition (0.00s)
--- PASS: TestQuoteCost_DoesNotMutateState (0.00s)
--- PASS: TestPromoteToken_AlreadyAdmitted (0.00s)
--- PASS: TestHasValidPass_NonexistentToken (0.00s)
--- PASS: TestPromoteToken_ReapDoesNotEvictPromotedToken (0.00s)
--- PASS: TestSnapshot_Empty (0.00s)
--- PASS: TestEvent_String (0.00s)
    --- PASS: TestEvent_String/Enter (0.00s)
    --- PASS: TestEvent_String/Evict (0.00s)
    --- PASS: TestEvent_String/Unknown (0.00s)
    --- PASS: TestEvent_String/Exit (0.00s)
    --- PASS: TestEvent_String/Full (0.00s)
    --- PASS: TestEvent_String/Queue (0.00s)
    --- PASS: TestEvent_String/Drain (0.00s)
    --- PASS: TestEvent_String/Promote (0.00s)
    --- PASS: TestEvent_String/Timeout (0.00s)
--- PASS: TestPromoteToken_FiresEventPromote (0.01s)
--- PASS: TestOn_SingleHandler_Called (0.01s)
--- PASS: TestIntegration_EventFull_FiredWhenRoomFull (0.01s)
--- PASS: TestIntegration_EventDrain_FiredAfterRelease (0.01s)
--- PASS: TestOn_MultipleHandlers_AllCalled (0.01s)
--- PASS: TestOn_DifferentEvents_DoNotCross (0.03s)
--- PASS: TestOff_DoesNotAffectOtherEvents (0.03s)
--- PASS: TestOff_RemovesAllHandlers (0.03s)
--- PASS: TestPromoteToken_NoEventOnError (0.05s)
--- PASS: TestPromoteToken_NoEventOnNoop (0.05s)
--- PASS: TestIntegration_EventFull_DoesNotFireRepeatedly (0.06s)
--- PASS: TestIntegration_EventDrain_OnlyFiresOnTransition (0.11s)
--- PASS: TestIntegration_PromotedToken_AdmittedOnNextPoll (1.05s)
--- PASS: TestIntegration_PromotedToken_ServesRequestSuccessfully (1.05s)
=== RUN   FuzzWaitingRoom
=== RUN   FuzzWaitingRoom/seed#0
=== RUN   FuzzWaitingRoom/seed#1
=== RUN   FuzzWaitingRoom/seed#2
--- PASS: FuzzWaitingRoom (0.01s)
    --- PASS: FuzzWaitingRoom/seed#0 (0.00s)
    --- PASS: FuzzWaitingRoom/seed#1 (0.00s)
    --- PASS: FuzzWaitingRoom/seed#2 (0.00s)
PASS
ok  	github.com/andreimerlescu/room	6.849s
?   	github.com/andreimerlescu/room/sample/basic-web-app	[no test files]
go test -race -count=1 -v ./...
=== RUN   TestEvent_String
=== PAUSE TestEvent_String
=== RUN   TestSnapshot_Full
=== PAUSE TestSnapshot_Full
=== RUN   TestSnapshot_Empty
=== PAUSE TestSnapshot_Empty
=== RUN   TestOn_SingleHandler_Called
=== PAUSE TestOn_SingleHandler_Called
=== RUN   TestOn_MultipleHandlers_AllCalled
=== PAUSE TestOn_MultipleHandlers_AllCalled
=== RUN   TestOn_DifferentEvents_DoNotCross
=== PAUSE TestOn_DifferentEvents_DoNotCross
=== RUN   TestOff_RemovesAllHandlers
=== PAUSE TestOff_RemovesAllHandlers
=== RUN   TestOff_DoesNotAffectOtherEvents
=== PAUSE TestOff_DoesNotAffectOtherEvents
=== RUN   TestEmit_NoHandlers_IsNoop
=== PAUSE TestEmit_NoHandlers_IsNoop
=== RUN   TestEmit_SnapshotDeliveredCorrectly
=== PAUSE TestEmit_SnapshotDeliveredCorrectly
=== RUN   TestSnapshot_ReflectsLiveState
=== PAUSE TestSnapshot_ReflectsLiveState
=== RUN   TestConcurrent_OnAndEmit
=== PAUSE TestConcurrent_OnAndEmit
=== RUN   TestConcurrent_OffAndEmit
=== PAUSE TestConcurrent_OffAndEmit
=== RUN   TestConcurrent_OnOffEmit_AllEvents
=== PAUSE TestConcurrent_OnOffEmit_AllEvents
=== RUN   TestIntegration_EventFull_FiredWhenRoomFull
=== PAUSE TestIntegration_EventFull_FiredWhenRoomFull
=== RUN   TestIntegration_EventFull_DoesNotFireRepeatedly
=== PAUSE TestIntegration_EventFull_DoesNotFireRepeatedly
=== RUN   TestIntegration_EventDrain_FiredAfterRelease
=== PAUSE TestIntegration_EventDrain_FiredAfterRelease
=== RUN   TestIntegration_EventDrain_OnlyFiresOnTransition
=== PAUSE TestIntegration_EventDrain_OnlyFiresOnTransition
=== RUN   TestSetRateFunc_NilDisablesPromotions
=== PAUSE TestSetRateFunc_NilDisablesPromotions
=== RUN   TestSetRateFunc_StoresAndLoads
=== PAUSE TestSetRateFunc_StoresAndLoads
=== RUN   TestRateFuncLoad_DefaultIsNil
=== PAUSE TestRateFuncLoad_DefaultIsNil
=== RUN   TestQuoteCost_NoRateFunc_ReturnsDisabled
=== PAUSE TestQuoteCost_NoRateFunc_ReturnsDisabled
=== RUN   TestQuoteCost_TokenNotFound
=== PAUSE TestQuoteCost_TokenNotFound
=== RUN   TestQuoteCost_InvalidTargetPosition
=== PAUSE TestQuoteCost_InvalidTargetPosition
=== RUN   TestQuoteCost_AlreadyAdmitted
=== PAUSE TestQuoteCost_AlreadyAdmitted
=== RUN   TestQuoteCost_AlreadyAtOrAheadOfTarget
=== PAUSE TestQuoteCost_AlreadyAtOrAheadOfTarget
=== RUN   TestQuoteCost_CorrectCalculation_FlatRate
=== PAUSE TestQuoteCost_CorrectCalculation_FlatRate
=== RUN   TestQuoteCost_SurgeRateUsesQueueDepth
=== PAUSE TestQuoteCost_SurgeRateUsesQueueDepth
=== RUN   TestQuoteCost_DoesNotMutateState
=== PAUSE TestQuoteCost_DoesNotMutateState
=== RUN   TestPromoteToken_NoRateFunc_ReturnsDisabled
=== PAUSE TestPromoteToken_NoRateFunc_ReturnsDisabled
=== RUN   TestPromoteToken_TokenNotFound
=== PAUSE TestPromoteToken_TokenNotFound
=== RUN   TestPromoteToken_InvalidTargetPosition
=== PAUSE TestPromoteToken_InvalidTargetPosition
=== RUN   TestPromoteToken_AlreadyAdmitted
=== PAUSE TestPromoteToken_AlreadyAdmitted
=== RUN   TestPromoteToken_AlreadyAhead_Noop
=== PAUSE TestPromoteToken_AlreadyAhead_Noop
=== RUN   TestPromoteToken_MovesToFront
=== PAUSE TestPromoteToken_MovesToFront
=== RUN   TestPromoteToken_MovesToIntermediate
=== PAUSE TestPromoteToken_MovesToIntermediate
=== RUN   TestPromoteToken_SetsPromotedFlag
=== PAUSE TestPromoteToken_SetsPromotedFlag
=== RUN   TestPromoteToken_ReturnsCost
=== PAUSE TestPromoteToken_ReturnsCost
=== RUN   TestPromoteToken_FiresEventPromote
=== PAUSE TestPromoteToken_FiresEventPromote
=== RUN   TestPromoteToken_NoEventOnNoop
=== PAUSE TestPromoteToken_NoEventOnNoop
=== RUN   TestPromoteToken_NoEventOnError
=== PAUSE TestPromoteToken_NoEventOnError
=== RUN   TestPromoteTokenToFront_JumpsToPositionOne
=== PAUSE TestPromoteTokenToFront_JumpsToPositionOne
=== RUN   TestPromoteToken_ConcurrentPromotions_NoCollision
=== PAUSE TestPromoteToken_ConcurrentPromotions_NoCollision
=== RUN   TestPromoteToken_SerializedUnderMutex
=== PAUSE TestPromoteToken_SerializedUnderMutex
=== RUN   TestIntegration_PromotedToken_AdmittedOnNextPoll
=== PAUSE TestIntegration_PromotedToken_AdmittedOnNextPoll
=== RUN   TestIntegration_PromotedToken_ServesRequestSuccessfully
=== PAUSE TestIntegration_PromotedToken_ServesRequestSuccessfully
=== RUN   TestIntegration_StatusEndpoint_IncludesPricing
=== PAUSE TestIntegration_StatusEndpoint_IncludesPricing
=== RUN   TestIntegration_StatusEndpoint_NoPricingWithoutRateFunc
=== PAUSE TestIntegration_StatusEndpoint_NoPricingWithoutRateFunc
=== RUN   TestIntegration_StatusEndpoint_HidesPricingWhenPassActive
=== PAUSE TestIntegration_StatusEndpoint_HidesPricingWhenPassActive
=== RUN   TestPromoteToken_QueueMovedBetweenQuoteAndPromote
=== PAUSE TestPromoteToken_QueueMovedBetweenQuoteAndPromote
=== RUN   TestPromoteToken_ReapDoesNotEvictPromotedToken
=== PAUSE TestPromoteToken_ReapDoesNotEvictPromotedToken
=== RUN   TestPromoteToken_ExpiredPromotedToken_Reaped
=== PAUSE TestPromoteToken_ExpiredPromotedToken_Reaped
=== RUN   TestSetPassDuration_Zero_DisablesPasses
=== PAUSE TestSetPassDuration_Zero_DisablesPasses
=== RUN   TestSetPassDuration_ValidRange
=== PAUSE TestSetPassDuration_ValidRange
=== RUN   TestSetPassDuration_InvalidRange
=== PAUSE TestSetPassDuration_InvalidRange
=== RUN   TestGrantPass_ReturnsTokenWhenConfigured
=== PAUSE TestGrantPass_ReturnsTokenWhenConfigured
=== RUN   TestGrantPass_ReturnsEmptyWhenDisabled
=== PAUSE TestGrantPass_ReturnsEmptyWhenDisabled
=== RUN   TestHasValidPass_EmptyToken
=== PAUSE TestHasValidPass_EmptyToken
=== RUN   TestHasValidPass_NonexistentToken
=== PAUSE TestHasValidPass_NonexistentToken
=== RUN   TestHasValidPass_ExpiredPass
=== PAUSE TestHasValidPass_ExpiredPass
=== RUN   TestHasValidPass_LivePass
=== PAUSE TestHasValidPass_LivePass
=== RUN   TestPromoteToken_IssuesPassWhenConfigured
=== PAUSE TestPromoteToken_IssuesPassWhenConfigured
=== RUN   TestPromoteToken_NoPassWhenDisabled
=== PAUSE TestPromoteToken_NoPassWhenDisabled
=== RUN   TestAutoPromote_WithValidPass
=== PAUSE TestAutoPromote_WithValidPass
=== RUN   TestAutoPromote_SkipsAlreadyPromoted
=== PAUSE TestAutoPromote_SkipsAlreadyPromoted
=== RUN   TestAutoPromote_NoopWhenInServingWindow
=== PAUSE TestAutoPromote_NoopWhenInServingWindow
=== RUN   TestAutoPromote_MissingToken
=== PAUSE TestAutoPromote_MissingToken
=== RUN   TestReap_EmptyTokenStore_IsNoop
--- PASS: TestReap_EmptyTokenStore_IsNoop (0.00s)
=== RUN   TestReap_AllLive_NoneEvicted
--- PASS: TestReap_AllLive_NoneEvicted (0.00s)
=== RUN   TestReap_AllExpired_AllEvicted
--- PASS: TestReap_AllExpired_AllEvicted (0.00s)
=== RUN   TestReap_MixedExpiredAndLive
--- PASS: TestReap_MixedExpiredAndLive (0.00s)
=== RUN   TestReap_AdvancesNowServingOnlyForOutOfWindowTickets
--- PASS: TestReap_AdvancesNowServingOnlyForOutOfWindowTickets (0.00s)
=== RUN   TestReap_DoesNotAdvanceNowServingForWindowTickets
--- PASS: TestReap_DoesNotAdvanceNowServingForWindowTickets (0.00s)
=== RUN   TestReap_ClearsMoreThanOneBatch
--- PASS: TestReap_ClearsMoreThanOneBatch (0.00s)
=== RUN   TestReap_FiresEventEvict
--- PASS: TestReap_FiresEventEvict (0.01s)
=== RUN   TestReap_DoesNotFireEventEvictWhenNothingExpired
--- PASS: TestReap_DoesNotFireEventEvictWhenNothingExpired (0.05s)
=== RUN   TestReap_DoesNotFireEventEvictForWindowOnlyEvictions
--- PASS: TestReap_DoesNotFireEventEvictForWindowOnlyEvictions (0.05s)
=== RUN   TestReapBatch_DoubleCheckPreventsRaceEviction
--- PASS: TestReapBatch_DoubleCheckPreventsRaceEviction (0.02s)
=== RUN   TestSetReaperInterval_RestartSignalSent
--- PASS: TestSetReaperInterval_RestartSignalSent (0.00s)
=== RUN   TestSetReaperInterval_DuplicateSignalDoesNotBlock
--- PASS: TestSetReaperInterval_DuplicateSignalDoesNotBlock (0.00s)
=== RUN   TestReap_ConcurrentWithTokenStoreWrites
--- PASS: TestReap_ConcurrentWithTokenStoreWrites (0.00s)
=== RUN   TestStartReaper_StopsOnContextCancel
--- PASS: TestStartReaper_StopsOnContextCancel (0.00s)
=== RUN   TestTokenStore_Len
--- PASS: TestTokenStore_Len (0.00s)
=== RUN   TestTokenStore_TouchLastPoll
--- PASS: TestTokenStore_TouchLastPoll (0.01s)
=== RUN   TestPassStore_SetAndGet
--- PASS: TestPassStore_SetAndGet (0.00s)
=== RUN   TestPassStore_GetMissing
--- PASS: TestPassStore_GetMissing (0.00s)
=== RUN   TestPassStore_GetExpired_LazyEviction
--- PASS: TestPassStore_GetExpired_LazyEviction (0.00s)
=== RUN   TestPassStore_GetLive
--- PASS: TestPassStore_GetLive (0.00s)
=== RUN   TestPassStore_Delete
--- PASS: TestPassStore_Delete (0.00s)
=== RUN   TestPassStore_Len
--- PASS: TestPassStore_Len (0.00s)
=== RUN   TestPassStore_Reap_RemovesExpired
--- PASS: TestPassStore_Reap_RemovesExpired (0.00s)
=== RUN   TestPassStore_Reap_EmptyStore
--- PASS: TestPassStore_Reap_EmptyStore (0.00s)
=== RUN   TestPassStore_Reap_AllLive
--- PASS: TestPassStore_Reap_AllLive (0.00s)
=== RUN   TestPassStore_Reap_AllExpired
--- PASS: TestPassStore_Reap_AllExpired (0.00s)
=== RUN   TestReap_AlsoSweepsPassStore
--- PASS: TestReap_AlsoSweepsPassStore (0.00s)
=== RUN   TestReap_PassSweepConcurrentWithTokenReap
--- PASS: TestReap_PassSweepConcurrentWithTokenReap (0.00s)
=== RUN   TestNewWaitingRoom_ValidCap
--- PASS: TestNewWaitingRoom_ValidCap (0.00s)
=== RUN   TestNewWaitingRoom_ZeroCap
--- PASS: TestNewWaitingRoom_ZeroCap (0.00s)
=== RUN   TestNewWaitingRoom_NegativeCap
--- PASS: TestNewWaitingRoom_NegativeCap (0.00s)
=== RUN   TestNewWaitingRoom_Panics
--- PASS: TestNewWaitingRoom_Panics (0.00s)
=== RUN   TestFastPath_RequestAdmittedImmediately
--- PASS: TestFastPath_RequestAdmittedImmediately (0.00s)
=== RUN   TestFastPath_AllSlotsFilledThenReleased
--- PASS: TestFastPath_AllSlotsFilledThenReleased (0.00s)
=== RUN   TestSlowPath_WaitingRoomServedWhenFull
--- PASS: TestSlowPath_WaitingRoomServedWhenFull (0.00s)
=== RUN   TestSlowPath_CookieIssuedWhenQueued
--- PASS: TestSlowPath_CookieIssuedWhenQueued (0.00s)
=== RUN   TestSlowPath_PositionInjectedInHTML
--- PASS: TestSlowPath_PositionInjectedInHTML (0.00s)
=== RUN   TestSlowPath_ResumePreservesQueuePosition
--- PASS: TestSlowPath_ResumePreservesQueuePosition (0.00s)
=== RUN   TestFIFO_RequestsAdmittedInOrder
--- PASS: TestFIFO_RequestsAdmittedInOrder (1.08s)
=== RUN   TestStatusEndpoint_UnknownTokenReturnsReady
--- PASS: TestStatusEndpoint_UnknownTokenReturnsReady (0.00s)
=== RUN   TestStatusEndpoint_KnownTokenReturnsPosition
--- PASS: TestStatusEndpoint_KnownTokenReturnsPosition (0.00s)
=== RUN   TestStatusEndpoint_ReturnsReadyAfterSlotOpens
--- PASS: TestStatusEndpoint_ReturnsReadyAfterSlotOpens (0.00s)
=== RUN   TestStatusEndpoint_RateLimitRejectsFastPolling
--- PASS: TestStatusEndpoint_RateLimitRejectsFastPolling (0.00s)
=== RUN   TestMaxQueueDepth_RejectsWhenFull
--- PASS: TestMaxQueueDepth_RejectsWhenFull (0.00s)
=== RUN   TestMaxQueueDepth_ZeroMeansUnlimited
--- PASS: TestMaxQueueDepth_ZeroMeansUnlimited (0.01s)
=== RUN   TestMaxQueueDepth_NegativeRejected
--- PASS: TestMaxQueueDepth_NegativeRejected (0.00s)
=== RUN   TestCookiePath_DefaultIsSlash
--- PASS: TestCookiePath_DefaultIsSlash (0.00s)
=== RUN   TestCookiePath_CustomPathUsed
--- PASS: TestCookiePath_CustomPathUsed (0.00s)
=== RUN   TestCookieDomain_DefaultIsEmpty
--- PASS: TestCookieDomain_DefaultIsEmpty (0.00s)
=== RUN   TestSetCap_ExpandAdmitsWaiters
--- PASS: TestSetCap_ExpandAdmitsWaiters (0.00s)
=== RUN   TestSetCap_InvalidCapRejected
--- PASS: TestSetCap_InvalidCapRejected (0.00s)
=== RUN   TestSetHTML_CustomHTMLServed
--- PASS: TestSetHTML_CustomHTMLServed (0.00s)
=== RUN   TestSetHTML_NilRevertsToDefault
--- PASS: TestSetHTML_NilRevertsToDefault (0.00s)
=== RUN   TestReaper_EvictsExpiredTokens
--- PASS: TestReaper_EvictsExpiredTokens (0.00s)
=== RUN   TestReaper_PreservesLiveTokens
--- PASS: TestReaper_PreservesLiveTokens (0.00s)
=== RUN   TestReaper_AdvancesNowServingOnEviction
--- PASS: TestReaper_AdvancesNowServingOnEviction (0.00s)
=== RUN   TestReaper_DoesNotAdvanceNowServingForWindowTicket
--- PASS: TestReaper_DoesNotAdvanceNowServingForWindowTicket (0.00s)
=== RUN   TestSetReaperInterval_ValidRange
--- PASS: TestSetReaperInterval_ValidRange (0.00s)
=== RUN   TestSetReaperInterval_InvalidRange
--- PASS: TestSetReaperInterval_InvalidRange (0.00s)
=== RUN   TestSetSecureCookie_DefaultIsFalse
--- PASS: TestSetSecureCookie_DefaultIsFalse (0.00s)
=== RUN   TestSetSecureCookie_TrueSetsCookieSecure
--- PASS: TestSetSecureCookie_TrueSetsCookieSecure (0.00s)
=== RUN   TestQueueDepth_AccurateWhileWaiting
--- PASS: TestQueueDepth_AccurateWhileWaiting (0.00s)
=== RUN   TestUtilization_BetweenZeroAndOne
--- PASS: TestUtilization_BetweenZeroAndOne (0.00s)
=== RUN   TestConcurrent_NoRaceUnderLoad
--- PASS: TestConcurrent_NoRaceUnderLoad (0.01s)
=== RUN   TestConcurrent_SetCapDuringLoad
--- PASS: TestConcurrent_SetCapDuringLoad (0.01s)
=== CONT  TestSnapshot_Empty
=== CONT  TestPromoteToken_AlreadyAhead_Noop
=== CONT  TestQuoteCost_AlreadyAtOrAheadOfTarget
=== CONT  TestQuoteCost_NoRateFunc_ReturnsDisabled
=== CONT  TestQuoteCost_CorrectCalculation_FlatRate
=== CONT  TestGrantPass_ReturnsEmptyWhenDisabled
=== CONT  TestPromoteToken_QueueMovedBetweenQuoteAndPromote
=== CONT  TestOn_DifferentEvents_DoNotCross
=== CONT  TestPromoteToken_MovesToIntermediate
=== CONT  TestIntegration_EventDrain_FiredAfterRelease
=== CONT  TestAutoPromote_NoopWhenInServingWindow
=== CONT  TestPromoteToken_MovesToFront
--- PASS: TestSnapshot_Empty (0.00s)
=== CONT  TestAutoPromote_SkipsAlreadyPromoted
=== CONT  TestPromoteToken_AlreadyAdmitted
=== CONT  TestConcurrent_OffAndEmit
=== CONT  TestIntegration_EventFull_FiredWhenRoomFull
=== CONT  TestGrantPass_ReturnsTokenWhenConfigured
=== CONT  TestPromoteToken_ReturnsCost
=== CONT  TestHasValidPass_EmptyToken
=== CONT  TestPromoteToken_SerializedUnderMutex
=== CONT  TestEmit_NoHandlers_IsNoop
=== CONT  TestSetRateFunc_NilDisablesPromotions
=== CONT  TestOff_RemovesAllHandlers
=== CONT  TestQuoteCost_InvalidTargetPosition
=== CONT  TestPromoteToken_IssuesPassWhenConfigured
=== CONT  TestAutoPromote_WithValidPass
=== CONT  TestPromoteToken_NoEventOnError
=== CONT  TestPromoteToken_NoPassWhenDisabled
=== CONT  TestAutoPromote_MissingToken
=== CONT  TestPromoteToken_FiresEventPromote
=== CONT  TestIntegration_PromotedToken_AdmittedOnNextPoll
=== CONT  TestIntegration_EventFull_DoesNotFireRepeatedly
=== CONT  TestIntegration_StatusEndpoint_IncludesPricing
=== CONT  TestPromoteToken_NoEventOnNoop
=== CONT  TestOn_SingleHandler_Called
=== CONT  TestIntegration_StatusEndpoint_NoPricingWithoutRateFunc
=== CONT  TestIntegration_PromotedToken_ServesRequestSuccessfully
=== CONT  TestPromoteToken_ReapDoesNotEvictPromotedToken
--- PASS: TestQuoteCost_AlreadyAtOrAheadOfTarget (0.00s)
=== CONT  TestEvent_String
--- PASS: TestQuoteCost_InvalidTargetPosition (0.00s)
=== CONT  TestQuoteCost_AlreadyAdmitted
=== CONT  TestPromoteToken_TokenNotFound
=== RUN   TestEvent_String/Enter
--- PASS: TestQuoteCost_NoRateFunc_ReturnsDisabled (0.00s)
--- PASS: TestPromoteToken_AlreadyAhead_Noop (0.00s)
=== CONT  TestQuoteCost_SurgeRateUsesQueueDepth
=== CONT  TestSetPassDuration_Zero_DisablesPasses
=== CONT  TestPromoteToken_ConcurrentPromotions_NoCollision
--- PASS: TestQuoteCost_CorrectCalculation_FlatRate (0.00s)
--- PASS: TestGrantPass_ReturnsEmptyWhenDisabled (0.00s)
=== CONT  TestSnapshot_ReflectsLiveState
--- PASS: TestPromoteToken_QueueMovedBetweenQuoteAndPromote (0.00s)
=== CONT  TestConcurrent_OnAndEmit
=== CONT  TestSetPassDuration_ValidRange
=== PAUSE TestEvent_String/Enter
=== CONT  TestRateFuncLoad_DefaultIsNil
=== RUN   TestEvent_String/Exit
=== PAUSE TestEvent_String/Exit
=== RUN   TestEvent_String/Full
=== CONT  TestSetPassDuration_InvalidRange
=== CONT  TestPromoteTokenToFront_JumpsToPositionOne
=== CONT  TestConcurrent_OnOffEmit_AllEvents
=== CONT  TestPromoteToken_ExpiredPromotedToken_Reaped
=== CONT  TestEmit_SnapshotDeliveredCorrectly
=== CONT  TestQuoteCost_DoesNotMutateState
=== CONT  TestPromoteToken_SetsPromotedFlag
=== CONT  TestOff_DoesNotAffectOtherEvents
=== CONT  TestHasValidPass_ExpiredPass
=== CONT  TestIntegration_EventDrain_OnlyFiresOnTransition
=== CONT  TestPromoteToken_InvalidTargetPosition
=== CONT  TestIntegration_StatusEndpoint_HidesPricingWhenPassActive
=== CONT  TestSnapshot_Full
=== CONT  TestHasValidPass_LivePass
--- PASS: TestPromoteToken_MovesToIntermediate (0.00s)
=== CONT  TestQuoteCost_TokenNotFound
=== CONT  TestSetRateFunc_StoresAndLoads
=== PAUSE TestEvent_String/Full
=== CONT  TestPromoteToken_NoRateFunc_ReturnsDisabled
=== CONT  TestHasValidPass_NonexistentToken
=== CONT  TestOn_MultipleHandlers_AllCalled
--- PASS: TestPromoteToken_MovesToFront (0.00s)
=== RUN   TestEvent_String/Drain
--- PASS: TestPromoteToken_AlreadyAdmitted (0.00s)
=== PAUSE TestEvent_String/Drain
--- PASS: TestConcurrent_OffAndEmit (0.00s)
=== RUN   TestEvent_String/Queue
--- PASS: TestSetRateFunc_NilDisablesPromotions (0.00s)
=== PAUSE TestEvent_String/Queue
=== RUN   TestEvent_String/Evict
--- PASS: TestEmit_NoHandlers_IsNoop (0.00s)
--- PASS: TestAutoPromote_WithValidPass (0.00s)
--- PASS: TestQuoteCost_AlreadyAdmitted (0.00s)
=== PAUSE TestEvent_String/Evict
--- PASS: TestPromoteToken_NoPassWhenDisabled (0.00s)
=== RUN   TestEvent_String/Timeout
--- PASS: TestAutoPromote_MissingToken (0.00s)
=== PAUSE TestEvent_String/Timeout
--- PASS: TestSetPassDuration_Zero_DisablesPasses (0.00s)
=== RUN   TestEvent_String/Promote
--- PASS: TestPromoteToken_ReturnsCost (0.00s)
=== PAUSE TestEvent_String/Promote
--- PASS: TestQuoteCost_SurgeRateUsesQueueDepth (0.00s)
--- PASS: TestAutoPromote_SkipsAlreadyPromoted (0.00s)
=== RUN   TestEvent_String/Unknown
=== PAUSE TestEvent_String/Unknown
--- PASS: TestPromoteToken_IssuesPassWhenConfigured (0.00s)
=== CONT  TestEvent_String/Full
=== CONT  TestEvent_String/Queue
=== CONT  TestEvent_String/Drain
=== CONT  TestEvent_String/Enter
--- PASS: TestHasValidPass_EmptyToken (0.00s)
=== CONT  TestEvent_String/Exit
=== CONT  TestEvent_String/Unknown
=== CONT  TestEvent_String/Promote
=== CONT  TestEvent_String/Evict
=== CONT  TestEvent_String/Timeout
--- PASS: TestPromoteToken_SerializedUnderMutex (0.00s)
--- PASS: TestAutoPromote_NoopWhenInServingWindow (0.00s)
--- PASS: TestPromoteToken_ReapDoesNotEvictPromotedToken (0.00s)
--- PASS: TestGrantPass_ReturnsTokenWhenConfigured (0.00s)
--- PASS: TestSetPassDuration_InvalidRange (0.00s)
--- PASS: TestRateFuncLoad_DefaultIsNil (0.00s)
--- PASS: TestSetPassDuration_ValidRange (0.00s)
--- PASS: TestPromoteToken_ExpiredPromotedToken_Reaped (0.00s)
--- PASS: TestPromoteTokenToFront_JumpsToPositionOne (0.00s)
--- PASS: TestPromoteToken_TokenNotFound (0.00s)
--- PASS: TestPromoteToken_SetsPromotedFlag (0.00s)
--- PASS: TestHasValidPass_ExpiredPass (0.00s)
--- PASS: TestQuoteCost_DoesNotMutateState (0.00s)
--- PASS: TestEmit_SnapshotDeliveredCorrectly (0.00s)
--- PASS: TestPromoteToken_ConcurrentPromotions_NoCollision (0.00s)
--- PASS: TestPromoteToken_InvalidTargetPosition (0.00s)
--- PASS: TestSnapshot_Full (0.00s)
--- PASS: TestQuoteCost_TokenNotFound (0.00s)
--- PASS: TestSetRateFunc_StoresAndLoads (0.00s)
--- PASS: TestIntegration_StatusEndpoint_IncludesPricing (0.00s)
--- PASS: TestSnapshot_ReflectsLiveState (0.00s)
--- PASS: TestIntegration_StatusEndpoint_NoPricingWithoutRateFunc (0.01s)
--- PASS: TestIntegration_EventDrain_FiredAfterRelease (0.01s)
--- PASS: TestPromoteToken_FiresEventPromote (0.01s)
--- PASS: TestHasValidPass_LivePass (0.00s)
--- PASS: TestPromoteToken_NoRateFunc_ReturnsDisabled (0.00s)
--- PASS: TestHasValidPass_NonexistentToken (0.00s)
--- PASS: TestIntegration_PromotedToken_ServesRequestSuccessfully (0.01s)
--- PASS: TestConcurrent_OnOffEmit_AllEvents (0.00s)
--- PASS: TestIntegration_EventFull_FiredWhenRoomFull (0.01s)
--- PASS: TestOn_SingleHandler_Called (0.01s)
--- PASS: TestIntegration_StatusEndpoint_HidesPricingWhenPassActive (0.00s)
--- PASS: TestConcurrent_OnAndEmit (0.01s)
--- PASS: TestEvent_String (0.01s)
    --- PASS: TestEvent_String/Full (0.00s)
    --- PASS: TestEvent_String/Queue (0.00s)
    --- PASS: TestEvent_String/Enter (0.00s)
    --- PASS: TestEvent_String/Drain (0.00s)
    --- PASS: TestEvent_String/Exit (0.00s)
    --- PASS: TestEvent_String/Unknown (0.00s)
    --- PASS: TestEvent_String/Promote (0.00s)
    --- PASS: TestEvent_String/Evict (0.00s)
    --- PASS: TestEvent_String/Timeout (0.00s)
--- PASS: TestOn_MultipleHandlers_AllCalled (0.01s)
--- PASS: TestOn_DifferentEvents_DoNotCross (0.02s)
--- PASS: TestOff_DoesNotAffectOtherEvents (0.03s)
--- PASS: TestOff_RemovesAllHandlers (0.03s)
--- PASS: TestPromoteToken_NoEventOnNoop (0.05s)
--- PASS: TestIntegration_EventFull_DoesNotFireRepeatedly (0.05s)
--- PASS: TestPromoteToken_NoEventOnError (0.05s)
--- PASS: TestIntegration_EventDrain_OnlyFiresOnTransition (0.11s)
--- PASS: TestIntegration_PromotedToken_AdmittedOnNextPoll (1.05s)
=== RUN   FuzzWaitingRoom
=== RUN   FuzzWaitingRoom/seed#0
=== RUN   FuzzWaitingRoom/seed#1
=== RUN   FuzzWaitingRoom/seed#2
--- PASS: FuzzWaitingRoom (0.01s)
    --- PASS: FuzzWaitingRoom/seed#0 (0.00s)
    --- PASS: FuzzWaitingRoom/seed#1 (0.00s)
    --- PASS: FuzzWaitingRoom/seed#2 (0.01s)
PASS
ok  	github.com/andreimerlescu/room	3.629s
?   	github.com/andreimerlescu/room/sample/basic-web-app	[no test files]
go test -fuzz=FuzzWaitingRoom -fuzztime=30s .
fuzz: elapsed: 0s, gathering baseline coverage: 0/344 completed
fuzz: elapsed: 0s, gathering baseline coverage: 344/344 completed, now fuzzing with 28 workers
fuzz: elapsed: 3s, execs: 14988 (4996/sec), new interesting: 25 (total: 369)
fuzz: elapsed: 6s, execs: 32535 (5849/sec), new interesting: 27 (total: 371)
fuzz: elapsed: 9s, execs: 51640 (6368/sec), new interesting: 28 (total: 372)
fuzz: elapsed: 12s, execs: 69805 (6055/sec), new interesting: 29 (total: 373)
fuzz: elapsed: 15s, execs: 88362 (6186/sec), new interesting: 30 (total: 374)
fuzz: elapsed: 18s, execs: 106800 (6147/sec), new interesting: 30 (total: 374)
fuzz: elapsed: 21s, execs: 125700 (6299/sec), new interesting: 30 (total: 374)
fuzz: elapsed: 24s, execs: 143964 (6087/sec), new interesting: 30 (total: 374)
fuzz: elapsed: 27s, execs: 163018 (6353/sec), new interesting: 30 (total: 374)
fuzz: elapsed: 30s, execs: 181820 (6268/sec), new interesting: 30 (total: 374)
fuzz: elapsed: 30s, execs: 181820 (0/sec), new interesting: 30 (total: 374)
PASS
ok  	github.com/andreimerlescu/room	35.847s
go test -bench=. -benchmem ./...
goos: darwin
goarch: arm64
pkg: github.com/andreimerlescu/room
cpu: Apple M3 Ultra
BenchmarkQuoteCost-28              	84153507	        14.28 ns/op	       0 B/op	       0 allocs/op
BenchmarkPromoteToken-28           	 3521113	       389.8 ns/op	     255 B/op	       2 allocs/op
BenchmarkPromoteTokenToFront-28    	 3554641	       390.4 ns/op	     265 B/op	       2 allocs/op
BenchmarkGrantPass-28              	 2572190	       485.1 ns/op	     188 B/op	       1 allocs/op
BenchmarkHasValidPass-28           	27536672	        42.37 ns/op	       0 B/op	       0 allocs/op
BenchmarkFastPath-28               	  414999	      3183 ns/op	    5326 B/op	      13 allocs/op
BenchmarkQueueDepth-28             	1000000000	         0.6310 ns/op	       0 B/op	       0 allocs/op
BenchmarkUtilizationSmoothed-28    	1000000000	         0.8454 ns/op	       0 B/op	       0 allocs/op
PASS
ok  	github.com/andreimerlescu/room	19.242s
?   	github.com/andreimerlescu/room/sample/basic-web-app	[no test files]

@andreimerlescu andreimerlescu self-assigned this Apr 13, 2026
@andreimerlescu andreimerlescu added the enhancement New feature or request label Apr 13, 2026
@andreimerlescu andreimerlescu merged commit 83a3eef into main Apr 13, 2026
1 check passed
@andreimerlescu andreimerlescu deleted the feature/paywall branch April 13, 2026 22:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant