Testing PhasedBackoffWaitStrategy Timing Behavior in LMAX-Disruptor
This test suite validates the PhasedBackoffWaitStrategy implementation in the LMAX Disruptor library, focusing on sequence change handling with various delay scenarios. The tests verify both lock-based and sleep-based wait strategies under different timing conditions.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
lmax-exchange/disruptor
src/test/java/com/lmax/disruptor/PhasedBackoffWaitStrategyTest.java
/*
* Copyright 2012 LMAX Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.lmax.disruptor;
import org.junit.jupiter.api.Test;
import static com.lmax.disruptor.support.WaitStrategyTestUtil.assertWaitForWithDelayOf;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
public class PhasedBackoffWaitStrategyTest
{
@Test
public void shouldHandleImmediateSequenceChange() throws Exception
{
assertWaitForWithDelayOf(0, PhasedBackoffWaitStrategy.withLock(1, 1, MILLISECONDS));
assertWaitForWithDelayOf(0, PhasedBackoffWaitStrategy.withSleep(1, 1, MILLISECONDS));
}
@Test
public void shouldHandleSequenceChangeWithOneMillisecondDelay() throws Exception
{
assertWaitForWithDelayOf(1, PhasedBackoffWaitStrategy.withLock(1, 1, MILLISECONDS));
assertWaitForWithDelayOf(1, PhasedBackoffWaitStrategy.withSleep(1, 1, MILLISECONDS));
}
@Test
public void shouldHandleSequenceChangeWithTwoMillisecondDelay() throws Exception
{
assertWaitForWithDelayOf(2, PhasedBackoffWaitStrategy.withLock(1, 1, MILLISECONDS));
assertWaitForWithDelayOf(2, PhasedBackoffWaitStrategy.withSleep(1, 1, MILLISECONDS));
}
@Test
public void shouldHandleSequenceChangeWithTenMillisecondDelay() throws Exception
{
assertWaitForWithDelayOf(10, PhasedBackoffWaitStrategy.withLock(1, 1, MILLISECONDS));
assertWaitForWithDelayOf(10, PhasedBackoffWaitStrategy.withSleep(1, 1, MILLISECONDS));
}
}