package org.apache.hadoop.corona; import java.util.ArrayList; import java.util.Collections; import java.util.List; import junit.framework.Assert; import junit.framework.TestCase; public class TestScheduleComparator extends TestCase { public void testFairComparatorWithGrants() { List<Schedulable> schedulables = new ArrayList<Schedulable>(); // grants:1,2 schedulables.add(new SchedulableForTest("s1", "M", 1, 0, 1.0, 0L)); schedulables.add(new SchedulableForTest("s2", "M", 2, 0, 1.0, 0L)); Collections.sort(schedulables, ScheduleComparator.FAIR); Assert.assertEquals("s1", schedulables.get(0).getName()); Assert.assertEquals("s2", schedulables.get(1).getName()); } public void testFairComparatorWithWeights() { List<Schedulable> schedulables = new ArrayList<Schedulable>(); // weights:2.0,1.0 schedulables.add(new SchedulableForTest("s1", "M", 1, 0, 2.0, 0L)); schedulables.add(new SchedulableForTest("s2", "M", 1, 0, 1.0, 0L)); Collections.sort(schedulables, ScheduleComparator.FAIR); Assert.assertEquals("s1", schedulables.get(0).getName()); Assert.assertEquals("s2", schedulables.get(1).getName()); } public void testFairComparatorWithMin() { List<Schedulable> schedulables = new ArrayList<Schedulable>(); // min:10,0 schedulables.add(new SchedulableForTest("s1", "M", 9, 10, 1.0, 0L)); schedulables.add(new SchedulableForTest("s2", "M", 0, 0, 100.0, 0L)); Collections.sort(schedulables, ScheduleComparator.FAIR); Assert.assertEquals("s1", schedulables.get(0).getName()); Assert.assertEquals("s2", schedulables.get(1).getName()); } public void testFairComparatorWithBothUnderMin() { List<Schedulable> schedulables = new ArrayList<Schedulable>(); // grant:1,2 Min:2,3 schedulables.add(new SchedulableForTest("s1", "M", 1, 2, 1.0, 0L)); schedulables.add(new SchedulableForTest("s2", "M", 2, 3, 100.0, 0L)); Collections.sort(schedulables, ScheduleComparator.FAIR); Assert.assertEquals("s1", schedulables.get(0).getName()); Assert.assertEquals("s2", schedulables.get(1).getName()); } public void testFairComparatorWithTie() { List<Schedulable> schedulables = new ArrayList<Schedulable>(); // startTime:0,1 schedulables.add(new SchedulableForTest("s1", "M", 1, 2, 0.0, 0L)); schedulables.add(new SchedulableForTest("s2", "M", 1, 2, 0.0, 1L)); Collections.sort(schedulables, ScheduleComparator.FAIR); Assert.assertEquals("s1", schedulables.get(0).getName()); Assert.assertEquals("s2", schedulables.get(1).getName()); } public void testFifoComparator() { List<Schedulable> schedulables = new ArrayList<Schedulable>(); // startTime:0,1 schedulables.add(new SchedulableForTest("s1", "M", 1, 0, 1.0, 0L)); schedulables.add(new SchedulableForTest("s2", "M", 1, 0, 2.0, 1L)); Collections.sort(schedulables, ScheduleComparator.FIFO); Assert.assertEquals("s1", schedulables.get(0).getName()); Assert.assertEquals("s2", schedulables.get(1).getName()); } public void testFifoComparatorWithTie() { List<Schedulable> schedulables = new ArrayList<Schedulable>(); // sorted by pool names in this case schedulables.add(new SchedulableForTest("s2", "M", 1, 2, 1.0, 0L)); schedulables.add(new SchedulableForTest("s1", "M", 1, 2, 1.0, 0L)); Collections.sort(schedulables, ScheduleComparator.FIFO); Assert.assertEquals("s1", schedulables.get(0).getName()); Assert.assertEquals("s2", schedulables.get(1).getName()); } private class SchedulableForTest extends Schedulable { final int granted, min; final long startTime; final double weight; SchedulableForTest(String name, String type, int granted, int min, double weight, long startTime) { super(name, type); this.granted = granted; this.min = min; this.weight = weight; this.startTime = startTime; } @Override public int getGranted() { return granted; } @Override public double getWeight() { return weight; } @Override public int getMinimum() { return min; } @Override public long getStartTime() { return startTime; } @Override public int getRequested() { return 0; } @Override public void snapshot() { } } }