package org.fastcatsearch.job; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import org.fastcatsearch.control.JobExecutor; import org.fastcatsearch.control.ResultFuture; import org.fastcatsearch.exception.FastcatSearchException; import org.junit.Test; public class PriorityScheduledJobTest { @Test public void test() { TestJobExecutor jobExecutor = new TestJobExecutor(); String key = "schedule"; Date startTime = new Date(); int period1 = 13; int period2 = 2; List<ScheduledJobEntry> list = new ArrayList<ScheduledJobEntry>(); list.add(new ScheduledJobEntry(new TetsJob("MUST", 2), startTime, period1, true)); list.add(new ScheduledJobEntry(new TetsJob("00", 2), startTime, period2)); list.add(new ScheduledJobEntry(new TetsJob("01", 2), startTime, period2)); list.add(new ScheduledJobEntry(new TetsJob("02", 1), startTime, period2)); PriorityScheduledJob scheduledJob = new PriorityScheduledJob(key, list); ResultFuture resultFuture = jobExecutor.offer(scheduledJob); resultFuture.take(); } } class TetsJob extends Job { String name; int executeTime; public TetsJob(String name, int executeTime){ this.name = name; this.executeTime = executeTime * 1000; } @Override public JobResult doRun() throws FastcatSearchException { System.out.println(name + "] Job start!"); try { Thread.sleep(executeTime); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(name + "] Job Finish!"); return new JobResult(true); } } class TestJobExecutor implements JobExecutor { AtomicLong jobIdIncrement = new AtomicLong(); Map<Long, ResultFuture> resultFutureMap = new ConcurrentHashMap<Long, ResultFuture>(); @Override public ResultFuture offer(Job job) { long myJobId = jobIdIncrement.getAndIncrement(); ResultFuture resultFuture = new ResultFuture(myJobId, resultFutureMap); resultFutureMap.put(myJobId, resultFuture); job.setJobExecutor(this); job.setId(myJobId); new Thread(job).start(); return resultFuture; } @Override public void result(Job job, Object result, boolean isSuccess) { long jobId = job.getId(); ResultFuture resultFuture = resultFutureMap.remove(jobId); if (resultFuture != null) { resultFuture.put(result, isSuccess); } } @Override public int runningJobSize() { return 0; } @Override public int inQueueJobSize() { return 0; } }