Package net.jodah.lyra.internal

Source Code of net.jodah.lyra.internal.RecurringStatsTest

package net.jodah.lyra.internal;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import net.jodah.lyra.config.RetryPolicy;
import net.jodah.lyra.util.Duration;

import org.testng.annotations.Test;

/**
* @author Jonathan Halterman
*/
@Test
public class RecurringStatsTest {
  public void shouldAttemptForeverWithDefaultPolicy() throws Exception {
    RecurringStats stats = new RecurringStats(new RetryPolicy());
    stats.incrementAttempts();
    assertFalse(stats.isPolicyExceeded());
    Thread.sleep(50);
    stats.incrementAttempts();
    assertFalse(stats.isPolicyExceeded());
  }

  public void shouldNotAttemptWhenMaxAttemptsExceeded() throws Exception {
    RecurringStats stats = new RecurringStats(new RetryPolicy().withMaxAttempts(3));
    stats.incrementAttempts();
    stats.incrementAttempts();
    assertFalse(stats.isPolicyExceeded());
    stats.incrementAttempts();
    assertTrue(stats.isPolicyExceeded());
  }

  public void shouldNotAttemptWhenMaxDurationExceeded() throws Exception {
    RecurringStats stats = new RecurringStats(new RetryPolicy().withMaxDuration(Duration.millis(25)));
    stats.incrementTime();
    assertFalse(stats.isPolicyExceeded());
    assertFalse(stats.isPolicyExceeded());
    Thread.sleep(50);
    assertTrue(stats.isPolicyExceeded());
  }

  public void shouldAdjustWaitTimeForMaxDuration() throws Throwable {
    RecurringStats stats = new RecurringStats(new RetryPolicy().withInterval(Duration.millis(150))
        .withMaxDuration(Duration.millis(100)));
    stats.incrementTime();
    assertFalse(stats.isPolicyExceeded());
    assertEquals(stats.getWaitTime().toMillis(), 100);
    Thread.sleep(25);
    stats.incrementTime();
    assertFalse(stats.isPolicyExceeded());
    assertTrue(stats.getWaitTime().toMillis() < 100);
  }

  public void waitTimeShouldDefaultToZero() {
    RecurringStats stats = new RecurringStats(new RetryPolicy());
    assertEquals(stats.getWaitTime().toMillis(), 0);
    stats.incrementAttempts();
    assertEquals(stats.getWaitTime().toMillis(), 0);
  }

  public void waitTimeShouldBeConstant() {
    RecurringStats stats = new RecurringStats(new RetryPolicy().withInterval(Duration.millis(5)));
    assertEquals(stats.getWaitTime().toMillis(), 5);
    stats.incrementAttempts();
    assertEquals(stats.getWaitTime().toMillis(), 5);
  }

  public void waitTimeShouldIncreaseExponentially() throws Exception {
    RecurringStats stats = new RecurringStats(new RetryPolicy().withBackoff(Duration.millis(1),
        Duration.millis(5)));
    stats.incrementTime();
    assertEquals(stats.getWaitTime().toMillis(), 1);
    stats.incrementTime();
    assertEquals(stats.getWaitTime().toMillis(), 2);
    stats.incrementTime();
    assertEquals(stats.getWaitTime().toMillis(), 4);
    stats.incrementTime();
    assertEquals(stats.getWaitTime().toMillis(), 5);
    stats.incrementTime();
    assertEquals(stats.getWaitTime().toMillis(), 5);
  }
}
TOP

Related Classes of net.jodah.lyra.internal.RecurringStatsTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.