package com.taobao.top.analysis.node.component; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import junit.framework.Assert; import org.junit.Test; import com.taobao.top.analysis.config.MasterConfig; import com.taobao.top.analysis.exception.AnalysisException; 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.Job; import com.taobao.top.analysis.node.job.JobMergedResult; import com.taobao.top.analysis.node.job.JobTask; import com.taobao.top.analysis.node.job.JobTaskResult; import com.taobao.top.analysis.statistics.StatisticsEngine; /** * 运行时请清除掉output目录下的临时文件,防止干扰 * @author fangweng * email: fangweng@taobao.com * 下午3:41:33 * */ public class JobResultMergerTest { @Test public void testMerge() throws AnalysisException, UnsupportedEncodingException, IOException, InterruptedException { JobResultMerger jobResultMerge = new JobResultMerger(); MasterConfig config = new MasterConfig(); config.load("master-config.properties"); jobResultMerge.setConfig(config); jobResultMerge.init(); BlockingQueue<JobMergedResult> branchResultQueue = new LinkedBlockingQueue<JobMergedResult>(); BlockingQueue<JobTaskResult> jobTaskResultsQueue = new LinkedBlockingQueue<JobTaskResult>(); StatisticsEngine defaultAnalysisEngine = new StatisticsEngine(); defaultAnalysisEngine.init(); IInputAdaptor fileInputAdaptor = new FileInputAdaptor(); IInputAdaptor httpInputAdaptor = new HttpInputAdaptor(); defaultAnalysisEngine.addInputAdaptor(fileInputAdaptor); defaultAnalysisEngine.addInputAdaptor(httpInputAdaptor); MixJobBuilder mixJobBuilder = new MixJobBuilder(); mixJobBuilder.setConfig(config); mixJobBuilder.init(); Map<String, Job> jobs = mixJobBuilder.build(); Job job = jobs.values().iterator().next(); List<JobTaskResult> mergeing = new ArrayList<JobTaskResult>(); for(JobTask task : job.getJobTasks()) { mergeing.add(defaultAnalysisEngine.doAnalysis(task)); jobTaskResultsQueue.offer(defaultAnalysisEngine.doAnalysis(task)); } jobResultMerge.merge(job, branchResultQueue, jobTaskResultsQueue, false); JobTaskResult mergedJobTask = jobResultMerge.merge(job.getJobTasks().get(0), mergeing, false,true); //多线程,需要休息一会儿 Thread.sleep(2000); Map<String, Map<String, Object>> mergedResult = job.getJobResult(); String key = mergedResult.keySet().iterator().next(); String key2 = mergedResult.get(key).keySet().iterator().next(); Object value = mergedResult.get(key).get(key2); Assert.assertEquals(mergedJobTask.getResults().get(key).get(key2), value); defaultAnalysisEngine.releaseResource(); mixJobBuilder.releaseResource(); jobResultMerge.releaseResource(); } }