/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.publication.task; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; import java.util.concurrent.Semaphore; import org.junit.Assert; import org.junit.Test; import com.ewcms.publication.task.QueueSiteTaskRunner.TaskInfoClone; import com.ewcms.publication.task.impl.NoneTask; import com.ewcms.publication.task.publish.SitePublishable; /** * QueueSiteTaskRunner 单元测试 * * @author wangwei */ public class QueueSiteTaskRunnerTest { @Test public void testAdd(){ SitePublishable sitePublish = mock(SitePublishable.class); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); runner.add(mock(Taskable.class)); runner.add(mock(Taskable.class)); List<Taskable> tasks = runner.getTasks(); Assert.assertEquals(2, tasks.size()); } @Test public void testGetTasksQueue(){ SitePublishable sitePublish = mock(SitePublishable.class); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); runner.add(mock(Taskable.class)); runner.add(mock(Taskable.class)); List<Taskable> tasks = runner.getTasks(); Assert.assertEquals(2, tasks.size()); Taskable clone = tasks.get(0); Assert.assertEquals(TaskInfoClone.class, clone.getClass()); } @Test public void testGetTasksHasRunning() throws InterruptedException{ WaitSitePublish sitePublish =new WaitSitePublish(); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); runner.add(mock(Taskable.class)); runner.add(mock(Taskable.class)); ExecutorService executorSerivce = Executors.newSingleThreadExecutor(); executorSerivce.submit(runner); Thread.sleep(1000); List<Taskable> tasks = runner.getTasks(); Assert.assertEquals(2, tasks.size()); Taskable clone = tasks.get(0); Assert.assertEquals(TaskInfoClone.class, clone.getClass()); runner.close(); } @Test public void testRemoveQueue(){ SitePublishable sitePublish = mock(SitePublishable.class); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); Taskable task = mock(Taskable.class); runner.add(task); runner.add(mock(Taskable.class)); runner.remov(task); List<Taskable> tasks = runner.getTasks(); Assert.assertEquals(1, tasks.size()); } @Test public void testRemoveRunning() throws InterruptedException{ WaitSitePublish sitePublish =new WaitSitePublish(); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); Taskable task = mock(Taskable.class); runner.add(task); runner.add(mock(Taskable.class)); ExecutorService executorSerivce = Executors.newSingleThreadExecutor(); executorSerivce.submit(runner); Thread.sleep(1000); runner.remov(task); Assert.assertTrue(sitePublish.isCanceled()); List<Taskable> tasks = runner.getTasks(); Assert.assertEquals(1, tasks.size()); runner.close(); } @Test public void testGetQueue(){ SitePublishable sitePublish = mock(SitePublishable.class); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); Taskable task = mock(Taskable.class); when(task.getId()).thenReturn("1"); runner.add(task); runner.add(mock(Taskable.class)); Taskable t = runner.get("1"); Assert.assertNotNull(t); Assert.assertEquals("1", t.getId()); } @Test public void testGetRunning() throws InterruptedException{ WaitSitePublish sitePublish =new WaitSitePublish(); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); Taskable task = mock(Taskable.class); when(task.getId()).thenReturn("1"); runner.add(task); runner.add(mock(Taskable.class)); ExecutorService executorSerivce = Executors.newSingleThreadExecutor(); executorSerivce.submit(runner); Thread.sleep(1000); Taskable t = runner.get("1"); Assert.assertNotNull(t); Assert.assertEquals("1", t.getId()); runner.close(); } @Test public void testContainsQueue(){ SitePublishable sitePublish = mock(SitePublishable.class); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); Taskable task = mock(Taskable.class); runner.add(task); runner.add(mock(Taskable.class)); Assert.assertTrue(runner.contains(task)); } @Test public void testContainsRunning() throws InterruptedException{ WaitSitePublish sitePublish =new WaitSitePublish(); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); Taskable task = mock(Taskable.class); when(task.getId()).thenReturn("1"); runner.add(task); runner.add(mock(Taskable.class)); ExecutorService executorSerivce = Executors.newSingleThreadExecutor(); executorSerivce.submit(runner); Thread.sleep(1000); Assert.assertTrue(runner.contains(task)); runner.close(); } @Test public void testRunning()throws InterruptedException{ WaitSitePublish sitePublish =new WaitSitePublish(); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); Taskable task = mock(Taskable.class); runner.add(task); ExecutorService executorSerivce = Executors.newSingleThreadExecutor(); executorSerivce.submit(runner); Thread.sleep(1000); Assert.assertTrue(sitePublish.isRunning()); runner.close(); } @Test public void testRunningBreak()throws InterruptedException{ WaitSitePublish sitePublish =new WaitSitePublish(); Semaphore limit = new Semaphore(1); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); Taskable task = mock(Taskable.class); runner.add(task); limit.acquire(); ExecutorService executorSerivce = Executors.newSingleThreadExecutor(); executorSerivce.submit(runner); Thread.sleep(1000); Assert.assertFalse(sitePublish.isRunning()); limit.release(); Thread.sleep(1000); Assert.assertTrue(sitePublish.isRunning()); runner.close(); } @Test public void testClose()throws InterruptedException{ WaitSitePublish sitePublish =new WaitSitePublish(); Semaphore limit = new Semaphore(5); QueueSiteTaskRunner runner = new QueueSiteTaskRunner(sitePublish,limit); Taskable task = mock(Taskable.class); runner.add(task); ExecutorService executorSerivce = Executors.newSingleThreadExecutor(); executorSerivce.submit(runner); Thread.sleep(1000); Assert.assertTrue(sitePublish.isRunning()); runner.close(); Assert.assertTrue(sitePublish.isCanceled()); Assert.assertEquals(1, runner.queue.size()); Assert.assertEquals(NoneTask.class, runner.queue.poll().getClass() ); } class WaitSitePublish implements SitePublishable{ private volatile boolean canceled = false; private volatile boolean running = false; @Override public void publish(Taskable task) throws TaskException { try { running = true; Thread.sleep(5*1000); } catch (InterruptedException e) { e.printStackTrace(); } } @Override public void cancelPublish() { canceled = true; } public boolean isCanceled(){ return this.canceled; } public boolean isRunning(){ return this.running; } } }