package voldemort.utils; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import voldemort.MockTime; import java.util.concurrent.Callable; import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class CachedCallableTest { private static final long CACHE_TTL_MS = 1000; private static final long CALL_RESULT = 0xdeaddeadl; @Mock private Callable<Long> inner; private CachedCallable<Long> cachedCallable; private MockTime mockTime; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); when(inner.call()).thenReturn(CALL_RESULT); mockTime = new MockTime(); cachedCallable = new CachedCallable<Long>(inner, CACHE_TTL_MS, mockTime); } @Test public void testCall() throws Exception { assertEquals((long) cachedCallable.call(), CALL_RESULT); } @Test public void testCaching() throws Exception { cachedCallable.call(); cachedCallable.call(); verify(inner, times(1)).call(); } @Test public void testTtl() throws Exception { cachedCallable.call(); cachedCallable.call(); verify(inner, times(1)).call(); mockTime.addMilliseconds(1001); when(inner.call()).thenReturn(CALL_RESULT + 1l); assertEquals((long) cachedCallable.call(), CALL_RESULT + 1l); verify(inner, times(2)).call(); } }