package com.bazaarvoice.ostrich.retry; import com.bazaarvoice.ostrich.RetryPolicy; import org.junit.Test; import java.util.Random; import java.util.concurrent.TimeUnit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class RetryNTimesTest { @Test(expected = IllegalArgumentException.class) public void testNegativeNumberOfTimes() { new RetryNTimes(-1); } @Test(expected = IllegalArgumentException.class) public void testNegativeSleepTime() { new RetryNTimes(1, -1, TimeUnit.MILLISECONDS); } @Test public void testPositiveSleepTime() { RetryNTimes retry = new RetryNTimes(1, 123, TimeUnit.MILLISECONDS); assertEquals(123, retry.getSleepTimeMs(1, 0)); assertEquals(123, retry.getSleepTimeMs(1, 1)); } @Test public void testPositiveSleepUnits() { RetryNTimes retry = new RetryNTimes(1, 123, TimeUnit.SECONDS); assertEquals(TimeUnit.SECONDS.toMillis(123), retry.getSleepTimeMs(1, 0)); } @Test(expected = IllegalArgumentException.class) public void testZeroNAttempts() { RetryPolicy retry = new RetryNTimes(0); retry.allowRetry(0, 0); } @Test public void testRetryMaxZeroAttempts() { RetryPolicy retry = new RetryNTimes(0); assertFalse(retry.allowRetry(1, 0)); } @Test public void testRetryMaxOneAttempt() { RetryPolicy retry = new RetryNTimes(1); assertFalse(retry.allowRetry(1, 0)); } @Test public void testRetryMaxTwoAttempts() { RetryPolicy retry = new RetryNTimes(2); assertTrue(retry.allowRetry(1, 0)); assertFalse(retry.allowRetry(2, 0)); } @Test public void testRetryRandomTimes() { Random rnd = new Random(); int N = rnd.nextInt(1000) + 1; RetryPolicy retry = new RetryNTimes(N); for(int i = 1; i < N; i++) { assertTrue(retry.allowRetry(i, 0)); } assertFalse(retry.allowRetry(N, 0)); } }