private void executeAndVerifyProposals(ZkUtils zkUtils,
Collection<ExecutionProposal> proposalsToExecute,
Collection<ExecutionProposal> proposalsToCheck) {
KafkaCruiseControlConfig configs = new KafkaCruiseControlConfig(getExecutorProperties());
Executor executor = new Executor(configs, new SystemTime(), new MetricRegistry(), 86400000L, 43200000L);
executor.setExecutionMode(false);
executor.executeProposals(proposalsToExecute, Collections.emptySet(), null, EasyMock.mock(LoadMonitor.class), null, null, null);
Map<TopicPartition, Integer> replicationFactors = new HashMap<>();
for (ExecutionProposal proposal : proposalsToCheck) {
int replicationFactor = zkUtils.getReplicasForPartition(proposal.topic(), proposal.partitionId()).size();
replicationFactors.put(new TopicPartition(proposal.topic(), proposal.partitionId()), replicationFactor);
}
waitUntilExecutionFinishes(executor);
for (ExecutionProposal proposal : proposalsToCheck) {
TopicPartition tp = new TopicPartition(proposal.topic(), proposal.partitionId());
int expectedReplicationFactor = replicationFactors.get(tp);
assertEquals("Replication factor for partition " + tp + " should be " + expectedReplicationFactor,
expectedReplicationFactor, zkUtils.getReplicasForPartition(tp.topic(), tp.partition()).size());
if (proposal.hasReplicaAction()) {
for (int brokerId : proposal.newReplicas()) {
assertTrue("The partition should have moved for " + tp,
zkUtils.getReplicasForPartition(tp.topic(), tp.partition()).contains(brokerId));
}
}
assertEquals("The leader should have moved for " + tp,
proposal.newLeader(), zkUtils.getLeaderForPartition(tp.topic(), tp.partition()).get());
}
}