111 lines
2.0 KiB
Go
111 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestTagParsing(t *testing.T) {
|
|
cases := []struct {
|
|
tag string
|
|
expected ImageTag
|
|
expectsError bool
|
|
}{
|
|
{
|
|
"image",
|
|
ImageTag{},
|
|
true,
|
|
},
|
|
{
|
|
"image:latest",
|
|
ImageTag{},
|
|
true,
|
|
},
|
|
{
|
|
"image:v1",
|
|
ImageTag{
|
|
ImageTag: "image:v1",
|
|
Image: "library/image",
|
|
Version: "1",
|
|
VersionParts: []int{1},
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"image:v1.0",
|
|
ImageTag{
|
|
ImageTag: "image:v1.0",
|
|
Image: "library/image",
|
|
Version: "1.0",
|
|
VersionParts: []int{1, 0},
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"image:v1.0.0",
|
|
ImageTag{
|
|
ImageTag: "image:v1.0.0",
|
|
Image: "library/image",
|
|
Version: "1.0.0",
|
|
VersionParts: []int{1, 0, 0},
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"image:v1.0.0-desc",
|
|
ImageTag{
|
|
ImageTag: "image:v1.0.0-desc",
|
|
Image: "library/image",
|
|
TagDesc: "desc",
|
|
Version: "1.0.0",
|
|
VersionParts: []int{1, 0, 0},
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"image:v1.0.0-desc@sha256:abc",
|
|
ImageTag{
|
|
ImageTag: "image:v1.0.0-desc@sha256:abc",
|
|
Image: "library/image",
|
|
TagDesc: "desc",
|
|
TagSha: "sha256:abc",
|
|
Version: "1.0.0",
|
|
VersionParts: []int{1, 0, 0},
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"image:v1.0.0@sha256:abc",
|
|
ImageTag{
|
|
ImageTag: "image:v1.0.0@sha256:abc",
|
|
Image: "library/image",
|
|
TagSha: "sha256:abc",
|
|
Version: "1.0.0",
|
|
VersionParts: []int{1, 0, 0},
|
|
},
|
|
false,
|
|
},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
result, err := ParseImageTag(c.tag)
|
|
if c.expectsError {
|
|
if err == nil {
|
|
t.Errorf("ParseImageTag(%s): expected erro but didn't get one", c.tag)
|
|
}
|
|
continue
|
|
}
|
|
if err != nil {
|
|
t.Errorf("ParseImageTag(%s): unexpected error: %v", c.tag, err)
|
|
}
|
|
if !reflect.DeepEqual(result, c.expected) {
|
|
t.Errorf(
|
|
"ParseImageTag(%s): unexpected result. Actual: %+v Expected: %+v",
|
|
c.tag,
|
|
result,
|
|
c.expected,
|
|
)
|
|
}
|
|
}
|
|
}
|