Package com.nurkiewicz.asyncretry.policy

Source Code of com.nurkiewicz.asyncretry.policy.RetryPolicyPredicatesTest

package com.nurkiewicz.asyncretry.policy;

import com.nurkiewicz.asyncretry.AsyncRetryContext;
import com.nurkiewicz.asyncretry.RetryContext;
import org.mockito.Mock;
import org.testng.annotations.Test;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;

/**
* @author Tomasz Nurkiewicz
* @since 7/20/13, 5:17 PM
*/
public class RetryPolicyPredicatesTest extends AbstractRetryPolicyTest {

  @Mock
  private RetryContext retryContextMock;

  @Test
  public void shouldAbortIfAbortPredicateTrue() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().abortIf(t -> true);

    //when
    final boolean shouldRetry = retryPolicy.shouldContinue(retryContextMock);

    //then
    assertThat(shouldRetry).isFalse();
  }

  @Test
  public void shouldRetryIfRetryPredicateTrue() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().retryIf(t -> true);

    //when
    final boolean shouldRetry = retryPolicy.shouldContinue(retryContextMock);

    //then
    assertThat(shouldRetry).isTrue();
  }

  @Test
  public void shouldRetryIfBothPredicatesAbstainButClassShouldRetry() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().
        retryIf(t -> false).
        abortIf(t -> false);
    given(retryContextMock.getLastThrowable()).willReturn(new RuntimeException());

    //when
    final boolean shouldRetry = retryPolicy.shouldContinue(retryContextMock);

    //then
    assertThat(shouldRetry).isTrue();
  }

  @Test
  public void shouldAbortIfBothPredicatesAbstainButClassShouldAbort() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().
        abortOn(NullPointerException.class).
        retryIf(t -> false).
        abortIf(t -> false);
    given(retryContextMock.getLastThrowable()).willReturn(new NullPointerException());

    //when
    final boolean shouldRetry = retryPolicy.shouldContinue(retryContextMock);

    //then
    assertThat(shouldRetry).isFalse();
  }

  @Test
  public void shouldRetryIfPredicateTrueEvenIfClassShouldAbort() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().
        abortOn(NullPointerException.class).
        retryIf(t -> true);
    given(retryContextMock.getLastThrowable()).willReturn(new NullPointerException());

    //when
    final boolean shouldRetry = retryPolicy.shouldContinue(retryContextMock);

    //then
    assertThat(shouldRetry).isTrue();
  }

  @Test
  public void shouldAbortIfPredicateTrueEvenIfClassShouldRetry() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().
        retryOn(NullPointerException.class).
        abortIf(t -> true);
    given(retryContextMock.getLastThrowable()).willReturn(new NullPointerException());

    //when
    final boolean shouldRetry = retryPolicy.shouldContinue(retryContextMock);

    //then
    assertThat(shouldRetry).isFalse();
  }

  @Test
  public void whenAbortAndRetryPredicatesBothYieldTrueThenAbortWins() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().
        retryOn(NullPointerException.class).
        retryIf(t -> t.getMessage().contains("Foo")).
        abortIf(t -> t.getMessage().contains("Foo"));
    given(retryContextMock.getLastThrowable()).willReturn(new NullPointerException("Foo"));

    //when
    final boolean shouldRetry = retryPolicy.shouldContinue(retryContextMock);

    //then
    assertThat(shouldRetry).isFalse();
  }

  @Test
  public void shouldProceedIfPredicateFalseAndChildAccepts() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().abortIf(t -> false);
    given(retryContextMock.getLastThrowable()).willReturn(new RuntimeException());

    //when
    final boolean shouldRetry = retryPolicy.shouldContinue(retryContextMock);

    //then
    assertThat(shouldRetry).isTrue();
  }

  @Test
  public void shouldAbortIfPredicateFalseButShouldNotRetry() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().abortIf(t -> false).dontRetry();

    //when
    final boolean shouldRetry = retryPolicy.shouldContinue(retryContextMock);

    //then
    assertThat(shouldRetry).isFalse();
  }

  @Test
  public void shouldAbortIfPredicateTrueButShouldNotRetry() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().
        retryIf(t -> true).
        dontRetry();
    given(retryContextMock.getLastThrowable()).willReturn(new NullPointerException());
    given(retryContextMock.getRetryCount()).willReturn(1);

    //when
    final boolean shouldRetry = retryPolicy.shouldContinue(retryContextMock);

    //then
    assertThat(shouldRetry).isFalse();
  }

  @Test
  public void shouldExamineExceptionAndDecide() throws Exception {
    //given
    final RetryPolicy retryPolicy = new RetryPolicy().abortIf(t -> t.getMessage().contains("abort"));

    //when
    final boolean abort = retryPolicy.shouldContinue(new AsyncRetryContext(retryPolicy, 1, new RuntimeException("abort")));
    final boolean retry = retryPolicy.shouldContinue(new AsyncRetryContext(retryPolicy, 1, new RuntimeException("normal")));

    //then
    assertThat(abort).isFalse();
    assertThat(retry).isTrue();
  }

}
TOP

Related Classes of com.nurkiewicz.asyncretry.policy.RetryPolicyPredicatesTest

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.