package oncue.tests.schedulers; import static junit.framework.Assert.assertEquals; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import oncue.common.messages.Job; import oncue.scheduler.PriorityJobComparator; import org.joda.time.DateTime; import org.junit.Test; import com.google.common.base.Function; import com.google.common.collect.Lists; public class PriorityJobComparatorTest { private final PriorityJobComparator comparator = new PriorityJobComparator(); @Test public void returnsJobsWithOldestFirstWhenPriorityIsTheSame() { final DateTime now = DateTime.now(); ArrayList<Job> jobs = Lists.newArrayList(makeJob(1, 1, now), makeJob(2, 1, now.minusMinutes(1)), makeJob(3, 1, now.minusMinutes(2))); Collections.sort(jobs, comparator); assertEquals(Lists.newArrayList(3l, 2l, 1l), extractJobIds(jobs)); } @Test public void returnsJobsInIDOrderWhenPriorityAndEnqueueTimeIsTheSame() { final DateTime now = DateTime.now(); ArrayList<Job> jobs = Lists.newArrayList(makeJob(1, 1, now), makeJob(2, 1, now), makeJob(3, 1, now)); Collections.sort(jobs, comparator); assertEquals(Lists.newArrayList(1l, 2l, 3l), extractJobIds(jobs)); } @Test public void returnsJobsInPriorityOrder() { ArrayList<Job> jobs = Lists.newArrayList(makeJob(1, 1), makeJob(2, 3), makeJob(3, 2)); Collections.sort(jobs, comparator); assertEquals(Lists.newArrayList(2l, 3l, 1l), extractJobIds(jobs)); } private List<Long> extractJobIds(ArrayList<Job> jobs) { return Lists.transform(jobs, new Function<Job, Long>() { @Override public Long apply(Job input) { return input.getId(); } }); } private Job makeJob(int id, int priority) { Job job = new Job(id, null); job.setParams(new HashMap<String, String>()); job.getParams().put("priority", String.valueOf(priority)); return job; } private Job makeJob(int id, int priority, DateTime enqueuedAt) { Job job = makeJob(id, priority); job.setEnqueuedAt(enqueuedAt); return job; } }