This is an automated email from the ASF dual-hosted git repository.
chia7712 pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new 868315c3723 MINOR: Update MetadataVersionTest properly (#22518)
868315c3723 is described below
commit 868315c3723e99538d71db52677a11f866a5bb48
Author: Maros Orsak <[email protected]>
AuthorDate: Fri Jun 12 15:58:34 2026 +0200
MINOR: Update MetadataVersionTest properly (#22518)
In https://github.com/apache/kafka/pull/21273 (KAFKA-19774, KIP-1066)
promoted IBP_4_3_IV0 to LATEST_PRODUCTION and introduced IBP_4_4_IV0 as
the new unstable version, but did not add corresponding test coverage
for 4.4-IV0 in testFromVersionString, testShortVersion, or testVersion.
This PR adds the missing assertions, along with the bare "4.3" version
string mapping that was also absent.
So I think the design overall is bad and it didn't prevent this problem.
Therefore I have change the way how it wouild be detected.
Now when someone adds a new MetadataVersion enum value (like
IBP_4_5_IV0), all these tests automatically cover it because they
iterate over every enum constant via:
```
@EnumSource(value = MetadataVersion.class).
```
No one needs to remember to add manual assertions. Before this change,
forgetting to update the test (like what happened with IBP_4_4_IV0 in PR
#21273) would silently pass. Now it can not happen.
Reviewers: PoAn Yang <[email protected]>, Chia-Ping Tsai
<[email protected]>
---
.../kafka/server/common/MetadataVersionTest.java | 176 ++++++---------------
1 file changed, 50 insertions(+), 126 deletions(-)
diff --git
a/server-common/src/test/java/org/apache/kafka/server/common/MetadataVersionTest.java
b/server-common/src/test/java/org/apache/kafka/server/common/MetadataVersionTest.java
index 48f7f979391..ca7a3d1552d 100644
---
a/server-common/src/test/java/org/apache/kafka/server/common/MetadataVersionTest.java
+++
b/server-common/src/test/java/org/apache/kafka/server/common/MetadataVersionTest.java
@@ -23,28 +23,18 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import static org.apache.kafka.server.common.MetadataVersion.IBP_3_3_IV3;
import static org.apache.kafka.server.common.MetadataVersion.IBP_3_4_IV0;
import static org.apache.kafka.server.common.MetadataVersion.IBP_3_5_IV0;
import static org.apache.kafka.server.common.MetadataVersion.IBP_3_5_IV1;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_3_5_IV2;
import static org.apache.kafka.server.common.MetadataVersion.IBP_3_6_IV0;
import static org.apache.kafka.server.common.MetadataVersion.IBP_3_6_IV1;
import static org.apache.kafka.server.common.MetadataVersion.IBP_3_6_IV2;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_3_7_IV0;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_3_7_IV1;
import static org.apache.kafka.server.common.MetadataVersion.IBP_3_7_IV2;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_3_7_IV3;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_3_7_IV4;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_3_8_IV0;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_3_9_IV0;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_4_0_IV0;
import static org.apache.kafka.server.common.MetadataVersion.IBP_4_0_IV1;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_4_0_IV2;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_4_0_IV3;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_4_1_IV0;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_4_1_IV1;
-import static org.apache.kafka.server.common.MetadataVersion.IBP_4_2_IV0;
import static org.apache.kafka.server.common.MetadataVersion.IBP_4_2_IV1;
import static org.apache.kafka.server.common.MetadataVersion.IBP_4_3_IV0;
import static org.apache.kafka.server.common.MetadataVersion.LATEST_PRODUCTION;
@@ -55,6 +45,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
class MetadataVersionTest {
+ private static final Pattern ENUM_NAME_PATTERN =
Pattern.compile("IBP_(\\d+)_(\\d+)_IV(\\d+)");
@Test
public void testFeatureLevels() {
@@ -64,69 +55,33 @@ class MetadataVersionTest {
}
}
- @Test
- @SuppressWarnings("checkstyle:JavaNCSS")
- public void testFromVersionString() {
- // 3.3-IV3 is the latest production version in the 3.3 line
- assertEquals(IBP_3_3_IV3, MetadataVersion.fromVersionString("3.3",
true));
- assertEquals(IBP_3_3_IV3, MetadataVersion.fromVersionString("3.3-IV3",
true));
-
- // 3.4-IV0 is the latest production version in the 3.4 line
- assertEquals(IBP_3_4_IV0, MetadataVersion.fromVersionString("3.4",
true));
- assertEquals(IBP_3_4_IV0, MetadataVersion.fromVersionString("3.4-IV0",
true));
-
- // 3.5-IV2 is the latest production version in the 3.5 line
- assertEquals(IBP_3_5_IV2, MetadataVersion.fromVersionString("3.5",
true));
- assertEquals(IBP_3_5_IV0, MetadataVersion.fromVersionString("3.5-IV0",
true));
- assertEquals(IBP_3_5_IV1, MetadataVersion.fromVersionString("3.5-IV1",
true));
- assertEquals(IBP_3_5_IV2, MetadataVersion.fromVersionString("3.5-IV2",
true));
-
- // 3.6-IV2 is the latest production version in the 3.6 line
- assertEquals(IBP_3_6_IV2, MetadataVersion.fromVersionString("3.6",
true));
- assertEquals(IBP_3_6_IV0, MetadataVersion.fromVersionString("3.6-IV0",
true));
- assertEquals(IBP_3_6_IV1, MetadataVersion.fromVersionString("3.6-IV1",
true));
- assertEquals(IBP_3_6_IV2, MetadataVersion.fromVersionString("3.6-IV2",
true));
-
- // 3.7-IV4 is the latest production version in the 3.7 line
- assertEquals(IBP_3_7_IV4, MetadataVersion.fromVersionString("3.7",
true));
- assertEquals(IBP_3_7_IV0, MetadataVersion.fromVersionString("3.7-IV0",
true));
- assertEquals(IBP_3_7_IV1, MetadataVersion.fromVersionString("3.7-IV1",
true));
- assertEquals(IBP_3_7_IV2, MetadataVersion.fromVersionString("3.7-IV2",
true));
- assertEquals(IBP_3_7_IV3, MetadataVersion.fromVersionString("3.7-IV3",
true));
- assertEquals(IBP_3_7_IV4, MetadataVersion.fromVersionString("3.7-IV4",
true));
-
- // 3.8-IV0 is the latest production version in the 3.8 line
- assertEquals(IBP_3_8_IV0, MetadataVersion.fromVersionString("3.8",
true));
- assertEquals(IBP_3_8_IV0, MetadataVersion.fromVersionString("3.8-IV0",
true));
-
- // 3.9-IV0 is the latest production version in the 3.9 line
- assertEquals(IBP_3_9_IV0, MetadataVersion.fromVersionString("3.9",
true));
- assertEquals(IBP_3_9_IV0, MetadataVersion.fromVersionString("3.9-IV0",
true));
-
- // 4.0-IV3 is the latest production version in the 4.0 line
- assertEquals(IBP_4_0_IV3, MetadataVersion.fromVersionString("4.0",
true));
- assertEquals(IBP_4_0_IV0, MetadataVersion.fromVersionString("4.0-IV0",
true));
- assertEquals(IBP_4_0_IV1, MetadataVersion.fromVersionString("4.0-IV1",
true));
- assertEquals(IBP_4_0_IV2, MetadataVersion.fromVersionString("4.0-IV2",
true));
- assertEquals(IBP_4_0_IV3, MetadataVersion.fromVersionString("4.0-IV3",
true));
-
- // 4.1-IV1 is the latest production version in the 4.1 line
- assertEquals(IBP_4_1_IV1, MetadataVersion.fromVersionString("4.1",
true));
- assertEquals(IBP_4_1_IV0, MetadataVersion.fromVersionString("4.1-IV0",
true));
- assertEquals(IBP_4_1_IV1, MetadataVersion.fromVersionString("4.1-IV1",
true));
-
- // 4.2-IV1 is the latest production version in the 4.2 line
- assertEquals(IBP_4_2_IV1, MetadataVersion.fromVersionString("4.2",
true));
- assertEquals(IBP_4_2_IV0, MetadataVersion.fromVersionString("4.2-IV0",
true));
- assertEquals(IBP_4_2_IV1, MetadataVersion.fromVersionString("4.2-IV1",
true));
+ @ParameterizedTest
+ @EnumSource(value = MetadataVersion.class)
+ public void testFromVersionString(MetadataVersion metadataVersion) {
+ assertEquals(metadataVersion,
+ MetadataVersion.fromVersionString(metadataVersion.version(),
true));
+ }
- assertEquals(IBP_4_3_IV0, MetadataVersion.fromVersionString("4.3-IV0",
true));
+ @ParameterizedTest
+ @EnumSource(value = MetadataVersion.class)
+ public void testFromShortVersionString(MetadataVersion metadataVersion) {
+ if (metadataVersion.isProduction()) {
+ MetadataVersion resolved =
MetadataVersion.fromVersionString(metadataVersion.shortVersion(), true);
+ assertEquals(metadataVersion.shortVersion(),
resolved.shortVersion());
+ assertTrue(resolved.compareTo(metadataVersion) >= 0,
+ "Short version '" + metadataVersion.shortVersion() + "' should
resolve to the latest version in that release line");
+ }
+ }
- // Throws exception when unstableFeatureVersionsEnabled is false
- assertEquals("Unknown metadata.version '4.4-IV0'. Supported
metadata.version are: 3.3-IV3, 3.4-IV0, 3.5-IV0, 3.5-IV1, 3.5-IV2, "
- + "3.6-IV0, 3.6-IV1, 3.6-IV2, 3.7-IV0, 3.7-IV1, 3.7-IV2, 3.7-IV3,
3.7-IV4, 3.8-IV0, 3.9-IV0, 4.0-IV0, 4.0-IV1, 4.0-IV2, 4.0-IV3, 4.1-IV0, "
- + "4.1-IV1, 4.2-IV0, 4.2-IV1, 4.3-IV0",
- assertThrows(IllegalArgumentException.class, () ->
MetadataVersion.fromVersionString("4.4-IV0", false)).getMessage());
+ @Test
+ public void testFromVersionStringUnstableDisabled() {
+ MetadataVersion latestTesting = MetadataVersion.latestTesting();
+ String expectedMsg = "Unknown metadata.version '" +
latestTesting.version()
+ + "'. Supported metadata.version are: "
+ + MetadataVersion.metadataVersionsToString(MINIMUM_VERSION,
LATEST_PRODUCTION);
+ assertEquals(expectedMsg,
+ assertThrows(IllegalArgumentException.class,
+ () ->
MetadataVersion.fromVersionString(latestTesting.version(),
false)).getMessage());
}
@Test
@@ -135,60 +90,29 @@ class MetadataVersionTest {
MetadataVersion.metadataVersionsToString(MetadataVersion.IBP_3_5_IV0,
MetadataVersion.IBP_3_6_IV0));
}
- @Test
- public void testShortVersion() {
- assertEquals("3.3", IBP_3_3_IV3.shortVersion());
- assertEquals("3.4", IBP_3_4_IV0.shortVersion());
- assertEquals("3.5", IBP_3_5_IV0.shortVersion());
- assertEquals("3.5", IBP_3_5_IV1.shortVersion());
- assertEquals("3.5", IBP_3_5_IV2.shortVersion());
- assertEquals("3.6", IBP_3_6_IV0.shortVersion());
- assertEquals("3.6", IBP_3_6_IV1.shortVersion());
- assertEquals("3.6", IBP_3_6_IV2.shortVersion());
- assertEquals("3.7", IBP_3_7_IV0.shortVersion());
- assertEquals("3.7", IBP_3_7_IV1.shortVersion());
- assertEquals("3.7", IBP_3_7_IV2.shortVersion());
- assertEquals("3.7", IBP_3_7_IV3.shortVersion());
- assertEquals("3.7", IBP_3_7_IV4.shortVersion());
- assertEquals("3.8", IBP_3_8_IV0.shortVersion());
- assertEquals("3.9", IBP_3_9_IV0.shortVersion());
- assertEquals("4.0", IBP_4_0_IV0.shortVersion());
- assertEquals("4.0", IBP_4_0_IV1.shortVersion());
- assertEquals("4.0", IBP_4_0_IV2.shortVersion());
- assertEquals("4.0", IBP_4_0_IV3.shortVersion());
- assertEquals("4.1", IBP_4_1_IV0.shortVersion());
- assertEquals("4.1", IBP_4_1_IV1.shortVersion());
- assertEquals("4.2", IBP_4_2_IV0.shortVersion());
- assertEquals("4.2", IBP_4_2_IV1.shortVersion());
- assertEquals("4.3", IBP_4_3_IV0.shortVersion());
+ @ParameterizedTest
+ @EnumSource(value = MetadataVersion.class)
+ public void testShortVersion(MetadataVersion metadataVersion) {
+ assertEquals(deriveShortVersion(metadataVersion),
metadataVersion.shortVersion());
}
- @Test
- public void testVersion() {
- assertEquals("3.3-IV3", IBP_3_3_IV3.version());
- assertEquals("3.4-IV0", IBP_3_4_IV0.version());
- assertEquals("3.5-IV0", IBP_3_5_IV0.version());
- assertEquals("3.5-IV1", IBP_3_5_IV1.version());
- assertEquals("3.5-IV2", IBP_3_5_IV2.version());
- assertEquals("3.6-IV0", IBP_3_6_IV0.version());
- assertEquals("3.6-IV1", IBP_3_6_IV1.version());
- assertEquals("3.6-IV2", IBP_3_6_IV2.version());
- assertEquals("3.7-IV0", IBP_3_7_IV0.version());
- assertEquals("3.7-IV1", IBP_3_7_IV1.version());
- assertEquals("3.7-IV2", IBP_3_7_IV2.version());
- assertEquals("3.7-IV3", IBP_3_7_IV3.version());
- assertEquals("3.7-IV4", IBP_3_7_IV4.version());
- assertEquals("3.8-IV0", IBP_3_8_IV0.version());
- assertEquals("3.9-IV0", IBP_3_9_IV0.version());
- assertEquals("4.0-IV0", IBP_4_0_IV0.version());
- assertEquals("4.0-IV1", IBP_4_0_IV1.version());
- assertEquals("4.0-IV2", IBP_4_0_IV2.version());
- assertEquals("4.0-IV3", IBP_4_0_IV3.version());
- assertEquals("4.1-IV0", IBP_4_1_IV0.version());
- assertEquals("4.1-IV1", IBP_4_1_IV1.version());
- assertEquals("4.2-IV0", IBP_4_2_IV0.version());
- assertEquals("4.2-IV1", IBP_4_2_IV1.version());
- assertEquals("4.3-IV0", IBP_4_3_IV0.version());
+ @ParameterizedTest
+ @EnumSource(value = MetadataVersion.class)
+ public void testVersion(MetadataVersion metadataVersion) {
+ assertEquals(deriveVersion(metadataVersion),
metadataVersion.version());
+ }
+
+
+ private static String deriveShortVersion(MetadataVersion metadataVersion) {
+ Matcher matcher = ENUM_NAME_PATTERN.matcher(metadataVersion.name());
+ assertTrue(matcher.matches(), "Unexpected enum name format: " +
metadataVersion.name());
+ return matcher.group(1) + "." + matcher.group(2);
+ }
+
+ private static String deriveVersion(MetadataVersion metadataVersion) {
+ Matcher matcher = ENUM_NAME_PATTERN.matcher(metadataVersion.name());
+ assertTrue(matcher.matches(), "Unexpected enum name format: " +
metadataVersion.name());
+ return matcher.group(1) + "." + matcher.group(2) + "-IV" +
matcher.group(3);
}
@Test