alanlau28 commented on code in PR #23317:
URL: https://github.com/apache/kafka/pull/23317#discussion_r3962887345
##########
clients/src/test/java/org/apache/kafka/common/message/ApiMessageTypeTest.java:
##########
@@ -98,6 +102,64 @@ public void testHeaderVersion() {
assertEquals((short) 2,
ApiMessageType.CREATE_TOPICS.requestHeaderVersion((short) 5));
assertEquals((short) 1,
ApiMessageType.CREATE_TOPICS.responseHeaderVersion((short) 5));
+
+ // SaslHandshake and OffsetDelete are non-flexible: header v1 request
/ v0 response at every version.
+ assertEquals((short) 1,
ApiMessageType.SASL_HANDSHAKE.requestHeaderVersion((short) 0));
+ assertEquals((short) 0,
ApiMessageType.SASL_HANDSHAKE.responseHeaderVersion((short) 0));
+ assertEquals((short) 1,
ApiMessageType.SASL_HANDSHAKE.requestHeaderVersion((short) 1));
+ assertEquals((short) 0,
ApiMessageType.SASL_HANDSHAKE.responseHeaderVersion((short) 1));
+
+ assertEquals((short) 1,
ApiMessageType.OFFSET_DELETE.requestHeaderVersion((short) 0));
+ assertEquals((short) 0,
ApiMessageType.OFFSET_DELETE.responseHeaderVersion((short) 0));
+
+ // ApiVersions request follows the flexible rule, but the response
always uses a v0 header (KIP-511).
+ assertEquals((short) 1,
ApiMessageType.API_VERSIONS.requestHeaderVersion((short) 0));
+ assertEquals((short) 1,
ApiMessageType.API_VERSIONS.requestHeaderVersion((short) 2));
+ assertEquals((short) 2,
ApiMessageType.API_VERSIONS.requestHeaderVersion((short) 3));
+ assertEquals((short) 0,
ApiMessageType.API_VERSIONS.responseHeaderVersion((short) 0));
+ assertEquals((short) 0,
ApiMessageType.API_VERSIONS.responseHeaderVersion((short) 3));
+
+ // Envelope is flexible from v0: header v2 request / v1 response
everywhere.
+ assertEquals((short) 2,
ApiMessageType.ENVELOPE.requestHeaderVersion((short) 0));
+ assertEquals((short) 1,
ApiMessageType.ENVELOPE.responseHeaderVersion((short) 0));
+ }
+
+ /**
+ * The header versions generated from the headerVersions maps match the
versions implied by body
+ * flexibility for every existing API and version: a flexible
request/response uses header v2/v1,
+ * a non-flexible one uses header v1/v0. The sole exception is
ApiVersionsResponse, which always
+ * uses a v0 header so that older brokers can parse the response header
(KIP-511).
+ */
+ @Test
+ public void testHeaderVersionsMatchSchemaFlexibility() {
+ for (ApiMessageType type : ApiMessageType.values()) {
+ if (type.lowestSupportedVersion() >
type.highestSupportedVersion(true))
+ continue;
+ for (short version = type.lowestSupportedVersion();
+ version <= type.highestSupportedVersion(true); version++) {
+ short expectedRequestHeader =
isFlexible(type.requestSchemas()[version]) ? (short) 2 : (short) 1;
+ assertEquals(expectedRequestHeader,
type.requestHeaderVersion(version),
Review Comment:
Asserted `>=` for now.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]