@@ -1154,4 +1154,73 @@ variable "cluster_type" {
11541154` , name )
11551155}
11561156
1157+ func Test_versionCompare (t * testing.T ) {
1158+ tests := []struct {
1159+ name string
1160+ oldVersion string
1161+ newVersion string
1162+ expectedResult int
1163+ expectError bool
1164+ }{
1165+ // basic semver
1166+ {name : "equal versions" , oldVersion : "1.2.3" , newVersion : "1.2.3" , expectedResult : 0 },
1167+ {name : "new version newer patch" , oldVersion : "1.2.3" , newVersion : "1.2.4" , expectedResult : 1 },
1168+ {name : "new version older patch" , oldVersion : "1.2.4" , newVersion : "1.2.3" , expectedResult : - 1 },
1169+ {name : "new version newer minor" , oldVersion : "1.2.3" , newVersion : "1.3.0" , expectedResult : 1 },
1170+ {name : "new version older minor" , oldVersion : "1.3.0" , newVersion : "1.2.3" , expectedResult : - 1 },
1171+ {name : "new version newer major" , oldVersion : "1.2.3" , newVersion : "2.0.0" , expectedResult : 1 },
1172+ {name : "new version older major" , oldVersion : "2.0.0" , newVersion : "1.2.3" , expectedResult : - 1 },
1173+
1174+ // v prefix
1175+ {name : "v prefix both" , oldVersion : "v1.2.3" , newVersion : "v1.2.4" , expectedResult : 1 },
1176+ {name : "v prefix old only" , oldVersion : "v1.2.3" , newVersion : "1.2.4" , expectedResult : 1 },
1177+ {name : "v prefix new only" , oldVersion : "1.2.3" , newVersion : "v1.2.4" , expectedResult : 1 },
1178+ {name : "v prefix equal" , oldVersion : "v1.2.3" , newVersion : "v1.2.3" , expectedResult : 0 },
1179+
1180+ // pre-release suffix (per semver: release > pre-release, e.g. 1.2.3 > 1.2.3-alpha.1)
1181+ {name : "release vs pre-release" , oldVersion : "1.2.3-alpha.1" , newVersion : "1.2.3" , expectedResult : 1 },
1182+ {name : "pre-release vs release" , oldVersion : "1.2.3" , newVersion : "1.2.3-alpha.1" , expectedResult : - 1 },
1183+ {name : "pre-release equal" , oldVersion : "1.2.3-alpha.1" , newVersion : "1.2.3-alpha.1" , expectedResult : 0 },
1184+ {name : "pre-release numeric diff" , oldVersion : "1.2.3-alpha.1" , newVersion : "1.2.3-alpha.2" , expectedResult : 1 },
1185+ {name : "pre-release string diff" , oldVersion : "1.2.3-alpha.1" , newVersion : "1.2.3-beta.1" , expectedResult : 1 },
1186+ {name : "pre-release with aliyun" , oldVersion : "1.9.3-aliyun.1" , newVersion : "1.9.7-aliyun.2" , expectedResult : 1 },
1187+ {name : "pre-release newer major version" , oldVersion : "1.9.3-aliyun.1" , newVersion : "2.0.0-aliyun.1" , expectedResult : 1 },
1188+
1189+ // apsara format
1190+ {name : "apsara same main version, suffix newer" , oldVersion : "v1.31.0-apsara.6.11.6.ad796663" , newVersion : "v1.31.0-apsara.6.11.7.17d202a9" , expectedResult : 1 },
1191+ {name : "apsara same main version, suffix older" , oldVersion : "v1.31.0-apsara.6.11.7.17d202a9" , newVersion : "v1.31.0-apsara.6.11.6.ad796663" , expectedResult : - 1 },
1192+ {name : "apsara same numeric suffix, diff commit hash" , oldVersion : "v1.31.0-apsara.6.11.6.ad796663" , newVersion : "v1.31.0-apsara.6.11.6.bf123456" , expectedResult : 1 },
1193+ {name : "apsara different main version" , oldVersion : "v1.30.0-apsara.6.11.6.ad796663" , newVersion : "v1.31.0-apsara.6.11.6.ad796663" , expectedResult : 1 },
1194+
1195+ // empty versions
1196+ {name : "both empty" , oldVersion : "" , newVersion : "" , expectedResult : 0 },
1197+ {name : "old empty" , oldVersion : "" , newVersion : "1.2.3" , expectedResult : 1 },
1198+ {name : "new empty" , oldVersion : "1.2.3" , newVersion : "" , expectedResult : - 1 },
1199+
1200+ // invalid format
1201+ {name : "invalid old version" , oldVersion : "latest" , newVersion : "1.2.3" , expectError : true },
1202+ {name : "invalid new version" , oldVersion : "1.2.3" , newVersion : "latest" , expectError : true },
1203+ {name : "both invalid" , oldVersion : "abc" , newVersion : "xyz" , expectError : true },
1204+ }
1205+
1206+ for _ , tt := range tests {
1207+ t .Run (tt .name , func (t * testing.T ) {
1208+ result , err := versionCompare (tt .oldVersion , tt .newVersion )
1209+ if tt .expectError {
1210+ if err == nil {
1211+ t .Errorf ("expected error but got nil, result=%d" , result )
1212+ }
1213+ return
1214+ }
1215+ if err != nil {
1216+ t .Errorf ("unexpected error: %v" , err )
1217+ return
1218+ }
1219+ if result != tt .expectedResult {
1220+ t .Errorf ("versionCompare(%q, %q) = %d, want %d" , tt .oldVersion , tt .newVersion , result , tt .expectedResult )
1221+ }
1222+ })
1223+ }
1224+ }
1225+
11571226// Test Ack Cluster. <<< Resource test cases, automatically generated.
0 commit comments