package com.lambdaworks.redis.resource;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
/**
* @author Jongyeol Choi
*/
public class DecorrelatedJitterDelayTest {
@Test(expected = IllegalArgumentException.class)
public void shouldNotCreateIfLowerBoundIsNegative() throws Exception {
Delay.decorrelatedJitter(-1, 100, 0, TimeUnit.MILLISECONDS);
}
@Test(expected = IllegalArgumentException.class)
public void shouldNotCreateIfLowerBoundIsSameAsUpperBound() throws Exception {
Delay.decorrelatedJitter(100, 100, 1, TimeUnit.MILLISECONDS);
}
@Test
public void negativeAttemptShouldReturnZero() throws Exception {
Delay delay = Delay.decorrelatedJitter().get();
assertThat(delay.createDelay(-1)).isEqualTo(0);
}
@Test
public void zeroShouldReturnZero() throws Exception {
Delay delay = Delay.decorrelatedJitter().get();
assertThat(delay.createDelay(0)).isEqualTo(0);
}
@Test
public void testDefaultDelays() throws Exception {
Delay delay = Delay.decorrelatedJitter().get();
assertThat(delay.getTimeUnit()).isEqualTo(TimeUnit.MILLISECONDS);
for (int i = 0; i < 1000; i++) {
assertThat(delay.createDelay(1)).isBetween(0L, 1L);
assertThat(delay.createDelay(2)).isBetween(0L, 3L);
assertThat(delay.createDelay(3)).isBetween(0L, 9L);
assertThat(delay.createDelay(4)).isBetween(0L, 27L);
assertThat(delay.createDelay(5)).isBetween(0L, 81L);
assertThat(delay.createDelay(6)).isBetween(0L, 243L);
assertThat(delay.createDelay(7)).isBetween(0L, 729L);
assertThat(delay.createDelay(8)).isBetween(0L, 2187L);
assertThat(delay.createDelay(9)).isBetween(0L, 6561L);
assertThat(delay.createDelay(10)).isBetween(0L, 19683L);
assertThat(delay.createDelay(11)).isBetween(0L, 30000L);
assertThat(delay.createDelay(Integer.MAX_VALUE)).isBetween(0L, 30000L);
}
}
}