Fixes review comments

Match standards within codebase

Signed-off-by: James Payne <jamoflaw@gmail.com>
pull/30826/head
James Payne 5 months ago
parent 63e8696671
commit da26816c56

@ -53,7 +53,8 @@ func ContainsTag(tags []string, tag string) bool {
return false return false
} }
// GetTagMatchingVersionOrConstraint expects a sorted slice of semver tags (highest version first) // GetTagMatchingVersionOrConstraint gets the latest tag matching a given semver constraint.
// Expects tags to be a sorted slice of semver tags (highest version first)
func GetTagMatchingVersionOrConstraint(tags []string, versionString string) (string, error) { func GetTagMatchingVersionOrConstraint(tags []string, versionString string) (string, error) {
var constraint *semver.Constraints var constraint *semver.Constraints
if versionString == "" { if versionString == "" {

@ -17,6 +17,7 @@ limitations under the License.
package registry // import "helm.sh/helm/v4/pkg/registry" package registry // import "helm.sh/helm/v4/pkg/registry"
import ( import (
"fmt"
"reflect" "reflect"
"testing" "testing"
"time" "time"
@ -277,16 +278,57 @@ func TestGenerateOCICreatedAnnotations(t *testing.T) {
func TestIsOCI(t *testing.T) { func TestIsOCI(t *testing.T) {
assert.True(t, IsOCI("oci://example.com/myregistry:1.2.3"), "OCI URL marked as invalid") tests := []struct {
assert.False(t, IsOCI("noci://example.com/myregistry:1.2.3"), "Invalid OCI URL marked as valid") name string
assert.False(t, IsOCI("ocin://example.com/myregistry:1.2.3"), "Invalid OCI URL marked as valid") url string
isValid bool
}{
{
name: "Valid url",
url: "oci://example.com/myregistry:1.2.3",
isValid: true,
},
{
name: "Invalid URL prefix (boundary test 1)",
url: "noci://example.com/myregistry:1.2.3",
isValid: false,
},
{
name: "Invalid URL prefix (boundary test 2)",
url: "ocin://example.com/myregistry:1.2.3",
isValid: false,
},
}
for _, tt := range tests {
assert.Equal(t, tt.isValid, IsOCI(tt.url), tt.name)
}
} }
func TestContainsTag(t *testing.T) { func TestContainsTag(t *testing.T) {
tagList := []string{"1.0.0", "1.0.1", "2.0.0", "2.1.0"} tagList := []string{"1.0.0", "1.0.1", "2.0.0", "2.1.0"}
assert.True(t, ContainsTag(tagList, "1.0.1"), "The tag 1.0.1 is in the list")
assert.False(t, ContainsTag(tagList, "1.0.2"), "the tag 1.0.2 is not in the list") tests := []struct {
name string
tag string
present bool
}{
{
name: "tag present",
tag: "1.0.1",
present: true,
},
{
name: "tag not present",
tag: "1.0.2",
present: false,
},
}
for _, tt := range tests {
assert.Equal(t, tt.present, ContainsTag(tagList, tt.tag), tt.name)
}
} }
func TestGetTagMatchingVersionOrConstraint(t *testing.T) { func TestGetTagMatchingVersionOrConstraint(t *testing.T) {
@ -314,145 +356,201 @@ func TestGetTagMatchingVersionOrConstraint(t *testing.T) {
"0.0.1", "0.0.1",
} }
// Explicit verion tests := []struct {
version, err := GetTagMatchingVersionOrConstraint(tagList, "1.10.0") name string
assert.Nil(t, err, "Valid tag constraint query should not produce an error") versionConstraint string
assert.Equal(t, "1.10.0", version, "The expected matching version is 1.10.0") expectErr bool
expectVersion string
// Implicit wildcard default from empty string }{
version, err = GetTagMatchingVersionOrConstraint(tagList, "") {
assert.Nil(t, err, "Valid tag constraint query should not produce an error") name: "Explicit version",
assert.Equal(t, "10.0.1", version, "The expected matching version is 10.0.1") versionConstraint: "1.10.0",
expectErr: false,
// No versions within wildcard constraint expectVersion: "1.10.0",
version, err = GetTagMatchingVersionOrConstraint(tagList, "50.*") },
assert.Error(t, err, "An invalid version constraint (no valid version found) should produce an error") {
assert.Equal(t, "", version, "An invalid version constraint (no valid version found) should return an empty string as the version") name: "Implicit wildcard default from empty string",
versionConstraint: "",
// Invalid version constraint expectErr: false,
version, err = GetTagMatchingVersionOrConstraint(tagList, "<>!=20") expectVersion: "10.0.1",
assert.Error(t, err, "An invalid version constraint (non-parsable constraint) should produce an error") },
assert.Equal(t, "", version, "An invalid version constraint (non-parseable constraint) should return an empty string as the version") {
name: "No versions within wildcard constraint",
// Explicit wildcard versionConstraint: "50.*",
version, err = GetTagMatchingVersionOrConstraint(tagList, "*") expectErr: true,
assert.Nil(t, err, "Valid tag constraint query should not produce an error") expectVersion: "",
assert.Equal(t, "10.0.1", version, "The expected matching version is 10.0.1") },
{
// Major version wildcard selection name: "Invalid version constraint",
version, err = GetTagMatchingVersionOrConstraint(tagList, "2.*") versionConstraint: "<>!=20",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") expectErr: true,
assert.Equal(t, "2.0.11", version, "The expected matching version is 2.0.11") expectVersion: "",
},
// Minor version wildcard selection {
version, err = GetTagMatchingVersionOrConstraint(tagList, "3.1.*") name: "Explicit wildcard",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") versionConstraint: "*",
assert.Equal(t, "3.1.0", version, "The expected matching version is 3.1.0") expectErr: false,
expectVersion: "10.0.1",
// ~ major },
version, err = GetTagMatchingVersionOrConstraint(tagList, "~1") {
assert.Nil(t, err, "Valid tag constraint query should not produce an error") name: "Major version wildcard selection",
assert.Equal(t, "1.10.0", version, "The expected matching version is 1.10.0") versionConstraint: "2.*",
expectErr: false,
version, err = GetTagMatchingVersionOrConstraint(tagList, "~1.x") expectVersion: "2.0.11",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") },
assert.Equal(t, "1.10.0", version, "The expected matching version is 1.10.0") {
name: "Minor version wildcard selection",
// ~ specific version versionConstraint: "3.1.*",
version, err = GetTagMatchingVersionOrConstraint(tagList, "~1.9.0") expectErr: false,
assert.Nil(t, err, "Valid tag constraint query should not produce an error") expectVersion: "3.1.0",
assert.Equal(t, "1.9.1", version, "The expected matching version is 1.9.1") },
{
// ~ minor version name: "~ major version",
version, err = GetTagMatchingVersionOrConstraint(tagList, "~1.9") versionConstraint: "~1",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") expectErr: false,
assert.Equal(t, "1.9.1", version, "The expected matching version is 1.9.1") expectVersion: "1.10.0",
},
version, err = GetTagMatchingVersionOrConstraint(tagList, "~1.9.x") {
assert.Nil(t, err, "Valid tag constraint query should not produce an error") name: "~ major version plus x",
assert.Equal(t, "1.9.1", version, "The expected matching version is 1.9.1") versionConstraint: "~1.x",
expectErr: false,
// ^ specific version expectVersion: "1.10.0",
version, err = GetTagMatchingVersionOrConstraint(tagList, "^1.9.0") },
assert.Nil(t, err, "Valid tag constraint query should not produce an error") {
assert.Equal(t, "1.10.0", version, "The expected matching version is 1.10.0") name: "~ specific version",
versionConstraint: "~1.9.0",
// ^ major version >= 1 expectErr: false,
version, err = GetTagMatchingVersionOrConstraint(tagList, "^1.9.x") expectVersion: "1.9.1",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") },
assert.Equal(t, "1.10.0", version, "The expected matching version is 1.10.0") {
name: "~ minor version",
version, err = GetTagMatchingVersionOrConstraint(tagList, "^1.9") versionConstraint: "~1.9",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") expectErr: false,
assert.Equal(t, "1.10.0", version, "The expected matching version is 1.10.0") expectVersion: "1.9.1",
},
version, err = GetTagMatchingVersionOrConstraint(tagList, "^1.x") {
assert.Nil(t, err, "Valid tag constraint query should not produce an error") name: "~ minor version plus x",
assert.Equal(t, "1.10.0", version, "The expected matching version is 1.10.0") versionConstraint: "~1.9.x",
expectErr: false,
// ^ minor version < 1 expectVersion: "1.9.1",
version, err = GetTagMatchingVersionOrConstraint(tagList, "^0.2.1") },
assert.Nil(t, err, "Valid tag constraint query should not produce an error") {
assert.Equal(t, "0.2.2", version, "The expected matching version is 0.2.2") name: "^ specific version",
versionConstraint: "^1.9.0",
version, err = GetTagMatchingVersionOrConstraint(tagList, "^0.2") expectErr: false,
assert.Nil(t, err, "Valid tag constraint query should not produce an error") expectVersion: "1.10.0",
assert.Equal(t, "0.2.2", version, "The expected matching version is 0.2.2") },
{
// ^ patch version name: "^ minor version version >=1",
version, err = GetTagMatchingVersionOrConstraint(tagList, "^0.0.2") versionConstraint: "^1.9",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") expectErr: false,
assert.Equal(t, "0.0.2", version, "The expected matching version is 0.0.2") expectVersion: "1.10.0",
},
version, err = GetTagMatchingVersionOrConstraint(tagList, "^0.0") {
assert.Nil(t, err, "Valid tag constraint query should not produce an error") name: "^ minor version plus x >=1",
assert.Equal(t, "0.0.3", version, "The expected matching version is 0.0.3") versionConstraint: "^1.9.x",
expectErr: false,
version, err = GetTagMatchingVersionOrConstraint(tagList, "^0") expectVersion: "1.10.0",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") },
assert.Equal(t, "0.3.0", version, "The expected matching version is 0.3.0") {
name: "^ major version plus x >=1",
// = versionConstraint: "^1.x",
version, err = GetTagMatchingVersionOrConstraint(tagList, "=1.9.0") expectErr: false,
assert.Nil(t, err, "Valid tag constraint query should not produce an error") expectVersion: "1.10.0",
assert.Equal(t, "1.9.0", version, "The expected matching version is 1.9.0") },
{
// != name: "^ full version <1",
version, err = GetTagMatchingVersionOrConstraint(tagList, "!=1.9.0") versionConstraint: "^0.2.1",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") expectErr: false,
assert.Equal(t, "10.0.1", version, "The expected matching version is 10.0.1") expectVersion: "0.2.2",
},
// > {
version, err = GetTagMatchingVersionOrConstraint(tagList, ">1.9.0") name: "^ minor version <1",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") versionConstraint: "^0.2",
assert.Equal(t, "10.0.1", version, "The expected matching version is 10.0.1") expectErr: false,
expectVersion: "0.2.2",
// < },
version, err = GetTagMatchingVersionOrConstraint(tagList, "<1.9.0") {
assert.Nil(t, err, "Valid tag constraint query should not produce an error") name: "^ patch version < 0.1",
assert.Equal(t, "1.0.0", version, "The expected matching version is 1.0.0") versionConstraint: "^0.0.2",
expectErr: false,
// >= expectVersion: "0.0.2",
version, err = GetTagMatchingVersionOrConstraint(tagList, ">=1.9.0") },
assert.Nil(t, err, "Valid tag constraint query should not produce an error") {
assert.Equal(t, "10.0.1", version, "The expected matching version is 10.0.1") name: "^ with 0.0",
versionConstraint: "^0.0",
// <= expectErr: false,
version, err = GetTagMatchingVersionOrConstraint(tagList, "<=1.9.0") expectVersion: "0.0.3",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") },
assert.Equal(t, "1.9.0", version, "The expected matching version is 1.9.0") {
name: "^ with 0",
// , separation versionConstraint: "^0",
version, err = GetTagMatchingVersionOrConstraint(tagList, ">=1.9.0, <1.10.0") expectErr: false,
assert.Nil(t, err, "Valid tag constraint query should not produce an error") expectVersion: "0.3.0",
assert.Equal(t, "1.9.1", version, "The expected matching version is 1.9.1") },
{
version, err = GetTagMatchingVersionOrConstraint(tagList, ">=1.9.0, <=1.10.0, !=1.10.0") name: "= operator",
assert.Nil(t, err, "Valid tag constraint query should not produce an error") versionConstraint: "=1.9.0",
assert.Equal(t, "1.9.1", version, "The expected matching version is 1.9.1") expectErr: false,
expectVersion: "1.9.0",
// || },
version, err = GetTagMatchingVersionOrConstraint(tagList, ">=1.1.0, <=1.10.0 || >=2.0.0, <3.0.0") {
assert.Nil(t, err, "Valid tag constraint query should not produce an error") name: "!= operator",
assert.Equal(t, "2.0.11", version, "The expected matching version is 2.0.11") versionConstraint: "!=1.9.0",
expectErr: false,
expectVersion: "10.0.1",
},
{
name: "> operator",
versionConstraint: ">1.9.0",
expectErr: false,
expectVersion: "10.0.1",
},
{
name: "< operator",
versionConstraint: "<1.9.0",
expectErr: false,
expectVersion: "1.0.0",
},
{
name: ">= operator",
versionConstraint: ">=1.9.0",
expectErr: false,
expectVersion: "10.0.1",
},
{
name: "<= operator",
versionConstraint: "<=1.9.0",
expectErr: false,
expectVersion: "1.9.0",
},
{
name: "gte and less than combination",
versionConstraint: ">=1.9.0, <1.10.0",
expectErr: false,
expectVersion: "1.9.1",
},
{
name: "gte and lte with a negation combination",
versionConstraint: ">=1.9.0, <=1.10.0, !=1.10.0",
expectErr: false,
expectVersion: "1.9.1",
},
{
name: "multiple ranges separated by ||",
versionConstraint: ">=1.1.0, <=1.10.0 || >=2.0.0, <3.0.0",
expectErr: false,
expectVersion: "2.0.11",
},
}
for _, tt := range tests {
version, err := GetTagMatchingVersionOrConstraint(tagList, tt.versionConstraint)
if tt.expectErr {
assert.Error(t, err, fmt.Sprintf("Should produce an error (%s)", tt.name))
} else {
assert.Nil(t, err, fmt.Sprintf("Error should be nil (%s)", tt.name))
}
assert.Equal(t, tt.expectVersion, version, fmt.Sprintf("The expected matching version is %s (%s)", tt.expectVersion, tt.name))
}
} }

Loading…
Cancel
Save