2021-09-15 16:48:13 +00:00
|
|
|
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,
|
|
|
|
},
|
2021-09-16 21:13:45 +00:00
|
|
|
{
|
|
|
|
"user/image:v1",
|
|
|
|
ImageTag{
|
|
|
|
ImageTag: "user/image:v1",
|
|
|
|
Image: "user/image",
|
|
|
|
Version: "1",
|
|
|
|
VersionParts: []int{1},
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
2021-09-15 16:48:13 +00:00
|
|
|
{
|
|
|
|
"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,
|
|
|
|
},
|
|
|
|
{
|
2021-09-16 21:13:45 +00:00
|
|
|
"image:v1.0.0-desc@sha256:123abc",
|
2021-09-15 16:48:13 +00:00
|
|
|
ImageTag{
|
2021-09-16 21:13:45 +00:00
|
|
|
ImageTag: "image:v1.0.0-desc@sha256:123abc",
|
2021-09-15 16:48:13 +00:00
|
|
|
Image: "library/image",
|
|
|
|
TagDesc: "desc",
|
2021-09-16 21:13:45 +00:00
|
|
|
TagSha: "sha256:123abc",
|
2021-09-15 16:48:13 +00:00
|
|
|
Version: "1.0.0",
|
|
|
|
VersionParts: []int{1, 0, 0},
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
2021-09-16 21:13:45 +00:00
|
|
|
"image:v1.0.0@sha256:123abc",
|
2021-09-15 16:48:13 +00:00
|
|
|
ImageTag{
|
2021-09-16 21:13:45 +00:00
|
|
|
ImageTag: "image:v1.0.0@sha256:123abc",
|
2021-09-15 16:48:13 +00:00
|
|
|
Image: "library/image",
|
2021-09-16 21:13:45 +00:00
|
|
|
TagSha: "sha256:123abc",
|
2021-09-15 16:48:13 +00:00
|
|
|
Version: "1.0.0",
|
|
|
|
VersionParts: []int{1, 0, 0},
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
2021-09-16 21:13:45 +00:00
|
|
|
// Real world example that had caused issues
|
|
|
|
{
|
|
|
|
"matrixdotorg/synapse:v1.41.0@sha256:75f2b3c35c047693f4f4334d4ceb97951de1ba12bd3c6182c8a2ee624d7c5ab7",
|
|
|
|
ImageTag{
|
|
|
|
ImageTag: "matrixdotorg/synapse:v1.41.0@sha256:75f2b3c35c047693f4f4334d4ceb97951de1ba12bd3c6182c8a2ee624d7c5ab7",
|
|
|
|
Image: "matrixdotorg/synapse",
|
|
|
|
TagSha: "sha256:75f2b3c35c047693f4f4334d4ceb97951de1ba12bd3c6182c8a2ee624d7c5ab7",
|
|
|
|
Version: "1.41.0",
|
|
|
|
VersionParts: []int{1, 41, 0},
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
2021-09-15 16:48:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|