You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by GitBox <gi...@apache.org> on 2021/12/09 12:00:36 UTC

[GitHub] [kafka] tombentley commented on a change in pull request #11393: MINOR: Refactor RequestResponseTest

tombentley commented on a change in pull request #11393:
URL: https://github.com/apache/kafka/pull/11393#discussion_r765722507



##########
File path: clients/src/test/java/org/apache/kafka/common/requests/RequestResponseTest.java
##########
@@ -1269,24 +909,656 @@ public void testDeletableTopicResultErrorMessageIsNullByDefault() {
         assertNull(result.errorMessage());
     }
 
-    private ResponseHeader createResponseHeader(short headerVersion) {
-        return new ResponseHeader(10, headerVersion);
+    /**
+     * Check that all error codes in the response get included in {@link AbstractResponse#errorCounts()}.
+     */
+    @Test
+    public void testErrorCountsIncludesNone() {
+        assertEquals(1, createAddOffsetsToTxnResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createAddPartitionsToTxnResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createAlterClientQuotasResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createAlterConfigsResponse().errorCounts().get(Errors.NONE));
+        assertEquals(2, createAlterPartitionReassignmentsResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createAlterReplicaLogDirsResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createApiVersionResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createBrokerHeartbeatResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createBrokerRegistrationResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createControlledShutdownResponse().errorCounts().get(Errors.NONE));
+        assertEquals(2, createCreateAclsResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createCreatePartitionsResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createCreateTokenResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createCreateTopicResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createDeleteAclsResponse(DELETE_ACLS.latestVersion()).errorCounts().get(Errors.NONE));
+        assertEquals(1, createDeleteGroupsResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createDeleteTopicsResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createDescribeAclsResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createDescribeClientQuotasResponse().errorCounts().get(Errors.NONE));
+        assertEquals(2, createDescribeConfigsResponse(DESCRIBE_CONFIGS.latestVersion()).errorCounts().get(Errors.NONE));
+        assertEquals(1, createDescribeGroupResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createDescribeTokenResponse().errorCounts().get(Errors.NONE));
+        assertEquals(2, createElectLeadersResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createEndTxnResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createExpireTokenResponse().errorCounts().get(Errors.NONE));
+        assertEquals(3, createFetchResponse(123).errorCounts().get(Errors.NONE));
+        assertEquals(1, createFindCoordinatorResponse(FIND_COORDINATOR.oldestVersion()).errorCounts().get(Errors.NONE));
+        assertEquals(1, createFindCoordinatorResponse(FIND_COORDINATOR.latestVersion()).errorCounts().get(Errors.NONE));
+        assertEquals(1, createHeartBeatResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createIncrementalAlterConfigsResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createJoinGroupResponse(JOIN_GROUP.latestVersion()).errorCounts().get(Errors.NONE));
+        assertEquals(2, createLeaderAndIsrResponse(4).errorCounts().get(Errors.NONE));
+        assertEquals(2, createLeaderAndIsrResponse(5).errorCounts().get(Errors.NONE));
+        assertEquals(3, createLeaderEpochResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createLeaveGroupResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createListGroupsResponse(LIST_GROUPS.latestVersion()).errorCounts().get(Errors.NONE));
+        assertEquals(1, createListOffsetResponse(LIST_OFFSETS.latestVersion()).errorCounts().get(Errors.NONE));
+        assertEquals(1, createListPartitionReassignmentsResponse().errorCounts().get(Errors.NONE));
+        assertEquals(3, createMetadataResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createOffsetCommitResponse().errorCounts().get(Errors.NONE));
+        assertEquals(2, createOffsetDeleteResponse().errorCounts().get(Errors.NONE));
+        assertEquals(3, createOffsetFetchResponse(OFFSET_FETCH.latestVersion()).errorCounts().get(Errors.NONE));
+        assertEquals(1, createProduceResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createRenewTokenResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createSaslAuthenticateResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createSaslHandshakeResponse().errorCounts().get(Errors.NONE));
+        assertEquals(2, createStopReplicaResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createSyncGroupResponse(SYNC_GROUP.latestVersion()).errorCounts().get(Errors.NONE));
+        assertEquals(1, createTxnOffsetCommitResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createUpdateMetadataResponse().errorCounts().get(Errors.NONE));
+        assertEquals(1, createWriteTxnMarkersResponse().errorCounts().get(Errors.NONE));
+    }
+
+    private AbstractRequest getRequest(ApiKeys apikey, short version) {
+        switch (apikey) {
+            case PRODUCE: return createProduceRequest(version);
+            case FETCH: return createFetchRequest(version);
+            case LIST_OFFSETS: return createListOffsetRequest(version);
+            case METADATA: return createMetadataRequest(version, singletonList("topic1"));
+            case LEADER_AND_ISR: return createLeaderAndIsrRequest(version);
+            case STOP_REPLICA: return createStopReplicaRequest(version, true);
+            case UPDATE_METADATA: return createUpdateMetadataRequest(version, "rack1");
+            case CONTROLLED_SHUTDOWN: return createControlledShutdownRequest(version);
+            case OFFSET_COMMIT: return createOffsetCommitRequest(version);
+            case OFFSET_FETCH: return createOffsetFetchRequest(version, true);
+            case FIND_COORDINATOR: return createFindCoordinatorRequest(version);
+            case JOIN_GROUP: return createJoinGroupRequest(version);
+            case HEARTBEAT: return createHeartBeatRequest(version);
+            case LEAVE_GROUP: return createLeaveGroupRequest(version);
+            case SYNC_GROUP: return createSyncGroupRequest(version);
+            case DESCRIBE_GROUPS: return createDescribeGroupRequest(version);
+            case LIST_GROUPS: return createListGroupsRequest(version);
+            case SASL_HANDSHAKE: return createSaslHandshakeRequest(version);
+            case API_VERSIONS: return createApiVersionRequest(version);
+            case CREATE_TOPICS: return createCreateTopicRequest(version);
+            case DELETE_TOPICS: return createDeleteTopicsRequest(version);
+            case DELETE_RECORDS: return createDeleteRecordsRequest(version);
+            case INIT_PRODUCER_ID: return createInitPidRequest(version);
+            case OFFSET_FOR_LEADER_EPOCH: return createLeaderEpochRequestForReplica(version, 1);
+            case ADD_PARTITIONS_TO_TXN: return createAddPartitionsToTxnRequest(version);
+            case ADD_OFFSETS_TO_TXN: return createAddOffsetsToTxnRequest(version);
+            case END_TXN: return createEndTxnRequest(version);
+            case WRITE_TXN_MARKERS: return createWriteTxnMarkersRequest(version);
+            case TXN_OFFSET_COMMIT: return createTxnOffsetCommitRequest(version);
+            case DESCRIBE_ACLS: return createDescribeAclsRequest(version);
+            case CREATE_ACLS: return createCreateAclsRequest(version);
+            case DELETE_ACLS: return createDeleteAclsRequest(version);
+            case DESCRIBE_CONFIGS: return createDescribeConfigsRequest(version);
+            case ALTER_CONFIGS: return createAlterConfigsRequest(version);
+            case ALTER_REPLICA_LOG_DIRS: return createAlterReplicaLogDirsRequest(version);
+            case DESCRIBE_LOG_DIRS: return createDescribeLogDirsRequest(version);
+            case SASL_AUTHENTICATE: return createSaslAuthenticateRequest(version);
+            case CREATE_PARTITIONS: return createCreatePartitionsRequest(version);
+            case CREATE_DELEGATION_TOKEN: return createCreateTokenRequest(version);
+            case RENEW_DELEGATION_TOKEN: return createRenewTokenRequest(version);
+            case EXPIRE_DELEGATION_TOKEN: return createExpireTokenRequest(version);
+            case DESCRIBE_DELEGATION_TOKEN: return createDescribeTokenRequest(version);
+            case DELETE_GROUPS: return createDeleteGroupsRequest(version);
+            case ELECT_LEADERS: return createElectLeadersRequest(version);
+            case INCREMENTAL_ALTER_CONFIGS: return createIncrementalAlterConfigsRequest(version);
+            case ALTER_PARTITION_REASSIGNMENTS: return createAlterPartitionReassignmentsRequest(version);
+            case LIST_PARTITION_REASSIGNMENTS: return createListPartitionReassignmentsRequest(version);
+            case OFFSET_DELETE: return createOffsetDeleteRequest(version);
+            case DESCRIBE_CLIENT_QUOTAS: return createDescribeClientQuotasRequest(version);
+            case ALTER_CLIENT_QUOTAS: return createAlterClientQuotasRequest(version);
+            case DESCRIBE_USER_SCRAM_CREDENTIALS: return createDescribeUserScramCredentialsRequest(version);
+            case ALTER_USER_SCRAM_CREDENTIALS: return createAlterUserScramCredentialsRequest(version);
+            case VOTE: return createVoteRequest(version);
+            case BEGIN_QUORUM_EPOCH: return createBeginQuorumEpochRequest(version);
+            case END_QUORUM_EPOCH: return createEndQuorumEpochRequest(version);
+            case DESCRIBE_QUORUM: return createDescribeQuorumRequest(version);
+            case ALTER_ISR: return createAlterIsrRequest(version);
+            case UPDATE_FEATURES: return createUpdateFeaturesRequest(version);
+            case ENVELOPE: return createEnvelopeRequest(version);
+            case FETCH_SNAPSHOT: return createFetchSnapshotRequest(version);
+            case DESCRIBE_CLUSTER: return createDescribeClusterRequest(version);
+            case DESCRIBE_PRODUCERS: return createDescribeProducersRequest(version);
+            case BROKER_REGISTRATION: return createBrokerRegistrationRequest(version);
+            case BROKER_HEARTBEAT: return createBrokerHeartbeatRequest(version);
+            case UNREGISTER_BROKER: return createUnregisterBrokerRequest(version);
+            case DESCRIBE_TRANSACTIONS: return createDescribeTransactionsRequest(version);
+            case LIST_TRANSACTIONS: return createListTransactionsRequest(version);
+            case ALLOCATE_PRODUCER_IDS: return createAllocateProducerIdsRequest(version);
+            default: throw new IllegalArgumentException("Unknown API key " + apikey);
+        }
+    }
+
+    private AbstractResponse getResponse(ApiKeys apikey, short version) {
+        switch (apikey) {
+            case PRODUCE: return createProduceResponse();
+            case FETCH: return createFetchResponse(version);
+            case LIST_OFFSETS: return createListOffsetResponse(version);
+            case METADATA: return createMetadataResponse();
+            case LEADER_AND_ISR: return createLeaderAndIsrResponse(version);
+            case STOP_REPLICA: return createStopReplicaResponse();
+            case UPDATE_METADATA: return createUpdateMetadataResponse();
+            case CONTROLLED_SHUTDOWN: return createControlledShutdownResponse();
+            case OFFSET_COMMIT: return createOffsetCommitResponse();
+            case OFFSET_FETCH: return createOffsetFetchResponse(version);
+            case FIND_COORDINATOR: return createFindCoordinatorResponse(version);
+            case JOIN_GROUP: return createJoinGroupResponse(version);
+            case HEARTBEAT: return createHeartBeatResponse();
+            case LEAVE_GROUP: return createLeaveGroupResponse();
+            case SYNC_GROUP: return createSyncGroupResponse(version);
+            case DESCRIBE_GROUPS: return createDescribeGroupResponse();
+            case LIST_GROUPS: return createListGroupsResponse(version);
+            case SASL_HANDSHAKE: return createSaslHandshakeResponse();
+            case API_VERSIONS: return createApiVersionResponse();
+            case CREATE_TOPICS: return createCreateTopicResponse();
+            case DELETE_TOPICS: return createDeleteTopicsResponse();
+            case DELETE_RECORDS: return createDeleteRecordsResponse();
+            case INIT_PRODUCER_ID: return createInitPidResponse();
+            case OFFSET_FOR_LEADER_EPOCH: return createLeaderEpochResponse();
+            case ADD_PARTITIONS_TO_TXN: return createAddPartitionsToTxnResponse();
+            case ADD_OFFSETS_TO_TXN: return createAddOffsetsToTxnResponse();
+            case END_TXN: return createEndTxnResponse();
+            case WRITE_TXN_MARKERS: return createWriteTxnMarkersResponse();
+            case TXN_OFFSET_COMMIT: return createTxnOffsetCommitResponse();
+            case DESCRIBE_ACLS: return createDescribeAclsResponse();
+            case CREATE_ACLS: return createCreateAclsResponse();
+            case DELETE_ACLS: return createDeleteAclsResponse(version);
+            case DESCRIBE_CONFIGS: return createDescribeConfigsResponse(version);
+            case ALTER_CONFIGS: return createAlterConfigsResponse();
+            case ALTER_REPLICA_LOG_DIRS: return createAlterReplicaLogDirsResponse();
+            case DESCRIBE_LOG_DIRS: return createDescribeLogDirsResponse();
+            case SASL_AUTHENTICATE: return createSaslAuthenticateResponse();
+            case CREATE_PARTITIONS: return createCreatePartitionsResponse();
+            case CREATE_DELEGATION_TOKEN: return createCreateTokenResponse();
+            case RENEW_DELEGATION_TOKEN: return createRenewTokenResponse();
+            case EXPIRE_DELEGATION_TOKEN: return createExpireTokenResponse();
+            case DESCRIBE_DELEGATION_TOKEN: return createDescribeTokenResponse();
+            case DELETE_GROUPS: return createDeleteGroupsResponse();
+            case ELECT_LEADERS: return createElectLeadersResponse();
+            case INCREMENTAL_ALTER_CONFIGS: return createIncrementalAlterConfigsResponse();
+            case ALTER_PARTITION_REASSIGNMENTS: return createAlterPartitionReassignmentsResponse();
+            case LIST_PARTITION_REASSIGNMENTS: return createListPartitionReassignmentsResponse();
+            case OFFSET_DELETE: return createOffsetDeleteResponse();
+            case DESCRIBE_CLIENT_QUOTAS: return createDescribeClientQuotasResponse();
+            case ALTER_CLIENT_QUOTAS: return createAlterClientQuotasResponse();
+            case DESCRIBE_USER_SCRAM_CREDENTIALS: return createDescribeUserScramCredentialsResponse();
+            case ALTER_USER_SCRAM_CREDENTIALS: return createAlterUserScramCredentialsResponse();
+            case VOTE: return createVoteResponse();
+            case BEGIN_QUORUM_EPOCH: return createBeginQuorumEpochResponse();
+            case END_QUORUM_EPOCH: return createEndQuorumEpochResponse();
+            case DESCRIBE_QUORUM: return createDescribeQuorumResponse();
+            case ALTER_ISR: return createAlterIsrResponse();
+            case UPDATE_FEATURES: return createUpdateFeaturesResponse();
+            case ENVELOPE: return createEnvelopeResponse();
+            case FETCH_SNAPSHOT: return createFetchSnapshotResponse();
+            case DESCRIBE_CLUSTER: return createDescribeClusterResponse();
+            case DESCRIBE_PRODUCERS: return createDescribeProducersResponse();
+            case BROKER_REGISTRATION: return createBrokerRegistrationResponse();
+            case BROKER_HEARTBEAT: return createBrokerHeartbeatResponse();
+            case UNREGISTER_BROKER: return createUnregisterBrokerResponse();
+            case DESCRIBE_TRANSACTIONS: return createDescribeTransactionsResponse();
+            case LIST_TRANSACTIONS: return createListTransactionsResponse();
+            case ALLOCATE_PRODUCER_IDS: return createAllocateProducerIdsResponse();
+            default: throw new IllegalArgumentException("Unknown API key " + apikey);
+        }
+    }
+
+    private FetchSnapshotRequest createFetchSnapshotRequest(short version) {
+        FetchSnapshotRequestData data = new FetchSnapshotRequestData()
+                .setClusterId("clusterId")
+                .setTopics(singletonList(new FetchSnapshotRequestData.TopicSnapshot()
+                        .setName("topic1")
+                        .setPartitions(singletonList(new FetchSnapshotRequestData.PartitionSnapshot()
+                                .setSnapshotId(new FetchSnapshotRequestData.SnapshotId()
+                                        .setEndOffset(123L)
+                                        .setEpoch(0))
+                                .setPosition(123L)
+                                .setPartition(0)
+                                .setCurrentLeaderEpoch(1)))))
+                .setMaxBytes(1000)
+                .setReplicaId(2);
+        return new FetchSnapshotRequest.Builder(data).build(version);
+    }
+
+    private FetchSnapshotResponse createFetchSnapshotResponse() {
+        FetchSnapshotResponseData data = new FetchSnapshotResponseData()
+                .setErrorCode(Errors.NONE.code())
+                .setTopics(singletonList(new FetchSnapshotResponseData.TopicSnapshot()
+                        .setName("topic1")
+                        .setPartitions(singletonList(new FetchSnapshotResponseData.PartitionSnapshot()
+                                .setErrorCode(Errors.NONE.code())
+                                .setIndex(0)
+                                .setCurrentLeader(new FetchSnapshotResponseData.LeaderIdAndEpoch()
+                                        .setLeaderEpoch(0)
+                                        .setLeaderId(1))
+                                .setSnapshotId(new FetchSnapshotResponseData.SnapshotId()
+                                        .setEndOffset(123L)
+                                        .setEpoch(0))
+                                .setPosition(234L)
+                                .setSize(345L)
+                                .setUnalignedRecords(MemoryRecords.withRecords(CompressionType.NONE, new SimpleRecord("blah".getBytes())))))))
+                .setThrottleTimeMs(123);
+        return new FetchSnapshotResponse(data);
+    }
+
+    private EnvelopeRequest createEnvelopeRequest(short version) {
+        return new EnvelopeRequest.Builder(
+                ByteBuffer.wrap("data".getBytes(StandardCharsets.UTF_8)),
+                "principal".getBytes(StandardCharsets.UTF_8),
+                "address".getBytes(StandardCharsets.UTF_8))
+                .build(version);
+    }
+
+    private EnvelopeResponse createEnvelopeResponse() {
+        EnvelopeResponseData data = new EnvelopeResponseData()
+                .setResponseData(ByteBuffer.wrap("data".getBytes(StandardCharsets.UTF_8)))
+                .setErrorCode(Errors.NONE.code());
+        return new EnvelopeResponse(data);
+    }
+
+    private DescribeQuorumRequest createDescribeQuorumRequest(short version) {
+        DescribeQuorumRequestData data = new DescribeQuorumRequestData()
+                .setTopics(singletonList(new DescribeQuorumRequestData.TopicData()
+                        .setPartitions(singletonList(new DescribeQuorumRequestData.PartitionData()
+                                .setPartitionIndex(0)))
+                        .setTopicName("topic1")));
+        return new DescribeQuorumRequest.Builder(data).build(version);
+    }
+
+    private DescribeQuorumResponse createDescribeQuorumResponse() {
+        DescribeQuorumResponseData data = new DescribeQuorumResponseData()
+                .setErrorCode(Errors.NONE.code());
+        return new DescribeQuorumResponse(data);
+    }
+
+    private EndQuorumEpochRequest createEndQuorumEpochRequest(short version) {
+        EndQuorumEpochRequestData data = new EndQuorumEpochRequestData()
+                .setClusterId("clusterId")
+                .setTopics(singletonList(new EndQuorumEpochRequestData.TopicData()
+                        .setPartitions(singletonList(new EndQuorumEpochRequestData.PartitionData()
+                                .setLeaderEpoch(0)
+                                .setLeaderId(1)
+                                .setPartitionIndex(2)
+                                .setPreferredSuccessors(asList(0, 1, 2))))
+                        .setTopicName("topic1")));
+        return new EndQuorumEpochRequest.Builder(data).build(version);
+    }
+
+    private EndQuorumEpochResponse createEndQuorumEpochResponse() {
+        EndQuorumEpochResponseData data = new EndQuorumEpochResponseData()
+                .setErrorCode(Errors.NONE.code())
+                .setTopics(singletonList(new EndQuorumEpochResponseData.TopicData()
+                        .setPartitions(singletonList(new EndQuorumEpochResponseData.PartitionData()
+                                .setErrorCode(Errors.NONE.code())
+                                .setLeaderEpoch(1)))
+                        .setTopicName("topic1")));
+        return new EndQuorumEpochResponse(data);
     }
 
-    private FindCoordinatorRequest createFindCoordinatorRequest(int version) {
+    private BeginQuorumEpochRequest createBeginQuorumEpochRequest(short version) {
+        BeginQuorumEpochRequestData data = new BeginQuorumEpochRequestData()
+                .setClusterId("clusterId")
+                .setTopics(singletonList(new BeginQuorumEpochRequestData.TopicData()
+                        .setPartitions(singletonList(new BeginQuorumEpochRequestData.PartitionData()
+                                .setLeaderEpoch(0)
+                                .setLeaderId(1)
+                                .setPartitionIndex(2)))));
+        return new BeginQuorumEpochRequest.Builder(data).build(version);
+    }
+
+    private BeginQuorumEpochResponse createBeginQuorumEpochResponse() {
+        BeginQuorumEpochResponseData data = new BeginQuorumEpochResponseData()
+                .setErrorCode(Errors.NONE.code())
+                .setTopics(singletonList(new BeginQuorumEpochResponseData.TopicData()
+                        .setPartitions(singletonList(new BeginQuorumEpochResponseData.PartitionData()
+                                .setErrorCode(Errors.NONE.code())
+                                .setLeaderEpoch(0)
+                                .setLeaderId(1)
+                                .setPartitionIndex(2)))));
+        return new BeginQuorumEpochResponse(data);
+    }
+
+    private VoteRequest createVoteRequest(short version) {
+        VoteRequestData data = new VoteRequestData()
+                .setClusterId("clusterId")
+                .setTopics(singletonList(new VoteRequestData.TopicData()
+                        .setPartitions(singletonList(new VoteRequestData.PartitionData()
+                                .setPartitionIndex(0)
+                                .setCandidateEpoch(1)
+                                .setCandidateId(2)
+                                .setLastOffset(3L)
+                                .setLastOffsetEpoch(4)))
+                        .setTopicName("topic1")));
+        return new VoteRequest.Builder(data).build(version);
+    }
+
+    private VoteResponse createVoteResponse() {
+        VoteResponseData data = new VoteResponseData()
+                .setErrorCode(Errors.NONE.code())
+                .setTopics(singletonList(new VoteResponseData.TopicData()
+                        .setPartitions(singletonList(new VoteResponseData.PartitionData()
+                                .setErrorCode(Errors.NONE.code())
+                                .setLeaderEpoch(0)
+                                .setPartitionIndex(1)
+                                .setLeaderId(2)
+                                .setVoteGranted(false)))));
+        return new VoteResponse(data);
+    }
+
+    private AlterUserScramCredentialsRequest createAlterUserScramCredentialsRequest(short version) {
+        AlterUserScramCredentialsRequestData data = new AlterUserScramCredentialsRequestData()
+                .setDeletions(singletonList(new AlterUserScramCredentialsRequestData.ScramCredentialDeletion()
+                        .setName("user1")
+                        .setMechanism((byte) 0)))
+                .setUpsertions(singletonList(new AlterUserScramCredentialsRequestData.ScramCredentialUpsertion()
+                        .setName("user2")
+                        .setIterations(1024)
+                        .setMechanism((byte) 1)
+                        .setSalt("salt".getBytes())));
+        return new AlterUserScramCredentialsRequest.Builder(data).build(version);
+    }
+
+    private AlterUserScramCredentialsResponse createAlterUserScramCredentialsResponse() {
+        AlterUserScramCredentialsResponseData data = new AlterUserScramCredentialsResponseData()
+                .setResults(singletonList(new AlterUserScramCredentialsResponseData.AlterUserScramCredentialsResult()
+                        .setErrorCode(Errors.NONE.code())
+                        .setUser("user1")
+                        .setErrorMessage("error message")));
+        return new AlterUserScramCredentialsResponse(data);
+    }
+
+    private DescribeUserScramCredentialsRequest createDescribeUserScramCredentialsRequest(short version) {
+        DescribeUserScramCredentialsRequestData data = new DescribeUserScramCredentialsRequestData()
+                .setUsers(singletonList(new DescribeUserScramCredentialsRequestData.UserName()
+                        .setName("user1")));
+        return new DescribeUserScramCredentialsRequest.Builder(data).build(version);
+    }
+
+    private DescribeUserScramCredentialsResponse createDescribeUserScramCredentialsResponse() {
+        DescribeUserScramCredentialsResponseData data = new DescribeUserScramCredentialsResponseData()
+                .setResults(singletonList(new DescribeUserScramCredentialsResponseData.DescribeUserScramCredentialsResult()
+                        .setUser("user1")
+                        .setErrorCode(Errors.NONE.code())
+                        .setErrorMessage("error message")
+                        .setCredentialInfos(singletonList(new DescribeUserScramCredentialsResponseData.CredentialInfo()
+                                .setIterations(1024)
+                                .setMechanism((byte) 0)))))
+                .setErrorCode(Errors.NONE.code())
+                .setErrorMessage("error message")
+                .setThrottleTimeMs(123);
+        return new DescribeUserScramCredentialsResponse(data);
+    }
+
+    private AlterIsrRequest createAlterIsrRequest(short version) {
+        AlterIsrRequestData data = new AlterIsrRequestData()
+                .setBrokerEpoch(123L)
+                .setBrokerId(1)
+                .setTopics(singletonList(new AlterIsrRequestData.TopicData()
+                        .setName("topic1")
+                        .setPartitions(singletonList(new AlterIsrRequestData.PartitionData()
+                                .setPartitionIndex(1)
+                                .setCurrentIsrVersion(2)
+                                .setLeaderEpoch(3)
+                                .setNewIsr(asList(1, 2))))));
+        return new AlterIsrRequest.Builder(data).build(version);
+    }
+
+    private AlterIsrResponse createAlterIsrResponse() {
+        AlterIsrResponseData data = new AlterIsrResponseData()
+                .setErrorCode(Errors.NONE.code())
+                .setThrottleTimeMs(123)
+                .setTopics(singletonList(new AlterIsrResponseData.TopicData()
+                        .setName("topic1")
+                        .setPartitions(singletonList(new AlterIsrResponseData.PartitionData()
+                                .setCurrentIsrVersion(1)
+                                .setIsr(asList(0, 1, 2))
+                                .setErrorCode(Errors.NONE.code())
+                                .setLeaderEpoch(2)
+                                .setLeaderId(3)))));
+        return new AlterIsrResponse(data);
+    }
+
+    private UpdateFeaturesRequest createUpdateFeaturesRequest(short version) {
+        UpdateFeaturesRequestData.FeatureUpdateKeyCollection features = new UpdateFeaturesRequestData.FeatureUpdateKeyCollection();
+        features.add(new UpdateFeaturesRequestData.FeatureUpdateKey()
+                .setFeature("feature1")
+                .setAllowDowngrade(false)
+                .setMaxVersionLevel((short) 1));
+        UpdateFeaturesRequestData data = new UpdateFeaturesRequestData()
+                .setFeatureUpdates(features)
+                .setTimeoutMs(123);
+        return new UpdateFeaturesRequest.Builder(data).build(version);
+    }
+
+    private UpdateFeaturesResponse createUpdateFeaturesResponse() {
+        UpdateFeaturesResponseData.UpdatableFeatureResultCollection results = new UpdateFeaturesResponseData.UpdatableFeatureResultCollection();
+        results.add(new UpdateFeaturesResponseData.UpdatableFeatureResult()
+                .setFeature("feature1")
+                .setErrorCode(Errors.NONE.code())
+                .setErrorMessage("error message"));
+        UpdateFeaturesResponseData data = new UpdateFeaturesResponseData()
+                .setErrorCode(Errors.NONE.code())
+                .setThrottleTimeMs(123)
+                .setResults(results)
+                .setErrorMessage("error message");
+        return new UpdateFeaturesResponse(data);
+    }
+
+    private AllocateProducerIdsRequest createAllocateProducerIdsRequest(short version) {
+        AllocateProducerIdsRequestData data = new AllocateProducerIdsRequestData()
+                .setBrokerEpoch(123L)
+                .setBrokerId(2);
+        return new AllocateProducerIdsRequest.Builder(data).build(version);
+    }
+
+    private AllocateProducerIdsResponse createAllocateProducerIdsResponse() {
+        AllocateProducerIdsResponseData data = new AllocateProducerIdsResponseData()
+                .setErrorCode(Errors.NONE.code())
+                .setThrottleTimeMs(123)
+                .setProducerIdLen(234)
+                .setProducerIdStart(345L);
+        return new AllocateProducerIdsResponse(data);
+    }
+
+    private DescribeLogDirsRequest createDescribeLogDirsRequest(short version) {
+        DescribeLogDirsRequestData.DescribableLogDirTopicCollection topics = new DescribeLogDirsRequestData.DescribableLogDirTopicCollection();
+        topics.add(new DescribeLogDirsRequestData.DescribableLogDirTopic()
+                .setPartitions(asList(0, 1, 2))
+                .setTopic("topic1"));
+        DescribeLogDirsRequestData data = new DescribeLogDirsRequestData()
+                .setTopics(topics);
+        return new DescribeLogDirsRequest.Builder(data).build(version);
+    }
+
+    private DescribeLogDirsResponse createDescribeLogDirsResponse() {
+        DescribeLogDirsResponseData data = new DescribeLogDirsResponseData()
+                .setResults(singletonList(new DescribeLogDirsResponseData.DescribeLogDirsResult()
+                        .setErrorCode(Errors.NONE.code())
+                        .setLogDir("logdir")
+                        .setTopics(singletonList(new DescribeLogDirsResponseData.DescribeLogDirsTopic()
+                                .setName("topic1")
+                                .setPartitions(singletonList(new DescribeLogDirsResponseData.DescribeLogDirsPartition()
+                                        .setPartitionIndex(0)
+                                        .setIsFutureKey(false)
+                                        .setOffsetLag(123L)
+                                        .setPartitionSize(234L)))))))
+                .setThrottleTimeMs(123);
+        return new DescribeLogDirsResponse(data);
+    }
+
+    private DeleteRecordsRequest createDeleteRecordsRequest(short version) {
+        DeleteRecordsRequestData.DeleteRecordsTopic topic = new DeleteRecordsRequestData.DeleteRecordsTopic()
+                .setName("topic1")
+                .setPartitions(singletonList(new DeleteRecordsRequestData.DeleteRecordsPartition()
+                        .setPartitionIndex(1)
+                        .setOffset(123L)));
+        DeleteRecordsRequestData data = new DeleteRecordsRequestData()
+                .setTopics(singletonList(topic))
+                .setTimeoutMs(123);
+        return new DeleteRecordsRequest.Builder(data).build(version);
+    }
+
+    private DeleteRecordsResponse createDeleteRecordsResponse() {
+        DeleteRecordsResponseData.DeleteRecordsTopicResultCollection topics = new DeleteRecordsResponseData.DeleteRecordsTopicResultCollection();
+        DeleteRecordsResponseData.DeleteRecordsPartitionResultCollection partitions = new DeleteRecordsResponseData.DeleteRecordsPartitionResultCollection();
+        partitions.add(new DeleteRecordsResponseData.DeleteRecordsPartitionResult()
+                .setErrorCode(Errors.NONE.code())
+                .setLowWatermark(123L)
+                .setPartitionIndex(0));
+        topics.add(new DeleteRecordsResponseData.DeleteRecordsTopicResult()
+                .setName("topic1")
+                .setPartitions(partitions));
+        DeleteRecordsResponseData data = new DeleteRecordsResponseData()
+                .setThrottleTimeMs(123)
+                .setTopics(topics);
+        return new DeleteRecordsResponse(data);
+    }
+
+    private DescribeClusterRequest createDescribeClusterRequest(short version) {

Review comment:
       What's the benefit of using `short` over `int`? It means we have to do a lot more type casts, but doesn't make a difference in terms of test coverage. 




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: jira-unsubscribe@kafka.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org