@Test
public void testExpireKill() {

  final long killTime = 10000L;
  int[][] qData = new int[][]{
    //  /   A   B   C
    { 100, 40, 40, 20 },  // abs
    { 100, 100, 100, 100 },  // maxCap
    { 100,  0, 60, 40 },  // used
    {  10, 10,  0,  0 },  // pending
    {   0,  0,  0,  0 },  // reserved
    {   3,  1,  1,  1 },  // apps
    {  -1,  1,  1,  1 },  // req granularity
    {   3,  0,  0,  0 },  // subqueues
  };
  conf.setLong(
      CapacitySchedulerConfiguration.PREEMPTION_WAIT_TIME_BEFORE_KILL,
      killTime);
  ProportionalCapacityPreemptionPolicy policy = buildPolicy(qData);
  // ensure all pending rsrc from A get preempted from other queues
  when(mClock.getTime()).thenReturn(0L);
  policy.editSchedule();
  verify(mDisp, times(10)).handle(argThat(new IsPreemptionRequestFor(appC)));
  // requests reiterated
  when(mClock.getTime()).thenReturn(killTime / 2);
  policy.editSchedule();
  verify(mDisp, times(10)).handle(argThat(new IsPreemptionRequestFor(appC)));
  // kill req sent
  when(mClock.getTime()).thenReturn(killTime + 1);
  policy.editSchedule();
  verify(mDisp, times(20)).handle(evtCaptor.capture());
  List<ContainerPreemptEvent> events = evtCaptor.getAllValues();
  for (ContainerPreemptEvent e : events.subList(20, 20)) {
    assertEquals(appC, e.getAppId());
    assertEquals(MARK_CONTAINER_FOR_KILLABLE, e.getType());
  }
}