@Before public void setUp() { currentKey = ""; listener = mock(CacheListener.class); cache = new TestLruCache(SIZE, listener); when(listener.getSize(anyObject())).thenReturn(1); }
@Test public void testCanPutSameItemMultipleTimes() { String key = getKey(); Object value = new Object(); for (int i = 0; i < SIZE * 2; i++) { cache.put(key, value); } verify(listener, never()).onItemRemoved(anyObject()); }
@Test public void testItemLargerThanCacheDoesNotCauseAdditionalEvictions() { cache.put(getKey(), new Object()); Object tooLarge = new Object(); when(listener.getSize(eq(tooLarge))).thenReturn(SIZE + 1); cache.put(getKey(), tooLarge); verify(listener, times(1)).onItemRemoved(anyObject()); }
@Test public void put_withExistingNullValue_doesNotNotifyListener() { String key = getKey(); cache.put(key, /* item= */ null); cache.put(key, new Object()); verify(listener, never()).onItemRemoved(anyObject()); }
@Test public void testCanHandleZeroAsMultiplier() { for (int i = 0; i < SIZE; i++) { cache.put(getKey(), new Object()); } cache.setSizeMultiplier(0); verify(listener, times(SIZE)).onItemRemoved(anyObject()); }
@Test public void testCanIncreaseSizeDynamically() { int sizeMultiplier = 2; cache.setSizeMultiplier(sizeMultiplier); for (int i = 0; i < SIZE * sizeMultiplier; i++) { cache.put(getKey(), new Object()); } verify(listener, never()).onItemRemoved(anyObject()); }
@Test public void testDoesNotCallListenerWhenRemovesKey() { String key = getKey(); cache.put(key, new Object()); cache.remove(key); verify(listener, never()).onItemRemoved(anyObject()); }
@Test public void put_withSameValueTwice_doesNotEvictItems() { String key = getKey(); Object value = new Object(); cache.put(key, value); cache.put(key, value); verify(listener, never()).onItemRemoved(anyObject()); }
@Test public void testMergeSingleWindow() { MergingWindowAssigner.MergeCallback callback = mock(MergingWindowAssigner.MergeCallback.class); SessionWindowTimeGapExtractor extractor = mock(SessionWindowTimeGapExtractor.class); when(extractor.extract(any())).thenReturn(5000L); DynamicEventTimeSessionWindows assigner = DynamicEventTimeSessionWindows.withDynamicGap(extractor); assigner.mergeWindows(Lists.newArrayList(new TimeWindow(0, 1)), callback); verify(callback, never()).merge(anyCollection(), Matchers.anyObject()); }
@Test public void testMergeSingleWindow() { MergingWindowAssigner.MergeCallback callback = mock(MergingWindowAssigner.MergeCallback.class); SessionWindowTimeGapExtractor extractor = mock(SessionWindowTimeGapExtractor.class); when(extractor.extract(any())).thenReturn(5000L); DynamicProcessingTimeSessionWindows assigner = DynamicProcessingTimeSessionWindows.withDynamicGap(extractor); assigner.mergeWindows(Lists.newArrayList(new TimeWindow(0, 1)), callback); verify(callback, never()).merge(anyCollection(), Matchers.anyObject()); }
@Test public void testMergeSinglePointWindow() { MergingWindowAssigner.MergeCallback callback = mock(MergingWindowAssigner.MergeCallback.class); SessionWindowTimeGapExtractor extractor = mock(SessionWindowTimeGapExtractor.class); when(extractor.extract(any())).thenReturn(5000L); DynamicEventTimeSessionWindows assigner = DynamicEventTimeSessionWindows.withDynamicGap(extractor); assigner.mergeWindows(Lists.newArrayList(new TimeWindow(0, 0)), callback); verify(callback, never()).merge(anyCollection(), Matchers.anyObject()); }
@Test public void testCanPutNullItemWithoutChangingSize() { String key = getKey(); cache.put(key, null); for (int i = 0; i < SIZE; i++) { cache.put(getKey(), new Object()); } verify(listener, never()).onItemRemoved(anyObject()); }
@Test public void put_withNullValue_withSizeGreaterThanMaximum_notifiesListener() { String key = getKey(); when(listener.getSize(null)).thenReturn((int) (cache.getMaxSize() * 2)); cache.put(key, null); verify(listener).onItemRemoved(anyObject()); }
@Test public void testCanResetSizeDynamically() { int sizeMultiplier = 2; cache.setSizeMultiplier(sizeMultiplier); for (int i = 0; i < SIZE * sizeMultiplier; i++) { cache.put(getKey(), new Object()); } cache.setSizeMultiplier(1); verify(listener, times(sizeMultiplier)).onItemRemoved(anyObject()); }
@Test public void testReplacingNullItemWIthNullItemIncreasesSize() { String key = getKey(); cache.put(key, null); cache.put(key, new Object()); for (int i = 0; i < SIZE; i++) { cache.put(getKey(), new Object()); } verify(listener).onItemRemoved(anyObject()); }
@Test public void testDecreasesSizeWhenRemovesKey() { String key = getKey(); Object value = new Object(); cache.put(key, value); for (int i = 0; i < SIZE - 1; i++) { cache.put(getKey(), value); } cache.remove(key); cache.put(key, value); verify(listener, never()).onItemRemoved(anyObject()); }
@Test public void testMergeSinglePointWindow() { MergingWindowAssigner.MergeCallback callback = mock(MergingWindowAssigner.MergeCallback.class); EventTimeSessionWindows assigner = EventTimeSessionWindows.withGap(Time.milliseconds(5000)); assigner.mergeWindows(Lists.newArrayList(new TimeWindow(0, 0)), callback); verify(callback, never()).merge(anyCollection(), Matchers.anyObject()); }
@Test public void testMergeSinglePointWindow() { MergingWindowAssigner.MergeCallback callback = mock(MergingWindowAssigner.MergeCallback.class); ProcessingTimeSessionWindows assigner = ProcessingTimeSessionWindows.withGap(Time.milliseconds(5000)); assigner.mergeWindows(Lists.newArrayList(new TimeWindow(0, 0)), callback); verify(callback, never()).merge(anyCollection(), Matchers.anyObject()); }