@Test
public void testScheduleWithDyingInstances() {
try {
Scheduler scheduler = new Scheduler();
Instance i1 = getRandomInstance(2);
Instance i2 = getRandomInstance(2);
Instance i3 = getRandomInstance(1);
scheduler.newInstanceAvailable(i1);
scheduler.newInstanceAvailable(i2);
scheduler.newInstanceAvailable(i3);
List<AllocatedSlot> slots = new ArrayList<AllocatedSlot>();
slots.add(scheduler.scheduleImmediately(new ScheduledUnit(getDummyTask())));
slots.add(scheduler.scheduleImmediately(new ScheduledUnit(getDummyTask())));
slots.add(scheduler.scheduleImmediately(new ScheduledUnit(getDummyTask())));
slots.add(scheduler.scheduleImmediately(new ScheduledUnit(getDummyTask())));
slots.add(scheduler.scheduleImmediately(new ScheduledUnit(getDummyTask())));
i2.markDead();
for (AllocatedSlot slot : slots) {
if (slot.getInstance() == i2) {
assertTrue(slot.isCanceled());
} else {
assertFalse(slot.isCanceled());
}
slot.releaseSlot();
}
assertEquals(3, scheduler.getNumberOfAvailableSlots());
i1.markDead();
i3.markDead();
// cannot get another slot, since all instances are dead
try {
scheduler.scheduleImmediately(new ScheduledUnit(getDummyTask()));
fail("Scheduler served a slot from a dead instance");