package org.infinispan.expiration.impl; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNull; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.test.AbstractInfinispanTest; import org.testng.annotations.Test; @Test(groups = "unit", testName = "expiration.impl.ExpirationManagerTest") public class ExpirationManagerTest extends AbstractInfinispanTest { private ConfigurationBuilder getCfg() { ConfigurationBuilder builder = new ConfigurationBuilder(); return builder; } public void testNoExpirationThread() { ExpirationManagerImpl em = new ExpirationManagerImpl(); Configuration cfg = getCfg().expiration().wakeUpInterval(0L).build(); ScheduledExecutorService mockService = mock(ScheduledExecutorService.class); em.initialize(mockService, "", cfg, null, null, null, null); em.start(); assertNull("Expiration task is not null! Should not have scheduled anything!", em.expirationTask); } public void testWakeupInterval() { ExpirationManagerImpl em = new ExpirationManagerImpl(); Configuration cfg = getCfg().expiration().wakeUpInterval(789L).build(); ScheduledExecutorService mockService = mock(ScheduledExecutorService.class); em.initialize(mockService, "", cfg, null, null, null, null); ScheduledFuture mockFuture = mock(ScheduledFuture.class); when(mockService.scheduleWithFixedDelay(isA(ExpirationManagerImpl.ScheduledTask.class), eq(789l), eq(789l), eq(TimeUnit.MILLISECONDS))) .thenReturn(mockFuture); em.start(); assertEquals(mockFuture, em.expirationTask); verify(mockService).scheduleWithFixedDelay(any(Runnable.class), anyLong(), anyLong(), any(TimeUnit.class)); // expect that the executor was never used!! } }