woodpecker-docker-buildx/plugin/tags_test.go

312 lines
6.9 KiB
Go
Raw Permalink Normal View History

package plugin
2017-10-31 07:02:01 +00:00
import (
"reflect"
"testing"
"github.com/stretchr/testify/assert"
2017-10-31 07:02:01 +00:00
)
func Test_stripTagPrefix(t *testing.T) {
tests := []struct {
2017-10-31 07:02:01 +00:00
Before string
After string
}{
{"refs/tags/1.0.0", "1.0.0"},
{"refs/tags/v1.0.0", "v1.0.0"},
{"v1.0.0", "v1.0.0"},
2017-10-31 07:02:01 +00:00
}
for _, test := range tests {
got, want := stripTagPrefix(test.Before), test.After
if got != want {
t.Errorf("Got tag %s, want %s", got, want)
}
}
}
2017-10-31 15:49:56 +00:00
func TestDefaultTags(t *testing.T) {
tests := []struct {
DefaultTag string
Before string
After []string
2017-10-31 07:02:01 +00:00
}{
// no tag event
{"latest", "", []string{"latest"}},
{"latest", "refs/heads/master", []string{"latest"}},
// tag event with semver
{"latest", "refs/tags/0.9.0", []string{"0.9", "0.9.0"}},
{"latest", "refs/tags/1.0.0", []string{"1", "1.0", "1.0.0"}},
{"latest", "refs/tags/v1.0.0", []string{"1", "1.0", "1.0.0"}},
{"latest", "refs/tags/v1.2.3-rc1", []string{"1.2.3-rc1"}},
{"latest", "refs/tags/v1.0.0-alpha.1", []string{"1.0.0-alpha.1"}},
{"latest", "refs/tags/v20221221", []string{"20221221", "20221221.0", "20221221.0.0"}},
{"latest", "refs/tags/v2022-12-21", []string{"2022.0.0-12-21"}},
// tag event with date
{"latest", "refs/tags/20221221", []string{"20221221"}},
{"latest", "refs/tags/2022-12-21", []string{"2022-12-21"}},
2017-10-31 07:02:01 +00:00
}
for _, test := range tests {
tags, err := DefaultTags(test.Before, test.DefaultTag)
2020-05-19 17:26:13 +00:00
if err != nil {
t.Error(err)
continue
}
got, want := tags, test.After
2017-10-31 07:02:01 +00:00
if !reflect.DeepEqual(got, want) {
t.Errorf("Got tag %v, want %v", got, want)
}
}
}
2017-10-31 15:49:56 +00:00
2020-05-19 17:26:13 +00:00
func TestDefaultTagsError(t *testing.T) {
tests := []struct {
DefaultTag string
Before string
}{
{
DefaultTag: "latest",
Before: "refs/tags/x1.0.0",
},
{
DefaultTag: "latest",
Before: "refs/tags/2a",
},
2020-05-19 17:26:13 +00:00
}
for _, test := range tests {
tags, err := DefaultTags(test.Before, test.DefaultTag)
2020-05-19 17:26:13 +00:00
if err == nil {
t.Errorf("Expect tag error for %s, got tags %v", test, tags)
2020-05-19 17:26:13 +00:00
}
}
}
2017-10-31 15:49:56 +00:00
func TestDefaultTagSuffix(t *testing.T) {
tests := []struct {
Name string
Before string
Suffix string
After []string
DefaultTag string
2017-10-31 15:49:56 +00:00
}{
{
Name: "Default tag without suffix",
DefaultTag: "latest",
After: []string{"latest"},
},
{
Name: "Overridden default tag without suffix",
DefaultTag: "next",
After: []string{"next"},
},
{
Name: "Generate version",
DefaultTag: "latest",
Before: "refs/tags/v1.0.0",
After: []string{
"1",
"1.0",
"1.0.0",
},
2017-10-31 15:49:56 +00:00
},
{
Name: "Generate version with overridden default tag",
DefaultTag: "next",
Before: "refs/tags/v1.0.0",
2017-10-31 15:49:56 +00:00
After: []string{
"1",
"1.0",
"1.0.0",
},
},
{
Name: "Default tag with suffix (linux-amd64)",
DefaultTag: "latest",
Suffix: "linux-amd64",
After: []string{"linux-amd64"},
},
{
Name: "Overridden default tag with suffix (linux-amd64)",
DefaultTag: "next",
Suffix: "linux-amd64",
After: []string{"linux-amd64"},
},
{
Name: "Generate version with suffix (linux-amd64)",
DefaultTag: "latest",
Before: "refs/tags/v1.0.0",
Suffix: "linux-amd64",
After: []string{
"1-linux-amd64",
"1.0-linux-amd64",
"1.0.0-linux-amd64",
},
2017-10-31 15:49:56 +00:00
},
{
Name: "Generate version with suffix (linux-amd64) and overridden default tag (next)",
DefaultTag: "next",
Before: "refs/tags/v1.0.0",
Suffix: "linux-amd64",
2017-10-31 15:49:56 +00:00
After: []string{
"1-linux-amd64",
"1.0-linux-amd64",
"1.0.0-linux-amd64",
},
},
{
Name: "Default tag with suffix (nanoserver)",
DefaultTag: "latest",
Suffix: "nanoserver",
After: []string{"nanoserver"},
2017-10-31 15:49:56 +00:00
},
{
Name: "Overridden default tag with suffix (nanoserver)",
DefaultTag: "next",
Suffix: "nanoserver",
After: []string{"nanoserver"},
},
{
Name: "Generate version with suffix (nanoserver)",
DefaultTag: "latest",
Before: "refs/tags/v1.9.2",
Suffix: "nanoserver",
2017-10-31 15:49:56 +00:00
After: []string{
"1-nanoserver",
"1.9-nanoserver",
"1.9.2-nanoserver",
},
},
{
Name: "Generate version with suffix (nanoserver) and overridden default tag (next)",
DefaultTag: "latest",
Before: "refs/tags/v1.9.2",
Suffix: "nanoserver",
After: []string{
"1-nanoserver",
"1.9-nanoserver",
"1.9.2-nanoserver",
},
},
{
Name: "Generate version with suffix (zero-padded version)",
DefaultTag: "latest",
Before: "refs/tags/v18.06.0",
Suffix: "nanoserver",
After: []string{
"18-nanoserver",
"18.6-nanoserver",
"18.6.0-nanoserver",
},
},
{
Name: "Generate version with suffix (zero-padded version) with overridden default tag (next)",
DefaultTag: "next",
Before: "refs/tags/v18.06.0",
Suffix: "nanoserver",
After: []string{
"18-nanoserver",
"18.6-nanoserver",
"18.6.0-nanoserver",
},
},
2017-10-31 15:49:56 +00:00
}
for _, test := range tests {
t.Run(test.Name, func(t *testing.T) {
tags, err := DefaultTagSuffix(test.Before, test.DefaultTag, test.Suffix)
if assert.NoError(t, err) {
assert.EqualValues(t, test.After, tags)
}
})
2017-10-31 15:49:56 +00:00
}
}
2017-11-09 21:28:19 +00:00
func Test_stripHeadPrefix(t *testing.T) {
type args struct {
ref string
}
tests := []struct {
args args
want string
}{
{
args: args{
ref: "refs/heads/master",
},
want: "master",
},
}
for _, tt := range tests {
if got := stripHeadPrefix(tt.args.ref); got != tt.want {
t.Errorf("stripHeadPrefix() = %v, want %v", got, tt.want)
}
}
}
func TestUseDefaultTag(t *testing.T) {
type args struct {
ref string
defaultBranch string
}
tests := []struct {
name string
args args
want bool
}{
{
name: "latest tag for default branch",
args: args{
ref: "refs/heads/master",
defaultBranch: "master",
},
want: true,
},
{
name: "build from tags",
args: args{
ref: "refs/tags/v1.0.0",
defaultBranch: "master",
},
want: true,
},
{
name: "skip build for not default branch",
args: args{
ref: "refs/heads/develop",
defaultBranch: "master",
},
want: false,
},
}
for _, tt := range tests {
if got := UseDefaultTag(tt.args.ref, tt.args.defaultBranch); got != tt.want {
t.Errorf("%q. UseDefaultTag() = %v, want %v", tt.name, got, tt.want)
}
}
}
func Test_isSingleTag(t *testing.T) {
tests := []struct {
Tag string
IsValid bool
}{
{"latest", true},
{" latest", false},
{"LaTest__Hi", true},
{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ__.-0123456789", true},
{"_wierd.but-ok1", true},
{"latest ", false},
{"latest,next", false},
// more tests to be added, once the validation is more powerful
}
for _, test := range tests {
valid := isSingleTag(test.Tag)
if valid != test.IsValid {
t.Errorf("Tag verification '%s' tag %v, want %v", test.Tag, valid, test.IsValid)
}
}
}