package com.linkedin.parseq.retry;
import com.linkedin.parseq.BaseEngineTest;
import com.linkedin.parseq.retry.termination.TerminationPolicy;
import org.testng.annotations.Test;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.assertFalse;
public class TestTerminationPolicy extends BaseEngineTest {
@Test
public void testLimitAttempts()
{
TerminationPolicy policy = TerminationPolicy.limitAttempts(10);
assertFalse(policy.shouldTerminate(0, 0));
assertFalse(policy.shouldTerminate(9, 0));
assertTrue(policy.shouldTerminate(10, 0));
assertTrue(policy.shouldTerminate(100, 0));
}
@Test
public void testLimitDuration()
{
TerminationPolicy policy = TerminationPolicy.limitDuration(100);
assertFalse(policy.shouldTerminate(10, 0));
assertFalse(policy.shouldTerminate(0, 99));
assertTrue(policy.shouldTerminate(10, 100));
assertTrue(policy.shouldTerminate(0, 200));
}
@Test
public void testRequireBoth()
{
TerminationPolicy policy = TerminationPolicy.requireBoth(TerminationPolicy.limitAttempts(10), TerminationPolicy.limitDuration(100));
assertFalse(policy.shouldTerminate(20, 0));
assertFalse(policy.shouldTerminate(0, 200));
assertFalse(policy.shouldTerminate(9, 99));
assertFalse(policy.shouldTerminate(9, 100));
assertFalse(policy.shouldTerminate(10, 99));
assertTrue(policy.shouldTerminate(10, 100));
assertTrue(policy.shouldTerminate(20, 100));
assertTrue(policy.shouldTerminate(10, 200));
}
@Test
public void testRequireEither()
{
TerminationPolicy policy = TerminationPolicy.requireEither(TerminationPolicy.limitAttempts(10), TerminationPolicy.limitDuration(100));
assertFalse(policy.shouldTerminate(0, 0));
assertFalse(policy.shouldTerminate(0, 99));
assertFalse(policy.shouldTerminate(9, 0));
assertFalse(policy.shouldTerminate(9, 99));
assertTrue(policy.shouldTerminate(10, 99));
assertTrue(policy.shouldTerminate(9, 100));
assertTrue(policy.shouldTerminate(20, 100));
assertTrue(policy.shouldTerminate(10, 200));
}
@Test
public void testAlwaysTerminate()
{
TerminationPolicy policy = TerminationPolicy.alwaysTerminate();
assertTrue(policy.shouldTerminate(0, 0));
assertTrue(policy.shouldTerminate(10, 0));
assertTrue(policy.shouldTerminate(0, 100));
}
@Test
public void testNeverTerminate()
{
TerminationPolicy policy = TerminationPolicy.neverTerminate();
assertFalse(policy.shouldTerminate(0, 0));
assertFalse(policy.shouldTerminate(10, 0));
assertFalse(policy.shouldTerminate(0, 100));
}
}