@Test public void testCallRetriesAndSucceeds() throws Exception { MockSleeper sleeper = new MockSleeper(); ArrayList<Exception> exceptions = new ArrayList<>(); exceptions.add(new SocketTimeoutException("socket")); exceptions.add(new SocketTimeoutException("socket2")); exceptions.add(new SocketTimeoutException("socket3")); CallableTester<Exception> callTester = new CallableTester<>(exceptions); BackOff backoff = new RetryBoundedBackOff(3, new BackOffTester()); assertThat( ResilientOperation.retry( callTester, backoff, RetryDeterminer.DEFAULT, Exception.class, sleeper)) .isEqualTo(3); assertThat(callTester.timesCalled()).isEqualTo(4); verifySleeper(sleeper, 3); }
@Test public void testValidCallHasNoRetries() throws Exception { MockSleeper sleeper = new MockSleeper(); CallableTester<Exception> callTester = new CallableTester<>(new ArrayList<Exception>()); BackOff backoff = new RetryBoundedBackOff(3, new BackOffTester()); ResilientOperation.retry(callTester, backoff, RetryDeterminer.DEFAULT, Exception.class, sleeper); assertThat(callTester.timesCalled()).isEqualTo(1); assertThat(sleeper.getCount()).isEqualTo(0); }
public void verifySleeper(MockSleeper sleeper, int retry) { assertThat(retry).isEqualTo(sleeper.getCount()); if (retry == 0) { return; } assertThat((long) Math.pow(2, retry)).isEqualTo(sleeper.getLastMillis()); }
@Test public void testCallMaxRetries() throws Exception { MockSleeper sleeper = new MockSleeper(); ArrayList<Exception> exceptions = new ArrayList<>(); exceptions.add(new SocketTimeoutException("socket")); exceptions.add(new SocketTimeoutException("socket2")); exceptions.add(new SocketTimeoutException("socket3")); CallableTester<Exception> callTester = new CallableTester<>(exceptions); BackOff backoff = new RetryBoundedBackOff(2, new BackOffTester()); SocketTimeoutException thrown = assertThrows( SocketTimeoutException.class, () -> ResilientOperation.retry( callTester, backoff, RetryDeterminer.DEFAULT, Exception.class, sleeper)); assertThat(thrown).hasMessageThat().contains("socket3"); assertThat(callTester.timesCalled()).isEqualTo(3); verifySleeper(sleeper, 2); }
@Test public void testCallRetriesAndFails() throws Exception { MockSleeper sleeper = new MockSleeper(); ArrayList<Exception> exceptions = new ArrayList<>(); exceptions.add(new SocketTimeoutException("socket")); exceptions.add(new SocketTimeoutException("socket")); exceptions.add(new IllegalArgumentException("FakeException")); CallableTester<Exception> callTester = new CallableTester<>(exceptions); BackOff backoff = new RetryBoundedBackOff(5, new BackOffTester()); IllegalArgumentException thrown = assertThrows( IllegalArgumentException.class, () -> ResilientOperation.retry( callTester, backoff, RetryDeterminer.DEFAULT, Exception.class, sleeper)); assertThat(thrown).hasMessageThat().contains("FakeException"); assertThat(callTester.timesCalled()).isEqualTo(3); verifySleeper(sleeper, 2); }
@Test public void testCallRetriesAndFailsWithSocketErrors() throws Exception { MockSleeper sleeper = new MockSleeper(); ArrayList<IOException> exceptions = new ArrayList<>(); exceptions.add(new SocketTimeoutException("socket")); exceptions.add(new SocketTimeoutException("socket")); exceptions.add(new IOException("FakeException")); CallableTester<IOException> callTester = new CallableTester<>(exceptions); BackOff backoff = new RetryBoundedBackOff(5, new BackOffTester()); IOException thrown = assertThrows( IOException.class, () -> ResilientOperation.retry( callTester, backoff, RetryDeterminer.SOCKET_ERRORS, IOException.class, sleeper)); assertThat(thrown).hasMessageThat().contains("FakeException"); assertThat(callTester.timesCalled()).isEqualTo(3); verifySleeper(sleeper, 2); }
@Test public void testCallFailsOnBadException() throws Exception { MockSleeper sleeper = new MockSleeper(); ArrayList<Exception> exceptions = new ArrayList<>(); exceptions.add(new IllegalArgumentException("FakeException")); CallableTester<Exception> callTester = new CallableTester<>(exceptions); BackOff backoff = new RetryBoundedBackOff(3, new BackOffTester()); IllegalArgumentException thrown = assertThrows( IllegalArgumentException.class, () -> ResilientOperation.retry( callTester, backoff, RetryDeterminer.DEFAULT, Exception.class, sleeper)); assertThat(thrown).hasMessageThat().contains("FakeException"); assertThat(callTester.timesCalled()).isEqualTo(1); verifySleeper(sleeper, 0); }
null, BackOffAdapter.toGcpBackOff(TEST_BACKOFF.backoff()), new MockSleeper(), InsertRetryPolicy.alwaysRetry(), null,
null, BackOffAdapter.toGcpBackOff(TEST_BACKOFF.backoff()), new MockSleeper(), InsertRetryPolicy.alwaysRetry(), null,
null, BackOffAdapter.toGcpBackOff(TEST_BACKOFF.backoff()), new MockSleeper(), InsertRetryPolicy.alwaysRetry(), null,
insertIds, BackOffAdapter.toGcpBackOff(TEST_BACKOFF.backoff()), new MockSleeper(), InsertRetryPolicy.alwaysRetry(), null,
null, BackOffAdapter.toGcpBackOff(TEST_BACKOFF.backoff()), new MockSleeper(), InsertRetryPolicy.neverRetry(), failedInserts,
null, BackOffAdapter.toGcpBackOff(TEST_BACKOFF.backoff()), new MockSleeper(), InsertRetryPolicy.neverRetry(), failedInserts,
null, BackOffAdapter.toGcpBackOff(TEST_BACKOFF.backoff()), new MockSleeper(), InsertRetryPolicy.retryTransientErrors(), failedInserts,
null, BackOffAdapter.toGcpBackOff(TEST_BACKOFF.backoff()), new MockSleeper(), InsertRetryPolicy.neverRetry(), Lists.newArrayList(), null, BackOffAdapter.toGcpBackOff(TEST_BACKOFF.backoff()), new MockSleeper(), InsertRetryPolicy.neverRetry(), Lists.newArrayList(),