public void testDroppingStatesAtCapacity() {
    List<ClusterState> states =
        randomStates(scaledRandomIntBetween(10, 300), "master1", "master2", "master3", "master4");
    Collections.shuffle(states, random());
    // insert half of the states
    final int numberOfStateToDrop = states.size() / 2;
    List<ClusterState> stateToDrop = states.subList(0, numberOfStateToDrop);
    final int queueSize = states.size() - numberOfStateToDrop;
    PendingClusterStatesQueue queue = createQueueWithStates(stateToDrop, queueSize);
    List<ClusterStateContext> committedContexts = randomCommitStates(queue);
    for (ClusterState state : states.subList(numberOfStateToDrop, states.size())) {
      queue.addPending(state);
    }

    assertThat(queue.pendingClusterStates().length, equalTo(queueSize));
    // check all committed states got a failure due to the drop
    for (ClusterStateContext context : committedContexts) {
      assertThat(((MockListener) context.listener).failure, notNullValue());
    }

    // all states that should have dropped are indeed dropped.
    for (ClusterState state : stateToDrop) {
      assertThat(queue.findState(state.stateUUID()), nullValue());
    }
  }