@@ -40,51 +40,74 @@ func TestFilterReference(t *testing.T) {
4040 require .NoError (t , err )
4141 err = alpine .Tag ("docker.io/library/image:another-tag" )
4242 require .NoError (t , err )
43+ err = alpine .Tag ("docker.io/library/image:latest" )
44+ require .NoError (t , err )
45+
46+ allAlpineNames := []string {
47+ "docker.io/library/image:another-tag" ,
48+ "quay.io/libpod/alpine:latest" ,
49+ "localhost/another-image:tag" ,
50+ "docker.io/library/image:latest" ,
51+ }
52+ allBusyBoxNames := []string {
53+ "quay.io/libpod/busybox:latest" ,
54+ "localhost/image:tag" ,
55+ }
56+ allNames := []string {}
57+ allNames = append (allNames , allBusyBoxNames ... )
58+ allNames = append (allNames , allAlpineNames ... )
4359
4460 for _ , test := range []struct {
45- filters []string
46- matches int
61+ filters []string
62+ matchedImages int
63+ names []string
4764 }{
48- {[]string {"image" }, 2 },
49- {[]string {"*mage*" }, 2 },
50- {[]string {"image:*" }, 2 },
51- {[]string {"image:tag" }, 1 },
52- {[]string {"image:another-tag" }, 1 },
53- {[]string {"localhost/image" }, 1 },
54- {[]string {"localhost/image:tag" }, 1 },
55- {[]string {"library/image" }, 1 },
56- {[]string {"docker.io/library/image*" }, 1 },
57- {[]string {"docker.io/library/image:*" }, 1 },
58- {[]string {"docker.io/library/image:another-tag" }, 1 },
59- {[]string {"localhost/*" }, 2 },
60- {[]string {"localhost/image:*tag" }, 1 },
61- {[]string {"localhost/*mage:*ag" }, 2 },
62- {[]string {"quay.io/libpod/busybox" }, 1 },
63- {[]string {"quay.io/libpod/alpine" }, 1 },
64- {[]string {"quay.io/libpod" }, 0 },
65- {[]string {"quay.io/libpod/*" }, 2 },
66- {[]string {"busybox" }, 1 },
67- {[]string {"alpine" }, 1 },
68- {[]string {"alpine@" + alpine .Digest ().String ()}, 1 },
69- {[]string {"alpine:latest@" + alpine .Digest ().String ()}, 1 },
70- {[]string {"quay.io/libpod/alpine@" + alpine .Digest ().String ()}, 1 },
71- {[]string {"quay.io/libpod/alpine:latest@" + alpine .Digest ().String ()}, 1 },
65+ {[]string {"image" }, 2 , allNames },
66+ {[]string {"*mage*" }, 2 , allNames },
67+ {[]string {"image:*" }, 2 , allNames },
68+ {[]string {"image:tag" }, 1 , allBusyBoxNames },
69+ {[]string {"image:another-tag" }, 1 , allAlpineNames },
70+ {[]string {"localhost/image" }, 1 , allBusyBoxNames },
71+ {[]string {"localhost/image:tag" }, 1 , allBusyBoxNames },
72+ {[]string {"library/image" }, 1 , allAlpineNames },
73+ {[]string {"docker.io/library/image*" }, 1 , allAlpineNames },
74+ {[]string {"docker.io/library/image:*" }, 1 , allAlpineNames },
75+ {[]string {"docker.io/library/image:another-tag" }, 1 , allAlpineNames },
76+ {[]string {"localhost/*" }, 2 , allNames },
77+ {[]string {"localhost/image:*tag" }, 1 , allBusyBoxNames },
78+ {[]string {"localhost/*mage:*ag" }, 2 , allNames },
79+ {[]string {"quay.io/libpod/busybox" }, 1 , allBusyBoxNames },
80+ {[]string {"quay.io/libpod/alpine" }, 1 , allAlpineNames },
81+ {[]string {"quay.io/libpod" }, 0 , []string {}},
82+ {[]string {"quay.io/libpod/*" }, 2 , allNames },
83+ {[]string {"busybox" }, 1 , allBusyBoxNames },
84+ {[]string {"alpine" }, 1 , allAlpineNames },
85+
7286 // Make sure negate works as expected
73- {[]string {"!alpine" }, 1 },
74- {[]string {"!alpine" , "!busybox" }, 0 },
75- {[]string {"!alpine" , "busybox" }, 1 },
76- {[]string {"alpine" , "busybox" }, 2 },
77- {[]string {"*test" , "!*box" }, 1 },
87+ {[]string {"!alpine" }, 1 , allBusyBoxNames },
88+ {[]string {"!alpine" , "!busybox" }, 0 , []string {}},
89+ {[]string {"!alpine" , "busybox" }, 1 , allBusyBoxNames },
90+ {[]string {"alpine" , "busybox" }, 2 , allNames },
91+ {[]string {"*test" , "!*box" }, 1 , allAlpineNames },
92+
93+ {[]string {"quay.io/libpod/alpine@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
94+
95+ {[]string {"alpine@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
96+ {[]string {"alpine:latest@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
97+ {[]string {"quay.io/libpod/alpine:latest@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
98+ {[]string {"docker.io/library/image@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
99+
78100 // Make sure that tags are ignored
79- {[]string {"alpine:ignoreme@" + alpine .Digest ().String ()}, 1 },
80- {[]string {"alpine:123@" + alpine .Digest ().String ()}, 1 },
81- {[]string {"quay.io/libpod/alpine:hurz@" + alpine .Digest ().String ()}, 1 },
82- {[]string {"quay.io/libpod/alpine:456@" + alpine .Digest ().String ()}, 1 },
101+ {[]string {"alpine:ignoreme@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
102+ {[]string {"alpine:123@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
103+ {[]string {"quay.io/libpod/alpine:hurz@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
104+ {[]string {"quay.io/libpod/alpine:456@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
105+
83106 // Make sure that repo and digest must match
84- {[]string {"alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 },
85- {[]string {"alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 },
86- {[]string {"quay.io/libpod/alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 },
87- {[]string {"quay.io/libpod/alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 },
107+ {[]string {"alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 , [] string {} },
108+ {[]string {"alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 , [] string {} },
109+ {[]string {"quay.io/libpod/alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 , [] string {} },
110+ {[]string {"quay.io/libpod/alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 , [] string {} },
88111 } {
89112 var filters []string
90113 for _ , filter := range test .filters {
@@ -94,12 +117,20 @@ func TestFilterReference(t *testing.T) {
94117 filters = append (filters , "reference=" + filter )
95118 }
96119 }
120+
97121 listOptions := & ListImagesOptions {
98122 Filters : filters ,
99123 }
100124 listedImages , err := runtime .ListImages (ctx , listOptions )
125+
101126 require .NoError (t , err , "%v" , test )
102- require .Len (t , listedImages , test .matches , "%s -> %v" , test .filters , listedImages )
127+ require .Len (t , listedImages , test .matchedImages , "%s -> %v" , test .filters , listedImages )
128+
129+ resultNames := []string {}
130+ for _ , image := range listedImages {
131+ resultNames = append (resultNames , image .Names ()... )
132+ }
133+ require .ElementsMatch (t , test .names , resultNames , "filters: %s " , test .filters )
103134 }
104135}
105136
0 commit comments