From c688478a28ba01827cbd1d4dba88547faa6fec0e Mon Sep 17 00:00:00 2001 From: Ricardo Katz Date: Thu, 13 Jul 2023 13:56:49 -0300 Subject: [PATCH] Fix lifecycle generator to check the version correctly (#119268) * Fix lifecycle generator to check the version correctly * Fix file header Co-authored-by: Antonio Ojea --------- Co-authored-by: Antonio Ojea --- .../prerelease-lifecycle-generators/status.go | 13 +- .../status_test.go | 148 ++++++++++++++++++ 2 files changed, 150 insertions(+), 11 deletions(-) create mode 100644 staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status_test.go diff --git a/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status.go b/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status.go index 991b122f5f6..aebfeca41e7 100644 --- a/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status.go +++ b/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status.go @@ -71,7 +71,7 @@ func extractKubeVersionTag(tagName string, t *types.Type) (*tagValue, int, int, } splitValue := strings.Split(rawTag.value, ".") - if len(splitValue) != 2 || len(splitValue[0]) == 0 || len(splitValue[0]) == 0 { + if len(splitValue) != 2 || len(splitValue[0]) == 0 || len(splitValue[1]) == 0 { return nil, -1, -1, fmt.Errorf("%v format must match %v=xx.yy tag", t, tagName) } major, err := strconv.ParseInt(splitValue[0], 10, 32) @@ -159,16 +159,7 @@ func extractTag(tagName string, comments []string) *tagValue { for i := range parts { kv := strings.SplitN(parts[i], "=", 2) k := kv[0] - //v := "" - //if len(kv) == 2 { - // v = kv[1] - //} - switch k { - //case "register": - // if v != "false" { - // tag.register = true - // } - default: + if k != "" { klog.Fatalf("Unsupported %s param: %q", tagName, parts[i]) } } diff --git a/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status_test.go b/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status_test.go new file mode 100644 index 00000000000..dad1a5fb210 --- /dev/null +++ b/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status_test.go @@ -0,0 +1,148 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package prereleaselifecyclegenerators + +import ( + "reflect" + "testing" + + "k8s.io/gengo/types" +) + +var mockType = &types.Type{ + CommentLines: []string{ + "RandomType defines a random structure in Kubernetes", + "It should be used just when you need something different than 42", + }, + SecondClosestCommentLines: []string{}, +} + +func Test_extractKubeVersionTag(t *testing.T) { + tests := []struct { + name string + tagName string + tagComments []string + wantValue *tagValue + wantMajor int + wantMinor int + wantErr bool + }{ + { + name: "not found tag should generate an error", + tagName: "someVersionTag:version", + tagComments: []string{ + "+someOtherTag:version=1.5", + }, + wantValue: nil, + wantErr: true, + }, + { + name: "found tag should return correctly", + tagName: "someVersionTag:version", + tagComments: []string{ + "+someVersionTag:version=1.5", + }, + wantValue: &tagValue{ + value: "1.5", + }, + wantMajor: 1, + wantMinor: 5, + wantErr: false, + }, + /*{ + name: "multiple declarations of same tag should return an error", + tagName: "someVersionTag:version", + tagComments: []string{ + "+someVersionTag:version=1.5", + "+someVersionTag:version=v1.7", + }, + wantValue: nil, + wantErr: true, // TODO: Today it is klog.Fatal, check how to capture it + }, + { + name: "multiple values on same tag should return an error", + tagName: "someVersionTag:version", + tagComments: []string{ + "+someVersionTag:version=1.5,something", + }, + wantValue: nil, + wantErr: true, // TODO: Today it is klog.Fatal, check how to capture it + },*/ + { + name: "wrong tag major value should return an error", + tagName: "someVersionTag:version", + tagComments: []string{ + "+someVersionTag:version=.5", + }, + wantErr: true, + }, + { + name: "wrong tag minor value should return an error", + tagName: "someVersionTag:version", + tagComments: []string{ + "+someVersionTag:version=1.", + }, + wantErr: true, + }, + { + name: "wrong tag format should return an error", + tagName: "someVersionTag:version", + tagComments: []string{ + "+someVersionTag:version=1.5.7", + }, + wantErr: true, + }, + { + name: "wrong tag major int value should return an error", + tagName: "someVersionTag:version", + tagComments: []string{ + "+someVersionTag:version=blah.5", + }, + wantErr: true, + }, + { + name: "wrong tag minor int value should return an error", + tagName: "someVersionTag:version", + tagComments: []string{ + "+someVersionTag:version=1.blah", + }, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockType.SecondClosestCommentLines = tt.tagComments + gotTag, gotMajor, gotMinor, err := extractKubeVersionTag(tt.tagName, mockType) + if (err != nil) != tt.wantErr { + t.Errorf("extractKubeVersionTag() error = %v, wantErr %v", err, tt.wantErr) + return + } + if tt.wantErr { + return + } + if !reflect.DeepEqual(gotTag, tt.wantValue) { + t.Errorf("extractKubeVersionTag() got = %v, want %v", gotTag, tt.wantValue) + } + if gotMajor != tt.wantMajor { + t.Errorf("extractKubeVersionTag() got1 = %v, want %v", gotMajor, tt.wantMajor) + } + if gotMinor != tt.wantMinor { + t.Errorf("extractKubeVersionTag() got2 = %v, want %v", gotMinor, tt.wantMinor) + } + }) + } +}