package com.nurkiewicz.asyncretry.backoff; import com.nurkiewicz.asyncretry.AbstractBaseTestCase; import org.testng.annotations.Test; import static org.assertj.core.api.Assertions.assertThat; /** * @author Tomasz Nurkiewicz * @since 7/20/13, 6:32 PM */ public class BoundedMinBackoffTest extends AbstractBaseTestCase { @Test public void shouldReturnOriginalBackoffDelayIfAboveMin() throws Exception { final Backoff backoff = new ExponentialDelayBackoff(1000, 2.0).withMinDelay(); assertThat(backoff.delayMillis(retry(1))).isEqualTo(1000); assertThat(backoff.delayMillis(retry(2))).isEqualTo(2000); assertThat(backoff.delayMillis(retry(3))).isEqualTo(4000); assertThat(backoff.delayMillis(retry(4))).isEqualTo(8000); } @Test public void shouldCapBackoffAtDefaultLevel() throws Exception { final Backoff backoff = new ExponentialDelayBackoff(1, 2.0).withMinDelay(); assertThat(backoff.delayMillis(retry(1))).isEqualTo(BoundedMinBackoff.DEFAULT_MIN_DELAY_MILLIS); } @Test public void shouldCapBackoffAtGivenLevel() throws Exception { final Backoff backoff = new ExponentialDelayBackoff(1, 2.0).withMaxDelay(250); assertThat(backoff.delayMillis(retry(100))).isEqualTo(250); } @Test public void shouldApplyBothMinAndMaxBound() throws Exception { final Backoff backoff = new ExponentialDelayBackoff(1, 2.0). withMinDelay(5). withMaxDelay(10); assertThat(backoff.delayMillis(retry(2))).isEqualTo(5); assertThat(backoff.delayMillis(retry(3))).isEqualTo(5); assertThat(backoff.delayMillis(retry(4))).isEqualTo(8); assertThat(backoff.delayMillis(retry(5))).isEqualTo(10); } }