package com.lambdaworks.redis.resource;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
/**
* @author Mark Paluch
*/
public class ExponentialDelayTest {
@Test(expected = IllegalArgumentException.class)
public void shouldNotCreateIfLowerBoundIsNegative() throws Exception {
Delay.exponential(-1, 100, TimeUnit.MILLISECONDS, 10);
}
@Test(expected = IllegalArgumentException.class)
public void shouldNotCreateIfLowerBoundIsSameAsUpperBound() throws Exception {
Delay.exponential(100, 100, TimeUnit.MILLISECONDS, 10);
}
@Test(expected = IllegalArgumentException.class)
public void shouldNotCreateIfPowerIsOne() throws Exception {
Delay.exponential(100, 1000, TimeUnit.MILLISECONDS, 1);
}
@Test
public void negativeAttemptShouldReturnZero() throws Exception {
Delay delay = Delay.exponential();
assertThat(delay.createDelay(-1)).isEqualTo(0);
}
@Test
public void zeroShouldReturnZero() throws Exception {
Delay delay = Delay.exponential();
assertThat(delay.createDelay(0)).isEqualTo(0);
}
@Test
public void testDefaultDelays() throws Exception {
Delay delay = Delay.exponential();
assertThat(delay.getTimeUnit()).isEqualTo(TimeUnit.MILLISECONDS);
assertThat(delay.createDelay(1)).isEqualTo(1);
assertThat(delay.createDelay(2)).isEqualTo(2);
assertThat(delay.createDelay(3)).isEqualTo(4);
assertThat(delay.createDelay(4)).isEqualTo(8);
assertThat(delay.createDelay(5)).isEqualTo(16);
assertThat(delay.createDelay(6)).isEqualTo(32);
assertThat(delay.createDelay(7)).isEqualTo(64);
assertThat(delay.createDelay(8)).isEqualTo(128);
assertThat(delay.createDelay(9)).isEqualTo(256);
assertThat(delay.createDelay(10)).isEqualTo(512);
assertThat(delay.createDelay(11)).isEqualTo(1024);
assertThat(delay.createDelay(12)).isEqualTo(2048);
assertThat(delay.createDelay(13)).isEqualTo(4096);
assertThat(delay.createDelay(14)).isEqualTo(8192);
assertThat(delay.createDelay(15)).isEqualTo(16384);
assertThat(delay.createDelay(16)).isEqualTo(30000);
assertThat(delay.createDelay(17)).isEqualTo(30000);
assertThat(delay.createDelay(Integer.MAX_VALUE)).isEqualTo(30000);
}
@Test
public void testPow10Delays() throws Exception {
Delay delay = Delay.exponential(100, 10000, TimeUnit.MILLISECONDS, 10);
assertThat(delay.createDelay(1)).isEqualTo(100);
assertThat(delay.createDelay(2)).isEqualTo(100);
assertThat(delay.createDelay(3)).isEqualTo(100);
assertThat(delay.createDelay(4)).isEqualTo(1000);
assertThat(delay.createDelay(5)).isEqualTo(10000);
assertThat(delay.createDelay(Integer.MAX_VALUE)).isEqualTo(10000);
}
}