package com.taobao.top.analysis.node.component; import java.io.IOException; import java.io.UnsupportedEncodingException; import junit.framework.Assert; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.taobao.top.analysis.config.MasterConfig; import com.taobao.top.analysis.exception.AnalysisException; import com.taobao.top.analysis.node.connect.MemMasterConnector; import com.taobao.top.analysis.node.connect.MemTunnel; import com.taobao.top.analysis.node.event.GetTaskRequestEvent; import com.taobao.top.analysis.node.event.GetTaskResponseEvent; import com.taobao.top.analysis.node.event.SendResultsRequestEvent; import com.taobao.top.analysis.node.event.SendResultsResponseEvent; import com.taobao.top.analysis.node.io.FileInputAdaptor; import com.taobao.top.analysis.node.io.HttpInputAdaptor; import com.taobao.top.analysis.node.io.IInputAdaptor; import com.taobao.top.analysis.node.job.JobTask; import com.taobao.top.analysis.node.job.JobTaskResult; import com.taobao.top.analysis.statistics.StatisticsEngine; public class JobManagerTest { MasterNode masterNode; JobManager jobManager; MixJobBuilder mixJobBuilder; MemTunnel tunnel; @Before public void setUp() throws Exception { masterNode = new MasterNode(); MemMasterConnector masterConnector = new MemMasterConnector(); jobManager = new JobManager(); JobResultMerger jobResultMerger = new JobResultMerger(); mixJobBuilder = new MixJobBuilder(); FileJobExporter fileJobExporter = new FileJobExporter(); tunnel = new MemTunnel(); jobManager.setJobBuilder(mixJobBuilder); jobManager.setJobExporter(fileJobExporter); jobManager.setJobResultMerger(jobResultMerger); masterConnector.setTunnel(tunnel); masterNode.setJobManager(jobManager); masterNode.setMasterConnector(masterConnector); MasterConfig config = new MasterConfig(); config.load("master-config.properties"); config.setUseAsynModeToSendResponse("false"); masterNode.setConfig(config); masterNode.init(); } @After public void tearDown() throws Exception { masterNode.releaseResource(); } @Test public void testGetUnDoJobTasks() throws AnalysisException, InterruptedException { GetTaskRequestEvent event = new GetTaskRequestEvent("1234567"); event.setRequestJobCount(2); jobManager.getUnDoJobTasks(event); GetTaskResponseEvent eventresp = (GetTaskResponseEvent)tunnel.getSlaveSide().poll(); Assert.assertEquals(event.getSequence(), eventresp.getSequence()); Assert.assertEquals(2, eventresp.getJobTasks().size()); event = new GetTaskRequestEvent("1234567"); event.setRequestJobCount(2); event.setJobName("job2"); jobManager.getUnDoJobTasks(event); eventresp = (GetTaskResponseEvent)tunnel.getSlaveSide().poll(); Assert.assertEquals(event.getSequence(), eventresp.getSequence()); Assert.assertEquals(1, eventresp.getJobTasks().size()); } @Test public void testAddTaskResultToQueue() throws AnalysisException, UnsupportedEncodingException, IOException, InterruptedException { StatisticsEngine defaultAnalysisEngine = new StatisticsEngine(); defaultAnalysisEngine.init(); IInputAdaptor fileInputAdaptor = new FileInputAdaptor(); IInputAdaptor httpInputAdaptor = new HttpInputAdaptor(); defaultAnalysisEngine.addInputAdaptor(fileInputAdaptor); defaultAnalysisEngine.addInputAdaptor(httpInputAdaptor); SendResultsRequestEvent jobResponseEvent = new SendResultsRequestEvent("1234"); JobTask task = jobManager.getJobs().values().iterator().next().getJobTasks().get(0); JobTaskResult jobTaskResult = defaultAnalysisEngine.doAnalysis(task); jobResponseEvent.setJobTaskResult(jobTaskResult); jobManager.addTaskResultToQueue(jobResponseEvent); JobTaskResult jobTaskResult2 = jobManager.getJobTaskResultsQueuePool().get(task.getJobName()).poll(); Assert.assertEquals(jobTaskResult, jobTaskResult2); SendResultsResponseEvent sendResultsResponseEvent = (SendResultsResponseEvent)tunnel.getSlaveSide().poll(); Assert.assertEquals("success", sendResultsResponseEvent.getResponse()); //验证少了一个任务 GetTaskRequestEvent event = new GetTaskRequestEvent("1234567"); event.setRequestJobCount(3); jobManager.getUnDoJobTasks(event); GetTaskResponseEvent eventresp = (GetTaskResponseEvent)tunnel.getSlaveSide().poll(); Assert.assertEquals(event.getSequence(), eventresp.getSequence()); Assert.assertEquals(2, eventresp.getJobTasks().size()); defaultAnalysisEngine.releaseResource(); } @Test public void testCheckJobStatus() throws InterruptedException, AnalysisException { //验证一共3个任务 GetTaskRequestEvent event = new GetTaskRequestEvent("1234567"); event.setRequestJobCount(3); jobManager.getUnDoJobTasks(event); GetTaskResponseEvent eventresp = (GetTaskResponseEvent)tunnel.getSlaveSide().poll(); Assert.assertEquals(event.getSequence(), eventresp.getSequence()); Assert.assertEquals(3, eventresp.getJobTasks().size()); //验证没有任务 event = new GetTaskRequestEvent("12345678"); event.setRequestJobCount(3); jobManager.getUnDoJobTasks(event); eventresp = (GetTaskResponseEvent)tunnel.getSlaveSide().poll(); Assert.assertEquals(event.getSequence(), eventresp.getSequence()); Assert.assertEquals(0, eventresp.getJobTasks().size()); //任务被回收 Thread.sleep(21 * 1000); //验证一共3个任务 jobManager.checkJobStatus(); event = new GetTaskRequestEvent("12345679"); event.setRequestJobCount(3); jobManager.getUnDoJobTasks(event); eventresp = (GetTaskResponseEvent)tunnel.getSlaveSide().poll(); Assert.assertEquals(event.getSequence(), eventresp.getSequence()); Assert.assertEquals(3, eventresp.getJobTasks().size()); Assert.assertEquals(1,eventresp.getJobTasks().get(0).getRecycleCounter().get()); } }