private static <K, V> AsyncExpiry<K, V> makeAsyncExpiry(long create, long update, long read) { @SuppressWarnings("unchecked") Expiry<K, V> mock = Mockito.mock(Expiry.class); when(mock.expireAfterCreate(any(), any(), anyLong())).thenReturn(create); when(mock.expireAfterUpdate(any(), any(), anyLong(), anyLong())).thenReturn(update); when(mock.expireAfterRead(any(), any(), anyLong(), anyLong())).thenReturn(read); return new AsyncExpiry<>(mock); }
@Test public void asyncExpiry_pending() { AsyncExpiry<Integer, Integer> expiry = makeAsyncExpiry(ONE_MINUTE, ONE_MINUTE, ONE_MINUTE); CompletableFuture<Integer> future = new CompletableFuture<Integer>(); assertThat(expiry.expireAfterCreate(0, future, 1L), is(ASYNC_EXPIRY)); verify(expiry.delegate, never()).expireAfterCreate(any(), any(), anyLong()); assertThat(expiry.expireAfterUpdate(0, future, 1L, 2L), is(ASYNC_EXPIRY)); verify(expiry.delegate, never()).expireAfterUpdate(any(), any(), anyLong(), anyLong()); assertThat(expiry.expireAfterRead(0, future, 1L, 2L), is(ASYNC_EXPIRY)); verify(expiry.delegate, never()).expireAfterRead(any(), any(), anyLong(), anyLong()); }
@SuppressWarnings("unchecked") @Nullable Expiry<K, V> getExpiry(boolean isAsync) { return isAsync && (expiry != null) ? (Expiry<K, V>) new AsyncExpiry<>(expiry) : (Expiry<K, V>) expiry; }
@SuppressWarnings("unchecked") @Nullable Expiry<K, V> getExpiry(boolean isAsync) { return isAsync && (expiry != null) ? (Expiry<K, V>) new AsyncExpiry<>(expiry) : (Expiry<K, V>) expiry; }
@Test public void asyncExpiry_bounded() { AsyncExpiry<Integer, Integer> expiry = makeAsyncExpiry( Long.MAX_VALUE, Long.MAX_VALUE, Long.MAX_VALUE); CompletableFuture<Integer> future = CompletableFuture.completedFuture(100); assertThat(expiry.expireAfterCreate(0, future, 1L), is(MAXIMUM_EXPIRY)); assertThat(expiry.expireAfterUpdate(0, future, 1L, 2L), is(MAXIMUM_EXPIRY)); assertThat(expiry.expireAfterRead(0, future, 1L, 2L), is(MAXIMUM_EXPIRY)); }
@Test public void asyncExpiry_completed() { AsyncExpiry<Integer, Integer> expiry = makeAsyncExpiry( ONE_MINUTE, 2 * ONE_MINUTE, 3 * ONE_MINUTE); CompletableFuture<Integer> future = CompletableFuture.completedFuture(100); assertThat(expiry.expireAfterCreate(0, future, 1L), is(ONE_MINUTE)); verify(expiry.delegate).expireAfterCreate(0, 100, 1L); assertThat(expiry.expireAfterUpdate(0, future, 1L, 2L), is(2 * ONE_MINUTE)); verify(expiry.delegate).expireAfterUpdate(0, 100, 1L, 2L); assertThat(expiry.expireAfterRead(0, future, 1L, 2L), is(3 * ONE_MINUTE)); verify(expiry.delegate).expireAfterRead(0, 100, 1L, 2L); }