@Test
public void testGetWithoutRetry() throws Exception {
TableRetryPolicy policy = new TableRetryPolicy();
policy.withFixedBackoff(Duration.ofMillis(100));
TableReadFunction readFn = mock(TableReadFunction.class);
doReturn(true).when(readFn).isRetriable(any());
doReturn(CompletableFuture.completedFuture("bar")).when(readFn).getAsync(any());
Map<String, String> result = new HashMap<>();
result.put("foo", "bar");
doReturn(CompletableFuture.completedFuture(result)).when(readFn).getAllAsync(any());
AsyncReadWriteTable delegate = new AsyncRemoteTable(readFn, null);
AsyncRetriableTable table = new AsyncRetriableTable("t1", delegate, policy, null, schedExec, readFn, null);
int times = 0;
table.init(TestRemoteTable.getMockContext());
verify(readFn, times(1)).init(any());
assertEquals("bar", table.getAsync("foo").get());
verify(readFn, times(1)).getAsync(any());
assertEquals(++times, table.readRetryMetrics.successCount.getCount());
assertEquals(result, table.getAllAsync(Arrays.asList("foo")).get());
verify(readFn, times(1)).getAllAsync(any());
assertEquals(++times, table.readRetryMetrics.successCount.getCount());
assertEquals(0, table.readRetryMetrics.retryCount.getCount());
assertEquals(0, table.readRetryMetrics.retryTimer.getSnapshot().getMax());
assertEquals(0, table.readRetryMetrics.permFailureCount.getCount());
assertNull(table.writeRetryMetrics);
table.close();
verify(readFn, times(1)).close();
}