package net.jxta.impl.util.threads; import java.util.concurrent.ExecutorService; import static org.junit.Assert.*; import java.util.Properties; import org.junit.After; import org.junit.Before; import org.junit.Test; public class TaskManagerTest { private Properties oldProperties; @Before public void setUp() throws Exception { oldProperties = System.getProperties(); System.clearProperty(TaskManager.CORE_POOL_SIZE_SYSPROP); System.clearProperty(TaskManager.SCHEDULED_POOL_SIZE_SYSPROP); System.clearProperty(TaskManager.IDLE_THREAD_TIMEOUT_SYSPROP); System.clearProperty(TaskManager.MAX_WORKER_POOL_SIZE_SYSPROP); } @After public void tearDown() throws Exception { System.setProperties(oldProperties); } private void setSysProp(String property, String value) { if(value != null) { System.setProperty(property, value); } else { System.clearProperty(property); } } @Test public void testCorePoolSize_hasDefault() { assertEquals(TaskManager.DEFAULT_CORE_POOL_SIZE, TaskManager.getCorePoolSize(null)); } @Test public void testCorePoolSize_usesSysProp() { setSysProp(TaskManager.CORE_POOL_SIZE_SYSPROP, "100"); assertEquals(100, TaskManager.getCorePoolSize(null)); } @Test public void testCorePoolSize_specifiedAsParam() { assertEquals(5, TaskManager.getCorePoolSize(5)); } @Test public void testCorePoolSize_specifiedAsParam_minimumEnforced() { assertEquals(0, TaskManager.getCorePoolSize(-2)); } @Test public void testCorePoolSize_hasMinimum_handlesNegativeNumbers() { setSysProp(TaskManager.CORE_POOL_SIZE_SYSPROP, "-4"); assertEquals(0, TaskManager.getCorePoolSize(null)); } @Test public void testScheduledPoolSize_usesSysProp() { setSysProp(TaskManager.SCHEDULED_POOL_SIZE_SYSPROP, "100"); assertEquals(100, TaskManager.getScheduledPoolSize(null)); } @Test public void testScheduledPoolSize_hasMinimum_handlesNegativeNumbers() { setSysProp(TaskManager.SCHEDULED_POOL_SIZE_SYSPROP, "-4"); assertEquals(1, TaskManager.getScheduledPoolSize(null)); } @Test public void testScheduledPoolSize_hasMinimum_handlesZero() { setSysProp(TaskManager.SCHEDULED_POOL_SIZE_SYSPROP, "0"); assertEquals(1, TaskManager.getScheduledPoolSize(null)); } @Test public void testScheduledPoolSize_specifiedAsParameter() { assertEquals(13, TaskManager.getScheduledPoolSize(13)); } @Test public void testScheduledPoolSize_specifiedAsParameter_hasMinimum() { assertEquals(1, TaskManager.getScheduledPoolSize(0)); } @Test public void testIdleThreadTimeout_hasDefault() { assertEquals(TaskManager.DEFAULT_IDLE_THREAD_TIMEOUT, TaskManager.getIdleThreadTimeout(null)); } @Test public void testIdleThreadTimeout_usesSysProp() { setSysProp(TaskManager.IDLE_THREAD_TIMEOUT_SYSPROP, "100"); assertEquals(100, TaskManager.getIdleThreadTimeout(null)); } @Test public void testIdleThreadTimeout_hasMinimum() { setSysProp(TaskManager.IDLE_THREAD_TIMEOUT_SYSPROP, "-1"); assertEquals(0, TaskManager.getIdleThreadTimeout(null)); } @Test public void testIdleThreadTimeout_specifiedAsParameter() { assertEquals(5, TaskManager.getIdleThreadTimeout(5)); } @Test public void testIdleThreadTimeout_specifiedAsParameter_minimumEnforced() { assertEquals(0, TaskManager.getIdleThreadTimeout(-1)); } @Test public void testMaxWorkerPoolSize_hasDefault() { assertEquals(TaskManager.DEFAULT_MAX_WORKER_POOL_SIZE, TaskManager.getMaxWorkerPoolSize(0, null)); } @Test public void testMaxWorkerPoolSize_usesSysProp() { setSysProp(TaskManager.MAX_WORKER_POOL_SIZE_SYSPROP, "100"); assertEquals(100, TaskManager.getMaxWorkerPoolSize(5, null)); } @Test public void testMaxWorkerPoolSize_hasMinimum() { setSysProp(TaskManager.MAX_WORKER_POOL_SIZE_SYSPROP, "0"); assertEquals(1, TaskManager.getMaxWorkerPoolSize(0, null)); } @Test public void testMaxWorkerPoolSize_specifiedAsParameter() { assertEquals(5, TaskManager.getMaxWorkerPoolSize(0, 5)); } @Test public void testMaxWorkerPoolSize_specifiedAsParameter_minimumEnforced() { assertEquals(1, TaskManager.getMaxWorkerPoolSize(0, 0)); } @Test public void testMaxWorkerPoolSize_specifiedAsParameter_greaterThanCorePoolSize() { assertEquals(5, TaskManager.getMaxWorkerPoolSize(5, 3)); } @Test(expected=IllegalStateException.class) public void testShutdownTwiceThrowsException () { TaskManager t = new TaskManager(); t.shutdown(); t.shutdown(); } @Test public void testCachedExecutorServiceInstance() { TaskManager t = new TaskManager(); assertNotNull("Unexpected null TaskManager", t); ExecutorService item = t.getCachedExecutorService(); assertNotNull("Unexpected null CachedExecutorService", item); } }