Search in sources :

Example 1 with ElectLeadersResponse

use of org.apache.kafka.common.requests.ElectLeadersResponse in project kafka by apache.

the class KafkaAdminClientTest method testElectLeaders.

@Test
public void testElectLeaders() throws Exception {
    TopicPartition topic1 = new TopicPartition("topic", 0);
    TopicPartition topic2 = new TopicPartition("topic", 2);
    try (AdminClientUnitTestEnv env = mockClientEnv()) {
        for (ElectionType electionType : ElectionType.values()) {
            env.kafkaClient().setNodeApiVersions(NodeApiVersions.create());
            // Test a call where one partition has an error.
            ApiError value = ApiError.fromThrowable(new ClusterAuthorizationException(null));
            List<ReplicaElectionResult> electionResults = new ArrayList<>();
            ReplicaElectionResult electionResult = new ReplicaElectionResult();
            electionResult.setTopic(topic1.topic());
            // Add partition 1 result
            PartitionResult partition1Result = new PartitionResult();
            partition1Result.setPartitionId(topic1.partition());
            partition1Result.setErrorCode(value.error().code());
            partition1Result.setErrorMessage(value.message());
            electionResult.partitionResult().add(partition1Result);
            // Add partition 2 result
            PartitionResult partition2Result = new PartitionResult();
            partition2Result.setPartitionId(topic2.partition());
            partition2Result.setErrorCode(value.error().code());
            partition2Result.setErrorMessage(value.message());
            electionResult.partitionResult().add(partition2Result);
            electionResults.add(electionResult);
            env.kafkaClient().prepareResponse(new ElectLeadersResponse(0, Errors.NONE.code(), electionResults, ApiKeys.ELECT_LEADERS.latestVersion()));
            ElectLeadersResult results = env.adminClient().electLeaders(electionType, new HashSet<>(asList(topic1, topic2)));
            assertEquals(results.partitions().get().get(topic2).get().getClass(), ClusterAuthorizationException.class);
            // Test a call where there are no errors. By mutating the internal of election results
            partition1Result.setErrorCode(ApiError.NONE.error().code());
            partition1Result.setErrorMessage(ApiError.NONE.message());
            partition2Result.setErrorCode(ApiError.NONE.error().code());
            partition2Result.setErrorMessage(ApiError.NONE.message());
            env.kafkaClient().prepareResponse(new ElectLeadersResponse(0, Errors.NONE.code(), electionResults, ApiKeys.ELECT_LEADERS.latestVersion()));
            results = env.adminClient().electLeaders(electionType, new HashSet<>(asList(topic1, topic2)));
            assertFalse(results.partitions().get().get(topic1).isPresent());
            assertFalse(results.partitions().get().get(topic2).isPresent());
            // Now try a timeout
            results = env.adminClient().electLeaders(electionType, new HashSet<>(asList(topic1, topic2)), new ElectLeadersOptions().timeoutMs(100));
            TestUtils.assertFutureError(results.partitions(), TimeoutException.class);
        }
    }
}
Also used : ArrayList(java.util.ArrayList) TopicPartition(org.apache.kafka.common.TopicPartition) ElectionType(org.apache.kafka.common.ElectionType) ElectLeadersResponse(org.apache.kafka.common.requests.ElectLeadersResponse) ReplicaElectionResult(org.apache.kafka.common.message.ElectLeadersResponseData.ReplicaElectionResult) ApiError(org.apache.kafka.common.requests.ApiError) PartitionResult(org.apache.kafka.common.message.ElectLeadersResponseData.PartitionResult) AlterReplicaLogDirPartitionResult(org.apache.kafka.common.message.AlterReplicaLogDirsResponseData.AlterReplicaLogDirPartitionResult) ClusterAuthorizationException(org.apache.kafka.common.errors.ClusterAuthorizationException) HashSet(java.util.HashSet) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Test(org.junit.jupiter.api.Test)

Aggregations

ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 ElectionType (org.apache.kafka.common.ElectionType)1 TopicPartition (org.apache.kafka.common.TopicPartition)1 ClusterAuthorizationException (org.apache.kafka.common.errors.ClusterAuthorizationException)1 AlterReplicaLogDirPartitionResult (org.apache.kafka.common.message.AlterReplicaLogDirsResponseData.AlterReplicaLogDirPartitionResult)1 PartitionResult (org.apache.kafka.common.message.ElectLeadersResponseData.PartitionResult)1 ReplicaElectionResult (org.apache.kafka.common.message.ElectLeadersResponseData.ReplicaElectionResult)1 ApiError (org.apache.kafka.common.requests.ApiError)1 ElectLeadersResponse (org.apache.kafka.common.requests.ElectLeadersResponse)1 Test (org.junit.jupiter.api.Test)1 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)1