docs/cluster/image_test.go

141 lines
4.2 KiB
Go

package cluster
import (
"testing"
"github.com/docker/engine-api/types"
dockerfilters "github.com/docker/engine-api/types/filters"
"github.com/stretchr/testify/assert"
)
func TestMatch(t *testing.T) {
img := Image{}
img.ID = "378954456789"
img.RepoTags = []string{"name:latest"}
img.RepoDigests = []string{"name@sha256:a973f1415c489a934bf56dd653079d36b4ec717760215645726439de9705911d"}
assert.True(t, img.Match("378954456789", true))
assert.True(t, img.Match("3789", true))
assert.True(t, img.Match("378", true))
assert.False(t, img.Match("37", true))
assert.True(t, img.Match("name:latest", true))
assert.True(t, img.Match("name", true))
assert.False(t, img.Match("nam", true))
assert.False(t, img.Match("na", true))
assert.True(t, img.Match("378954456789", false))
assert.True(t, img.Match("3789", false))
assert.True(t, img.Match("378", false))
assert.False(t, img.Match("37", false))
assert.True(t, img.Match("name:latest", false))
assert.True(t, img.Match("name", false))
assert.False(t, img.Match("nam", false))
assert.False(t, img.Match("na", false))
assert.True(t, img.Match("name@sha256:a973f1415c489a934bf56dd653079d36b4ec717760215645726439de9705911d", true))
assert.False(t, img.Match("name@sha256:111111415c489a934bf56dd653079d36b4ec717760215645726439de9705911d", true))
}
func TestMatchPrivateRepo(t *testing.T) {
img := Image{}
img.ID = "378954456789"
img.RepoTags = []string{"private.registry.com:5000/name:latest"}
assert.True(t, img.Match("private.registry.com:5000/name:latest", true))
assert.True(t, img.Match("private.registry.com:5000/name", true))
assert.False(t, img.Match("private.registry.com:5000/nam", true))
assert.False(t, img.Match("private.registry.com:5000/na", true))
assert.True(t, img.Match("private.registry.com:5000/name", false))
assert.False(t, img.Match("private.registry.com:5000/nam", false))
assert.False(t, img.Match("private.registry.com:5000/na", false))
}
func TestImagesFilterWithLabelFilter(t *testing.T) {
engine := NewEngine("test", 0, engOpts)
images := Images{
{types.Image{ID: "a"}, engine},
{types.Image{
ID: "b",
Labels: map[string]string{"com.example.project": "bar"},
}, engine},
{types.Image{ID: "c"}, engine},
}
filters := dockerfilters.NewArgs()
filters.Add("label", "com.example.project=bar")
result := images.Filter(ImageFilterOptions{types.ImageListOptions{All: true, Filters: filters}})
assert.Equal(t, len(result), 1)
assert.Equal(t, result[0].ID, "b")
}
func TestImagesFilterWithMatchName(t *testing.T) {
engine := NewEngine("test", 0, engOpts)
images := Images{
{
types.Image{
ID: "a",
RepoTags: []string{"example:latest", "example:2"},
},
engine,
},
{
types.Image{ID: "b", RepoTags: []string{"example:1"}},
engine,
},
}
result := images.Filter(ImageFilterOptions{types.ImageListOptions{All: true, MatchName: "example:2"}})
assert.Equal(t, len(result), 1)
assert.Equal(t, result[0].ID, "a")
}
func TestImagesFilterWithMatchNameWithTag(t *testing.T) {
engine := NewEngine("test", 0, engOpts)
images := Images{
{
types.Image{
ID: "a",
RepoTags: []string{"example:latest", "example:2"},
},
engine,
},
{
types.Image{ID: "b", RepoTags: []string{"example:1"}},
engine,
},
{
types.Image{ID: "c", RepoTags: []string{"foo:latest"}},
engine,
},
}
result := images.Filter(ImageFilterOptions{types.ImageListOptions{All: true, MatchName: "example"}})
assert.Equal(t, len(result), 2)
}
func TestParseRepositoryTag(t *testing.T) {
repo, tag := ParseRepositoryTag("localhost.localdomain:5000/samalba/hipache:latest")
if tag != "latest" {
t.Errorf("repo=%s tag=%s", repo, tag)
}
repo, tag = ParseRepositoryTag("localhost:5000/foo/bar@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb")
if tag != "sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb" {
t.Logf("repo=%s tag=%s", repo, tag)
}
repo, tag = ParseRepositoryTag("localhost:5000/foo/bar")
if tag != "" {
t.Logf("repo=%s tag=%s", repo, tag)
}
repo, tag = ParseRepositoryTag("localhost:5000/foo/bar:latest")
t.Logf("repo=%s tag=%s", repo, tag)
if tag != "latest" {
t.Logf("repo=%s tag=%s", repo, tag)
}
}