forked from fluxcd/flux
-
Notifications
You must be signed in to change notification settings - Fork 0
/
images_test.go
95 lines (82 loc) · 3.16 KB
/
images_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package update
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/weaveworks/flux/image"
"github.com/weaveworks/flux/policy"
)
var (
name = mustParseName("index.docker.io/weaveworks/helloworld").CanonicalName()
infos = []image.Info{
{ID: name.ToRef("v1"), CreatedAt: time.Now().Add(-time.Hour)},
{ID: name.ToRef("v2"), CreatedAt: time.Now()},
}
)
// TestDecanon checks that we return appropriate image names when
// asked for images. The registry (cache) stores things with canonical
// names (e.g., `index.docker.io/library/alpine`), but we ask
// questions in terms of everyday names (e.g., `alpine`).
func TestDecanon(t *testing.T) {
m := ImageRepos{imageReposMap{
name: infos,
}}
filteredImages := m.GetRepoImages(mustParseName("weaveworks/helloworld")).FilterAndSort(policy.PatternAll)
latest, ok := filteredImages.Latest()
if !ok {
t.Error("did not find latest image")
} else if latest.ID.Name != mustParseName("weaveworks/helloworld") {
t.Error("name did not match what was asked")
}
filteredImages = m.GetRepoImages(mustParseName("index.docker.io/weaveworks/helloworld")).FilterAndSort(policy.PatternAll)
latest, ok = filteredImages.Latest()
if !ok {
t.Error("did not find latest image")
} else if latest.ID.Name != mustParseName("index.docker.io/weaveworks/helloworld") {
t.Error("name did not match what was asked")
}
avail := m.GetRepoImages(mustParseName("weaveworks/helloworld"))
if len(avail) != len(infos) {
t.Errorf("expected %d available images, got %d", len(infos), len(avail))
}
for _, im := range avail {
if im.ID.Name != mustParseName("weaveworks/helloworld") {
t.Errorf("got image with name %q", im.ID.String())
}
}
}
func TestImageInfos_Filter_latest(t *testing.T) {
latest := image.Info{
ID: image.Ref{Name: image.Name{Image: "flux"}, Tag: "latest"},
}
other := image.Info{
ID: image.Ref{Name: image.Name{Image: "moon"}, Tag: "v0"},
}
ii := ImageInfos{latest, other}
assert.Equal(t, SortedImageInfos{latest}, ii.FilterAndSort(policy.PatternLatest))
assert.Equal(t, SortedImageInfos{latest}, ii.FilterAndSort(policy.NewPattern("latest")))
assert.Equal(t, SortedImageInfos{other}, ii.FilterAndSort(policy.PatternAll))
assert.Equal(t, SortedImageInfos{other}, ii.FilterAndSort(policy.NewPattern("*")))
}
func TestImageInfos_Filter_semver(t *testing.T) {
latest := image.Info{ID: image.Ref{Name: image.Name{Image: "flux"}, Tag: "latest"}}
semver0 := image.Info{ID: image.Ref{Name: image.Name{Image: "moon"}, Tag: "v0.0.1"}}
semver1 := image.Info{ID: image.Ref{Name: image.Name{Image: "earth"}, Tag: "1.0.0"}}
ii := ImageInfos{latest, semver0, semver1}
assert.Equal(t, SortedImageInfos{semver1, semver0}, ii.FilterAndSort(policy.NewPattern("semver:*")))
assert.Equal(t, SortedImageInfos{semver1}, ii.FilterAndSort(policy.NewPattern("semver:~1")))
}
func TestAvail(t *testing.T) {
m := ImageRepos{imageReposMap{name: infos}}
avail := m.GetRepoImages(mustParseName("weaveworks/goodbyeworld"))
if len(avail) > 0 {
t.Errorf("did not expect available images, but got %#v", avail)
}
}
func mustParseName(im string) image.Name {
ref, err := image.ParseRef(im)
if err != nil {
panic(err)
}
return ref.Name
}