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

Reply via email to