Search in sources :

Example 1 with Waiter

use of net.jodah.concurrentunit.Waiter in project failsafe by jhalterman.

the class Issue5 method test.

/**
   * Asserts that a failure is handled as expected by a listener registered via whenFailure.
   */
public void test() throws Throwable {
    Waiter waiter = new Waiter();
    RetryPolicy retryPolicy = new RetryPolicy().withDelay(100, TimeUnit.MILLISECONDS).withMaxDuration(2, TimeUnit.SECONDS).withMaxRetries(3).retryWhen(null);
    ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
    Failsafe.with(retryPolicy).with(executor).onFailure((result, failure) -> {
        waiter.assertNull(result);
        waiter.assertNull(failure);
        waiter.resume();
    }).get(() -> null);
    waiter.await(1000);
}
Also used : TimeUnit(java.util.concurrent.TimeUnit) Waiter(net.jodah.concurrentunit.Waiter) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Test(org.testng.annotations.Test) RetryPolicy(net.jodah.failsafe.RetryPolicy) Executors(java.util.concurrent.Executors) Failsafe(net.jodah.failsafe.Failsafe) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Waiter(net.jodah.concurrentunit.Waiter) RetryPolicy(net.jodah.failsafe.RetryPolicy)

Example 2 with Waiter

use of net.jodah.concurrentunit.Waiter in project failsafe by jhalterman.

the class Issue76 method shouldAbortOnAsyncError.

public void shouldAbortOnAsyncError() throws Exception {
    final AssertionError error = new AssertionError();
    Waiter waiter = new Waiter();
    Future<?> future = Failsafe.with(new RetryPolicy().abortOn(AssertionError.class)).with(Executors.newSingleThreadScheduledExecutor()).onAbort(e -> {
        waiter.assertEquals(e, error);
        waiter.resume();
    }).run(() -> {
        throw error;
    });
    waiter.await(1000);
    try {
        future.get();
        fail();
    } catch (ExecutionException e) {
        assertEquals(e.getCause(), error);
    }
}
Also used : ExecutionException(java.util.concurrent.ExecutionException) Future(java.util.concurrent.Future) Waiter(net.jodah.concurrentunit.Waiter) FailsafeException(net.jodah.failsafe.FailsafeException) Assert.fail(org.testng.Assert.fail) Assert.assertEquals(org.testng.Assert.assertEquals) Test(org.testng.annotations.Test) RetryPolicy(net.jodah.failsafe.RetryPolicy) Executors(java.util.concurrent.Executors) Failsafe(net.jodah.failsafe.Failsafe) Waiter(net.jodah.concurrentunit.Waiter) ExecutionException(java.util.concurrent.ExecutionException) RetryPolicy(net.jodah.failsafe.RetryPolicy)

Example 3 with Waiter

use of net.jodah.concurrentunit.Waiter in project failsafe by jhalterman.

the class Issue9 method test.

public void test() throws Throwable {
    // Given - Fail twice then succeed
    AtomicInteger retryCounter = new AtomicInteger();
    Service service = mock(Service.class);
    when(service.connect()).thenThrow(failures(2, new IllegalStateException())).thenReturn(true);
    ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
    Listeners<Boolean> listeners = new Listeners<Boolean>() {

        public void onRetry(Boolean result, Throwable failure) {
            retryCounter.incrementAndGet();
        }
    };
    Waiter waiter = new Waiter();
    // When
    AtomicInteger successCounter = new AtomicInteger();
    FailsafeFuture<Boolean> future = Failsafe.with(new RetryPolicy().withMaxRetries(2)).with(executor).with(listeners).onSuccess(p -> {
        successCounter.incrementAndGet();
        waiter.resume();
    }).get(() -> service.connect());
    // Then
    waiter.await(1000);
    verify(service, times(3)).connect();
    assertEquals(future.get().booleanValue(), true);
    assertEquals(retryCounter.get(), 2);
    assertEquals(successCounter.get(), 1);
}
Also used : Listeners(net.jodah.failsafe.Listeners) FailsafeFuture(net.jodah.failsafe.FailsafeFuture) Assert.assertEquals(org.testng.Assert.assertEquals) Mockito.times(org.mockito.Mockito.times) Test(org.testng.annotations.Test) RetryPolicy(net.jodah.failsafe.RetryPolicy) Mockito.when(org.mockito.Mockito.when) Executors(java.util.concurrent.Executors) Mockito.verify(org.mockito.Mockito.verify) Failsafe(net.jodah.failsafe.Failsafe) Waiter(net.jodah.concurrentunit.Waiter) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Testing.failures(net.jodah.failsafe.Testing.failures) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Mockito.mock(org.mockito.Mockito.mock) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Listeners(net.jodah.failsafe.Listeners) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Waiter(net.jodah.concurrentunit.Waiter) RetryPolicy(net.jodah.failsafe.RetryPolicy)

Example 4 with Waiter

use of net.jodah.concurrentunit.Waiter in project failsafe by jhalterman.

the class AbstractFailsafeTest method shouldFallbackAfterFailureWithCircuitBreaker.

/**
   * Asserts that fallback works after a failure with a breaker configured.
   */
public void shouldFallbackAfterFailureWithCircuitBreaker() throws Throwable {
    // Given
    CircuitBreaker breaker = new CircuitBreaker().withSuccessThreshold(3).withDelay(1, TimeUnit.MINUTES);
    Exception failure = new ConnectException();
    when(service.connect()).thenThrow(failure);
    Waiter waiter = new Waiter();
    // When / Then
    assertEquals(failsafeGet(breaker, (r, f) -> {
        waiter.assertNull(r);
        waiter.assertEquals(failure, f);
        return false;
    }, () -> service.connect()), Boolean.FALSE);
    verify(service).connect();
    // Given
    reset(service);
    breaker.close();
    when(service.connect()).thenThrow(failure);
    // When / Then
    assertThrows(() -> failsafeGet(breaker, (r, f) -> {
        waiter.assertNull(r);
        waiter.assertEquals(failure, f);
        throw new RuntimeException(f);
    }, () -> service.connect()), RuntimeException.class, ConnectException.class);
    verify(service).connect();
}
Also used : Asserts.assertThrows(net.jodah.failsafe.Asserts.assertThrows) Assert.assertEquals(org.testng.Assert.assertEquals) CheckedRunnable(net.jodah.failsafe.function.CheckedRunnable) Mockito.times(org.mockito.Mockito.times) Callable(java.util.concurrent.Callable) Test(org.testng.annotations.Test) Mockito.when(org.mockito.Mockito.when) Mockito.verify(org.mockito.Mockito.verify) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) Waiter(net.jodah.concurrentunit.Waiter) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Testing.failures(net.jodah.failsafe.Testing.failures) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Mockito.reset(org.mockito.Mockito.reset) CheckedBiFunction(net.jodah.failsafe.function.CheckedBiFunction) Mockito.mock(org.mockito.Mockito.mock) Waiter(net.jodah.concurrentunit.Waiter) ExecutionException(java.util.concurrent.ExecutionException)

Example 5 with Waiter

use of net.jodah.concurrentunit.Waiter in project failsafe by jhalterman.

the class AbstractFailsafeTest method shouldFallbackWhenCircuitBreakerIsOpen.

/**
   * Asserts that fallback works when a circuit breaker is open.
   */
public void shouldFallbackWhenCircuitBreakerIsOpen() throws Throwable {
    // Given
    CircuitBreaker breaker = new CircuitBreaker().withSuccessThreshold(3).withDelay(1, TimeUnit.MINUTES);
    breaker.open();
    Exception failure = new ConnectException();
    when(service.connect()).thenThrow(failure);
    Waiter waiter = new Waiter();
    // When / Then
    assertEquals(failsafeGet(breaker, (r, f) -> {
        waiter.assertNull(r);
        waiter.assertTrue(f instanceof CircuitBreakerOpenException);
        return false;
    }, service::connect), Boolean.FALSE);
    verify(service, times(0)).connect();
}
Also used : Asserts.assertThrows(net.jodah.failsafe.Asserts.assertThrows) Assert.assertEquals(org.testng.Assert.assertEquals) CheckedRunnable(net.jodah.failsafe.function.CheckedRunnable) Mockito.times(org.mockito.Mockito.times) Callable(java.util.concurrent.Callable) Test(org.testng.annotations.Test) Mockito.when(org.mockito.Mockito.when) Mockito.verify(org.mockito.Mockito.verify) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) Waiter(net.jodah.concurrentunit.Waiter) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Testing.failures(net.jodah.failsafe.Testing.failures) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Mockito.reset(org.mockito.Mockito.reset) CheckedBiFunction(net.jodah.failsafe.function.CheckedBiFunction) Mockito.mock(org.mockito.Mockito.mock) Waiter(net.jodah.concurrentunit.Waiter) ExecutionException(java.util.concurrent.ExecutionException)

Aggregations

Waiter (net.jodah.concurrentunit.Waiter)16 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)8 Test (org.testng.annotations.Test)8 Assert.assertEquals (org.testng.Assert.assertEquals)7 ExecutionException (java.util.concurrent.ExecutionException)6 TimeUnit (java.util.concurrent.TimeUnit)6 Executors (java.util.concurrent.Executors)5 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)5 Testing.failures (net.jodah.failsafe.Testing.failures)4 Mockito.mock (org.mockito.Mockito.mock)4 Mockito.times (org.mockito.Mockito.times)4 Mockito.verify (org.mockito.Mockito.verify)4 Mockito.when (org.mockito.Mockito.when)4 Callable (java.util.concurrent.Callable)3 Asserts.assertThrows (net.jodah.failsafe.Asserts.assertThrows)3 Failsafe (net.jodah.failsafe.Failsafe)3 RetryPolicy (net.jodah.failsafe.RetryPolicy)3 CheckedBiFunction (net.jodah.failsafe.function.CheckedBiFunction)3 CheckedRunnable (net.jodah.failsafe.function.CheckedRunnable)3 Mockito.reset (org.mockito.Mockito.reset)3