Add common flag validation functionality shared by kube-binaries

This commit is contained in:
RainbowMango 2019-10-31 09:40:23 +08:00
parent eedfb6bc7a
commit 0efb642fec
2 changed files with 76 additions and 0 deletions

View File

@ -49,6 +49,29 @@ func shouldHide(currentVersion *semver.Version, deprecatedVersion *semver.Versio
return false
}
func validateShowHiddenMetricsVersion(currentVersion semver.Version, targetVersionStr string) error {
if targetVersionStr == "" {
return nil
}
validVersionStr := fmt.Sprintf("%d.%d", currentVersion.Major, currentVersion.Minor-1)
if targetVersionStr != validVersionStr {
return fmt.Errorf("--show-hidden-metrics-for-version must be omitted or have the value '%v'. Only the previous minor version is allowed", validVersionStr)
}
return nil
}
// ValidateShowHiddenMetricsVersion checks invalid version for which show hidden metrics.
func ValidateShowHiddenMetricsVersion(v string) []error {
err := validateShowHiddenMetricsVersion(parseVersion(version.Get()), v)
if err != nil {
return []error{err}
}
return nil
}
// SetShowHidden will enable showing hidden metrics. This will no-opt
// after the initial call
func SetShowHidden() {

View File

@ -264,3 +264,56 @@ func TestShowHiddenMetric(t *testing.T) {
assert.Nil(t, err, "Gather failed %v", err)
}
func TestValidateShowHiddenMetricsVersion(t *testing.T) {
currentVersion := parseVersion(apimachineryversion.Info{
Major: "1",
Minor: "17",
GitVersion: "v1.17.1-alpha-1.12345",
})
var tests = []struct {
desc string
targetVersion string
expectedError bool
}{
{
desc: "invalid version is not allowed",
targetVersion: "1.invalid",
expectedError: true,
},
{
desc: "patch version is not allowed",
targetVersion: "1.16.0",
expectedError: true,
},
{
desc: "old version is not allowed",
targetVersion: "1.15",
expectedError: true,
},
{
desc: "new version is not allowed",
targetVersion: "1.17",
expectedError: true,
},
{
desc: "valid version is allowed",
targetVersion: "1.16",
expectedError: false,
},
}
for _, test := range tests {
tc := test
t.Run(tc.desc, func(t *testing.T) {
err := validateShowHiddenMetricsVersion(currentVersion, tc.targetVersion)
if tc.expectedError {
assert.Errorf(t, err, "Failed to test: %s", tc.desc)
} else {
assert.NoErrorf(t, err, "Failed to test: %s", tc.desc)
}
})
}
}