@Test
public void testPerQueueDisablePreemptionInheritParent() {

  int[][] qData = new int[][] {
      //  /    A                   E          
      //            B    C    D         F    G    H
      {1000, 500, 200, 200, 100, 500, 200, 200, 100 },  // abs (guar)
      {1000,1000,1000,1000,1000,1000,1000,1000,1000 },  // maxCap
      {1000, 700,   0, 350, 350, 300,   0, 200, 100 },  // used 
      { 200,   0,   0,   0,   0, 200, 200,   0,   0 },  // pending
      {   0,   0,   0,   0,   0,   0,   0,   0,   0 },  // reserved
      //               appA appB      appC appD appE 
      {   5,   2,   0,   1,   1,   3,   1,   1,   1 },  // apps 
      {  -1,  -1,   1,   1,   1,  -1,   1,   1,   1 },  // req granulrity
      {   2,   3,   0,   0,   0,   3,   0,   0,   0 },  // subqueues
    };
  ProportionalCapacityPreemptionPolicy policy = buildPolicy(qData);
  policy.editSchedule();
  // With all queues preemptable, resources should be taken from queueC(appA)
  // and queueD(appB). Resources taken more from queueD(appB) than
  // queueC(appA) because it's over its capacity by a larger percentage.
  verify(mDisp, times(17)).handle(argThat(new IsPreemptionRequestFor(appA)));
  verify(mDisp, times(183)).handle(argThat(new IsPreemptionRequestFor(appB)));
  // Turn off preemption for queueA and it's children. queueF(appC)'s request
  // should starve.
  setup(); // Call setup() to reset mDisp
  conf.setPreemptionDisabled("root.queueA", true);
  ProportionalCapacityPreemptionPolicy policy2 = buildPolicy(qData);
  policy2.editSchedule();
  verify(mDisp, never()).handle(argThat(new IsPreemptionRequestFor(appA))); // queueC
  verify(mDisp, never()).handle(argThat(new IsPreemptionRequestFor(appB))); // queueD
  verify(mDisp, never()).handle(argThat(new IsPreemptionRequestFor(appD))); // queueG
  verify(mDisp, never()).handle(argThat(new IsPreemptionRequestFor(appE))); // queueH
}