@@ -40,51 +40,82 @@ 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+ err = busybox .Tag ("localhost/aa:tag" )
46+ require .NoError (t , err )
47+ err = busybox .Tag ("localhost/a:tag" )
48+ require .NoError (t , err )
49+
50+ allAlpineNames := []string {
51+ "docker.io/library/image:another-tag" ,
52+ "quay.io/libpod/alpine:latest" ,
53+ "localhost/another-image:tag" ,
54+ "docker.io/library/image:latest" ,
55+ }
56+ allBusyBoxNames := []string {
57+ "quay.io/libpod/busybox:latest" ,
58+ "localhost/image:tag" ,
59+ "localhost/a:tag" ,
60+ "localhost/aa:tag" ,
61+ }
62+ allNames := []string {}
63+ allNames = append (allNames , allBusyBoxNames ... )
64+ allNames = append (allNames , allAlpineNames ... )
4365
4466 for _ , test := range []struct {
45- filters []string
46- matches int
67+ filters []string
68+ matchedImages int
69+ names []string
4770 }{
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 },
71+ {[]string {"image" }, 2 , allNames },
72+ {[]string {"*mage*" }, 2 , allNames },
73+ {[]string {"image:*" }, 2 , allNames },
74+ {[]string {"image:tag" }, 1 , allBusyBoxNames },
75+ {[]string {"image:another-tag" }, 1 , allAlpineNames },
76+ {[]string {"localhost/image" }, 1 , allBusyBoxNames },
77+ {[]string {"localhost/image:tag" }, 1 , []string {"localhost/image:tag" }},
78+ {[]string {"library/image" }, 1 , allAlpineNames },
79+ {[]string {"docker.io/library/image*" }, 1 , allAlpineNames },
80+ {[]string {"docker.io/library/image:*" }, 1 , allAlpineNames },
81+ {[]string {"docker.io/library/image:another-tag" }, 1 , []string {"docker.io/library/image:another-tag" }},
82+ {[]string {"localhost/*" }, 2 , allNames },
83+ {[]string {"localhost/image:*tag" }, 1 , allBusyBoxNames },
84+ {[]string {"localhost/*mage:*ag" }, 2 , allNames },
85+ {[]string {"quay.io/libpod/busybox" }, 1 , allBusyBoxNames },
86+ {[]string {"quay.io/libpod/alpine" }, 1 , allAlpineNames },
87+ {[]string {"quay.io/libpod" }, 0 , []string {}},
88+ {[]string {"quay.io/libpod/*" }, 2 , allNames },
89+ {[]string {"busybox" }, 1 , allBusyBoxNames },
90+ {[]string {"alpine" }, 1 , allAlpineNames },
91+
7292 // 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 },
93+ {[]string {"!alpine" }, 1 , allBusyBoxNames },
94+ {[]string {"!alpine" , "!busybox" }, 0 , []string {}},
95+ {[]string {"!alpine" , "busybox" }, 1 , allBusyBoxNames },
96+ {[]string {"alpine" , "busybox" }, 2 , allNames },
97+ {[]string {"*test" , "!*box" }, 1 , allAlpineNames },
98+
99+ {[]string {"quay.io/libpod/alpine@" + alpine .Digest ().String ()}, 1 , []string {"quay.io/libpod/alpine:latest" }},
100+
101+ {[]string {"alpine@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
102+ {[]string {"alpine:latest@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
103+ {[]string {"quay.io/libpod/alpine:latest@" + alpine .Digest ().String ()}, 1 , []string {"quay.io/libpod/alpine:latest" }},
104+ {[]string {"docker.io/library/image@" + alpine .Digest ().String ()}, 1 , []string {"docker.io/library/image:latest" , "docker.io/library/image:another-tag" }},
105+ {[]string {"localhost/aa@" + busybox .Digest ().String ()}, 1 , []string {"localhost/aa:tag" }},
106+ {[]string {"localhost/a@" + busybox .Digest ().String ()}, 1 , []string {"localhost/a:tag" }},
107+
78108 // 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 },
109+ {[]string {"alpine:ignoreme@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
110+ {[]string {"alpine:123@" + alpine .Digest ().String ()}, 1 , allAlpineNames },
111+ {[]string {"quay.io/libpod/alpine:hurz@" + alpine .Digest ().String ()}, 1 , []string {"quay.io/libpod/alpine:latest" }},
112+ {[]string {"quay.io/libpod/alpine:456@" + alpine .Digest ().String ()}, 1 , []string {"quay.io/libpod/alpine:latest" }},
113+
83114 // 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 },
115+ {[]string {"alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 , [] string {} },
116+ {[]string {"alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 , [] string {} },
117+ {[]string {"quay.io/libpod/alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 , [] string {} },
118+ {[]string {"quay.io/libpod/alpine:busyboxdigest@" + busybox .Digest ().String ()}, 0 , [] string {} },
88119 } {
89120 var filters []string
90121 for _ , filter := range test .filters {
@@ -94,12 +125,20 @@ func TestFilterReference(t *testing.T) {
94125 filters = append (filters , "reference=" + filter )
95126 }
96127 }
128+
97129 listOptions := & ListImagesOptions {
98130 Filters : filters ,
99131 }
100132 listedImages , err := runtime .ListImages (ctx , listOptions )
133+
101134 require .NoError (t , err , "%v" , test )
102- require .Len (t , listedImages , test .matches , "%s -> %v" , test .filters , listedImages )
135+ require .Len (t , listedImages , test .matchedImages , "%s -> %v" , test .filters , listedImages )
136+
137+ resultNames := []string {}
138+ for _ , image := range listedImages {
139+ resultNames = append (resultNames , image .Names ()... )
140+ }
141+ require .ElementsMatch (t , test .names , resultNames , "filters: %s " , test .filters )
103142 }
104143}
105144
0 commit comments