public void testQueueStats() {
    List<ClusterState> states = randomStates(scaledRandomIntBetween(10, 100), "master");
    PendingClusterStatesQueue queue = createQueueWithStates(states);
    assertThat(queue.stats().getTotal(), equalTo(states.size()));
    assertThat(queue.stats().getPending(), equalTo(states.size()));
    assertThat(queue.stats().getCommitted(), equalTo(0));

    List<ClusterStateContext> committedContexts = randomCommitStates(queue);
    assertThat(queue.stats().getTotal(), equalTo(states.size()));
    assertThat(queue.stats().getPending(), equalTo(states.size() - committedContexts.size()));
    assertThat(queue.stats().getCommitted(), equalTo(committedContexts.size()));

    ClusterState highestCommitted = null;
    for (ClusterStateContext context : committedContexts) {
      if (highestCommitted == null || context.state.supersedes(highestCommitted)) {
        highestCommitted = context.state;
      }
    }
    assert highestCommitted != null;

    queue.markAsProcessed(highestCommitted);
    assertThat(
        (long) queue.stats().getTotal(), equalTo(states.size() - (1 + highestCommitted.version())));
    assertThat(
        (long) queue.stats().getPending(),
        equalTo(states.size() - (1 + highestCommitted.version())));
    assertThat(queue.stats().getCommitted(), equalTo(0));
  }