Skip to content

Commit

Permalink
add more tests for calver strategy
Browse files Browse the repository at this point in the history
  • Loading branch information
r4vi committed Jan 23, 2025
1 parent fca454f commit 37aeca6
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions registry-scanner/pkg/image/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,65 @@ func Test_LatestVersion(t *testing.T) {
newTag, err := img.GetNewestVersionFromTags(&vc, tagList)
assert.NoError(t, err)
assert.NotNil(t, newTag)
assert.Equal(t, "2025.01.25", newTag.TagName)
})

t.Run("Find latest version with YYYY.MM calver format", func(t *testing.T) {
tagList := newImageTagList([]string{"2021.01", "2022.02", "2023.05", "2025.01"})
img := NewFromIdentifier("jannfis/test:2021.01")
vc := VersionConstraint{Constraint: "2022.01", Strategy: StrategyCalVer, MatchArgs: "YYYY.MM"}
newTag, err := img.GetNewestVersionFromTags(&vc, tagList)
assert.NoError(t, err)
assert.NotNil(t, newTag)
assert.Equal(t, "2025.01", newTag.TagName)
})

t.Run("Find latest version with YY.MM.DD calver format", func(t *testing.T) {
tagList := newImageTagList([]string{"21.01.01", "22.02.02", "23.05.01", "25.01.25"})
img := NewFromIdentifier("jannfis/test:21.01.01")
vc := VersionConstraint{Constraint: "22.01.01", Strategy: StrategyCalVer, MatchArgs: "YY.MM.DD"}
newTag, err := img.GetNewestVersionFromTags(&vc, tagList)
assert.NoError(t, err)
assert.NotNil(t, newTag)
assert.Equal(t, "25.01.25", newTag.TagName)
})

t.Run("Invalid calver format should return error", func(t *testing.T) {
tagList := newImageTagList([]string{"2021.01.01", "2022.02.02"})
img := NewFromIdentifier("jannfis/test:2021.01.01")
vc := VersionConstraint{Constraint: "2022.01.01", Strategy: StrategyCalVer, MatchArgs: "invalid-format"}
newTag, err := img.GetNewestVersionFromTags(&vc, tagList)
assert.Error(t, err)
assert.Nil(t, newTag)
})

t.Run("Tags not matching calver format should be ignored", func(t *testing.T) {
tagList := newImageTagList([]string{"2021.01.01", "invalid", "2023.05.01", "not-a-date"})
img := NewFromIdentifier("jannfis/test:2021.01.01")
vc := VersionConstraint{Constraint: "2022.01.01", Strategy: StrategyCalVer, MatchArgs: "YYYY.MM.DD"}
newTag, err := img.GetNewestVersionFromTags(&vc, tagList)
assert.NoError(t, err)
assert.NotNil(t, newTag)
assert.Equal(t, "2023.05.01", newTag.TagName)
})

t.Run("Empty tag list with calver should return nil", func(t *testing.T) {
tagList := newImageTagList([]string{})
img := NewFromIdentifier("jannfis/test:2021.01.01")
vc := VersionConstraint{Constraint: "2022.01.01", Strategy: StrategyCalVer, MatchArgs: "YYYY.MM.DD"}
newTag, err := img.GetNewestVersionFromTags(&vc, tagList)
assert.NoError(t, err)
assert.Nil(t, newTag)
})

t.Run("Missing constraint with calver should use current date", func(t *testing.T) {
tagList := newImageTagList([]string{"2021.01.01", "2022.02.02", "2023.05.01"})
img := NewFromIdentifier("jannfis/test:2021.01.01")
vc := VersionConstraint{Strategy: StrategyCalVer, MatchArgs: "YYYY.MM.DD"}
newTag, err := img.GetNewestVersionFromTags(&vc, tagList)
assert.NoError(t, err)
assert.NotNil(t, newTag)
assert.Equal(t, "2023.05.01", newTag.TagName)
})

t.Run("Find the latest version with no tags", func(t *testing.T) {
Expand Down Expand Up @@ -149,6 +208,7 @@ func Test_UpdateStrategy_String(t *testing.T) {
{"StrategyNewestBuild", StrategyNewestBuild, "newest-build"},
{"StrategyAlphabetical", StrategyAlphabetical, "alphabetical"},
{"StrategyDigest", StrategyDigest, "digest"},
{"StrategyCalVer", StrategyCalVer, "calver"},
{"unknown", UpdateStrategy(-1), "unknown"},
}
for _, tt := range tests {
Expand Down Expand Up @@ -180,26 +240,30 @@ func Test_UpdateStrategy_IsCacheable(t *testing.T) {
assert.True(t, StrategySemVer.IsCacheable())
assert.True(t, StrategyNewestBuild.IsCacheable())
assert.True(t, StrategyAlphabetical.IsCacheable())
assert.True(t, StrategyCalVer.IsCacheable())
assert.False(t, StrategyDigest.IsCacheable())
}

func Test_UpdateStrategy_NeedsMetadata(t *testing.T) {
assert.False(t, StrategySemVer.NeedsMetadata())
assert.True(t, StrategyNewestBuild.NeedsMetadata())
assert.False(t, StrategyAlphabetical.NeedsMetadata())
assert.False(t, StrategyCalVer.NeedsMetadata())
assert.False(t, StrategyDigest.NeedsMetadata())
}

func Test_UpdateStrategy_NeedsVersionConstraint(t *testing.T) {
assert.False(t, StrategySemVer.NeedsVersionConstraint())
assert.False(t, StrategyNewestBuild.NeedsVersionConstraint())
assert.False(t, StrategyAlphabetical.NeedsVersionConstraint())
assert.True(t, StrategyCalVer.NeedsVersionConstraint())
assert.True(t, StrategyDigest.NeedsVersionConstraint())
}

func Test_UpdateStrategy_WantsOnlyConstraintTag(t *testing.T) {
assert.False(t, StrategySemVer.WantsOnlyConstraintTag())
assert.False(t, StrategyNewestBuild.WantsOnlyConstraintTag())
assert.False(t, StrategyAlphabetical.WantsOnlyConstraintTag())
assert.False(t, StrategyCalVer.WantsOnlyConstraintTag())
assert.True(t, StrategyDigest.WantsOnlyConstraintTag())
}

0 comments on commit 37aeca6

Please sign in to comment.