@Test
public void testRetryUpToMaximumCountWithFixedSleep() throws
    Exception {

  RetryPolicy policy = mock(RetryUpToMaximumCountWithFixedSleep.class);
  int maxRetries = 8;
  RetryPolicy realPolicy = retryUpToMaximumCountWithFixedSleep(maxRetries, 1,
      TimeUnit.NANOSECONDS);
  setupMockPolicy(policy, realPolicy);
  UnreliableInterface unreliable = (UnreliableInterface)
    RetryProxy.create(UnreliableInterface.class, unreliableImpl, policy);
  // shouldRetry += 1
  unreliable.alwaysSucceeds();
  // shouldRetry += 2
  unreliable.failsOnceThenSucceeds();
  try {
    // shouldRetry += (maxRetries -1) (just failed once above)
    unreliable.failsTenTimesThenSucceeds();
    fail("Should fail");
  } catch (UnreliableException e) {
    // expected
    verify(policy, times(maxRetries + 2)).shouldRetry(any(Exception.class),
        anyInt(), anyInt(), anyBoolean());
    assertEquals(RetryDecision.FAIL, caughtRetryAction.action);
    assertEquals(RetryUpToMaximumCountWithFixedSleep.constructReasonString(
        maxRetries), caughtRetryAction.reason);
  } catch (Exception e) {
    fail("Other exception other than UnreliableException should also get " +
        "failed.");
  }
}