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 <antonio.ojea.garcia@gmail.com> --------- Co-authored-by: Antonio Ojea <antonio.ojea.garcia@gmail.com>
This commit is contained in:
		@@ -71,7 +71,7 @@ func extractKubeVersionTag(tagName string, t *types.Type) (*tagValue, int, int,
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	splitValue := strings.Split(rawTag.value, ".")
 | 
						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)
 | 
							return nil, -1, -1, fmt.Errorf("%v format must match %v=xx.yy tag", t, tagName)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	major, err := strconv.ParseInt(splitValue[0], 10, 32)
 | 
						major, err := strconv.ParseInt(splitValue[0], 10, 32)
 | 
				
			||||||
@@ -159,16 +159,7 @@ func extractTag(tagName string, comments []string) *tagValue {
 | 
				
			|||||||
	for i := range parts {
 | 
						for i := range parts {
 | 
				
			||||||
		kv := strings.SplitN(parts[i], "=", 2)
 | 
							kv := strings.SplitN(parts[i], "=", 2)
 | 
				
			||||||
		k := kv[0]
 | 
							k := kv[0]
 | 
				
			||||||
		//v := ""
 | 
							if k != "" {
 | 
				
			||||||
		//if len(kv) == 2 {
 | 
					 | 
				
			||||||
		//	v = kv[1]
 | 
					 | 
				
			||||||
		//}
 | 
					 | 
				
			||||||
		switch k {
 | 
					 | 
				
			||||||
		//case "register":
 | 
					 | 
				
			||||||
		//	if v != "false" {
 | 
					 | 
				
			||||||
		//		tag.register = true
 | 
					 | 
				
			||||||
		//	}
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			klog.Fatalf("Unsupported %s param: %q", tagName, parts[i])
 | 
								klog.Fatalf("Unsupported %s param: %q", tagName, parts[i])
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user