2626import static org .apache .kafka .server .common .MetadataVersion .*;
2727import static org .junit .jupiter .api .Assertions .assertEquals ;
2828import static org .junit .jupiter .api .Assertions .assertFalse ;
29+ import static org .junit .jupiter .api .Assertions .assertThrows ;
2930import static org .junit .jupiter .api .Assertions .assertTrue ;
3031
3132class MetadataVersionTest {
@@ -42,55 +43,69 @@ public void testFeatureLevels() {
4243 @ SuppressWarnings ("checkstyle:JavaNCSS" )
4344 public void testFromVersionString () {
4445 // 3.3-IV3 is the latest production version in the 3.3 line
45- assertEquals (IBP_3_3_IV3 , MetadataVersion .fromVersionString ("3.3" ));
46- assertEquals (IBP_3_3_IV3 , MetadataVersion .fromVersionString ("3.3-IV3" ));
46+ assertEquals (IBP_3_3_IV3 , MetadataVersion .fromVersionString ("3.3" , true ));
47+ assertEquals (IBP_3_3_IV3 , MetadataVersion .fromVersionString ("3.3-IV3" , true ));
4748
4849 // 3.4-IV0 is the latest production version in the 3.4 line
49- assertEquals (IBP_3_4_IV0 , MetadataVersion .fromVersionString ("3.4" ));
50- assertEquals (IBP_3_4_IV0 , MetadataVersion .fromVersionString ("3.4-IV0" ));
50+ assertEquals (IBP_3_4_IV0 , MetadataVersion .fromVersionString ("3.4" , true ));
51+ assertEquals (IBP_3_4_IV0 , MetadataVersion .fromVersionString ("3.4-IV0" , true ));
5152
5253 // 3.5-IV2 is the latest production version in the 3.5 line
53- assertEquals (IBP_3_5_IV2 , MetadataVersion .fromVersionString ("3.5" ));
54- assertEquals (IBP_3_5_IV0 , MetadataVersion .fromVersionString ("3.5-IV0" ));
55- assertEquals (IBP_3_5_IV1 , MetadataVersion .fromVersionString ("3.5-IV1" ));
56- assertEquals (IBP_3_5_IV2 , MetadataVersion .fromVersionString ("3.5-IV2" ));
54+ assertEquals (IBP_3_5_IV2 , MetadataVersion .fromVersionString ("3.5" , true ));
55+ assertEquals (IBP_3_5_IV0 , MetadataVersion .fromVersionString ("3.5-IV0" , true ));
56+ assertEquals (IBP_3_5_IV1 , MetadataVersion .fromVersionString ("3.5-IV1" , true ));
57+ assertEquals (IBP_3_5_IV2 , MetadataVersion .fromVersionString ("3.5-IV2" , true ));
5758
5859 // 3.6-IV2 is the latest production version in the 3.6 line
59- assertEquals (IBP_3_6_IV2 , MetadataVersion .fromVersionString ("3.6" ));
60- assertEquals (IBP_3_6_IV0 , MetadataVersion .fromVersionString ("3.6-IV0" ));
61- assertEquals (IBP_3_6_IV1 , MetadataVersion .fromVersionString ("3.6-IV1" ));
62- assertEquals (IBP_3_6_IV2 , MetadataVersion .fromVersionString ("3.6-IV2" ));
60+ assertEquals (IBP_3_6_IV2 , MetadataVersion .fromVersionString ("3.6" , true ));
61+ assertEquals (IBP_3_6_IV0 , MetadataVersion .fromVersionString ("3.6-IV0" , true ));
62+ assertEquals (IBP_3_6_IV1 , MetadataVersion .fromVersionString ("3.6-IV1" , true ));
63+ assertEquals (IBP_3_6_IV2 , MetadataVersion .fromVersionString ("3.6-IV2" , true ));
6364
6465 // 3.7-IV4 is the latest production version in the 3.7 line
65- assertEquals (IBP_3_7_IV4 , MetadataVersion .fromVersionString ("3.7" ));
66- assertEquals (IBP_3_7_IV0 , MetadataVersion .fromVersionString ("3.7-IV0" ));
67- assertEquals (IBP_3_7_IV1 , MetadataVersion .fromVersionString ("3.7-IV1" ));
68- assertEquals (IBP_3_7_IV2 , MetadataVersion .fromVersionString ("3.7-IV2" ));
69- assertEquals (IBP_3_7_IV3 , MetadataVersion .fromVersionString ("3.7-IV3" ));
70- assertEquals (IBP_3_7_IV4 , MetadataVersion .fromVersionString ("3.7-IV4" ));
66+ assertEquals (IBP_3_7_IV4 , MetadataVersion .fromVersionString ("3.7" , true ));
67+ assertEquals (IBP_3_7_IV0 , MetadataVersion .fromVersionString ("3.7-IV0" , true ));
68+ assertEquals (IBP_3_7_IV1 , MetadataVersion .fromVersionString ("3.7-IV1" , true ));
69+ assertEquals (IBP_3_7_IV2 , MetadataVersion .fromVersionString ("3.7-IV2" , true ));
70+ assertEquals (IBP_3_7_IV3 , MetadataVersion .fromVersionString ("3.7-IV3" , true ));
71+ assertEquals (IBP_3_7_IV4 , MetadataVersion .fromVersionString ("3.7-IV4" , true ));
7172
7273 // 3.8-IV0 is the latest production version in the 3.8 line
73- assertEquals (IBP_3_8_IV0 , MetadataVersion .fromVersionString ("3.8" ));
74- assertEquals (IBP_3_8_IV0 , MetadataVersion .fromVersionString ("3.8-IV0" ));
74+ assertEquals (IBP_3_8_IV0 , MetadataVersion .fromVersionString ("3.8" , true ));
75+ assertEquals (IBP_3_8_IV0 , MetadataVersion .fromVersionString ("3.8-IV0" , true ));
7576
7677 // 3.9-IV0 is the latest production version in the 3.9 line
77- assertEquals (IBP_3_9_IV0 , MetadataVersion .fromVersionString ("3.9" ));
78- assertEquals (IBP_3_9_IV0 , MetadataVersion .fromVersionString ("3.9-IV0" ));
78+ assertEquals (IBP_3_9_IV0 , MetadataVersion .fromVersionString ("3.9" , true ));
79+ assertEquals (IBP_3_9_IV0 , MetadataVersion .fromVersionString ("3.9-IV0" , true ));
7980
8081 // 4.0-IV3 is the latest production version in the 4.0 line
81- assertEquals (IBP_4_0_IV3 , MetadataVersion .fromVersionString ("4.0" ));
82- assertEquals (IBP_4_0_IV0 , MetadataVersion .fromVersionString ("4.0-IV0" ));
83- assertEquals (IBP_4_0_IV1 , MetadataVersion .fromVersionString ("4.0-IV1" ));
84- assertEquals (IBP_4_0_IV2 , MetadataVersion .fromVersionString ("4.0-IV2" ));
85- assertEquals (IBP_4_0_IV3 , MetadataVersion .fromVersionString ("4.0-IV3" ));
82+ assertEquals (IBP_4_0_IV3 , MetadataVersion .fromVersionString ("4.0" , true ));
83+ assertEquals (IBP_4_0_IV0 , MetadataVersion .fromVersionString ("4.0-IV0" , true ));
84+ assertEquals (IBP_4_0_IV1 , MetadataVersion .fromVersionString ("4.0-IV1" , true ));
85+ assertEquals (IBP_4_0_IV2 , MetadataVersion .fromVersionString ("4.0-IV2" , true ));
86+ assertEquals (IBP_4_0_IV3 , MetadataVersion .fromVersionString ("4.0-IV3" , true ));
8687
8788 // 4.1-IV1 is the latest production version in the 4.1 line
88- assertEquals (IBP_4_1_IV1 , MetadataVersion .fromVersionString ("4.1" ));
89- assertEquals (IBP_4_1_IV0 , MetadataVersion .fromVersionString ("4.1-IV0" ));
90- assertEquals (IBP_4_1_IV1 , MetadataVersion .fromVersionString ("4.1-IV1" ));
89+ assertEquals (IBP_4_1_IV1 , MetadataVersion .fromVersionString ("4.1" , true ));
90+ assertEquals (IBP_4_1_IV0 , MetadataVersion .fromVersionString ("4.1-IV0" , true ));
91+ assertEquals (IBP_4_1_IV1 , MetadataVersion .fromVersionString ("4.1-IV1" , true ));
92+
93+ assertEquals (IBP_4_2_IV0 , MetadataVersion .fromVersionString ("4.2-IV0" , true ));
94+ assertEquals (IBP_4_2_IV1 , MetadataVersion .fromVersionString ("4.2-IV1" , true ));
95+
96+ // Throws exception when unstableFeatureVersionsEnabled is false
97+ assertEquals ("Unknown metadata.version '4.2-IV0'. Supported metadata.version are: 3.3-IV3, 3.4-IV0, 3.5-IV0, 3.5-IV1, 3.5-IV2, "
98+ + "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" ,
99+ assertThrows (IllegalArgumentException .class , () -> fromVersionString ("4.2-IV0" , false )).getMessage ());
100+ assertEquals ("Unknown metadata.version '4.2-IV1'. Supported metadata.version are: 3.3-IV3, 3.4-IV0, 3.5-IV0, 3.5-IV1, 3.5-IV2, "
101+ + "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" ,
102+ assertThrows (IllegalArgumentException .class , () -> fromVersionString ("4.2-IV1" , false )).getMessage ());
103+ }
91104
92- assertEquals (IBP_4_2_IV0 , MetadataVersion .fromVersionString ("4.2-IV0" ));
93- assertEquals (IBP_4_2_IV1 , MetadataVersion .fromVersionString ("4.2-IV1" ));
105+ @ Test
106+ public void testMetadataVersionsToString () {
107+ assertEquals ("3.5-IV0, 3.5-IV1, 3.5-IV2, 3.6-IV0" ,
108+ MetadataVersion .metadataVersionsToString (MetadataVersion .IBP_3_5_IV0 , MetadataVersion .IBP_3_6_IV0 ));
94109 }
95110
96111 @ Test
0 commit comments