Browse code

integration: Move image filter tests to integration

- use assert.Check to continue the test even if a check fails
- assert the total number of images returned, not only their RepoTags
- use subtests

Signed-off-by: Djordje Lukic <djordje.lukic@docker.com>

Djordje Lukic authored on 2023/07/18 17:02:01
Showing 2 changed files
... ...
@@ -8,7 +8,6 @@ import (
8 8
 	"testing"
9 9
 
10 10
 	"github.com/docker/docker/api/types"
11
-	"github.com/docker/docker/api/types/filters"
12 11
 	"github.com/docker/docker/client"
13 12
 	"github.com/docker/docker/integration-cli/cli"
14 13
 	"github.com/docker/docker/integration-cli/cli/build"
... ...
@@ -16,42 +15,6 @@ import (
16 16
 	"gotest.tools/v3/assert"
17 17
 )
18 18
 
19
-func (s *DockerAPISuite) TestAPIImagesFilter(c *testing.T) {
20
-	apiClient, err := client.NewClientWithOpts(client.FromEnv)
21
-	assert.NilError(c, err)
22
-	defer apiClient.Close()
23
-
24
-	name := "utest:tag1"
25
-	name2 := "utest/docker:tag2"
26
-	name3 := "utest:5000/docker:tag3"
27
-	for _, n := range []string{name, name2, name3} {
28
-		dockerCmd(c, "tag", "busybox", n)
29
-	}
30
-	getImages := func(filter string) []types.ImageSummary {
31
-		options := types.ImageListOptions{
32
-			All:     false,
33
-			Filters: filters.NewArgs(filters.Arg("reference", filter)),
34
-		}
35
-		images, err := apiClient.ImageList(context.Background(), options)
36
-		assert.NilError(c, err)
37
-
38
-		return images
39
-	}
40
-
41
-	// incorrect number of matches returned
42
-	images := getImages("utest*/*")
43
-	assert.Equal(c, len(images[0].RepoTags), 2)
44
-
45
-	images = getImages("utest")
46
-	assert.Equal(c, len(images[0].RepoTags), 1)
47
-
48
-	images = getImages("utest*")
49
-	assert.Equal(c, len(images[0].RepoTags), 1)
50
-
51
-	images = getImages("*5000*/*")
52
-	assert.Equal(c, len(images[0].RepoTags), 1)
53
-}
54
-
55 19
 func (s *DockerAPISuite) TestAPIImagesSaveAndLoad(c *testing.T) {
56 20
 	testRequires(c, Network)
57 21
 	buildImageSuccessfully(c, "saveandload", build.WithDockerfile("FROM busybox\nENV FOO bar"))
... ...
@@ -93,3 +93,59 @@ func TestImagesFilterBeforeSince(t *testing.T) {
93 93
 	// the assertion must therefore be order-independent.
94 94
 	assert.DeepEqual(t, listedIDs, imgs[1:len(imgs)-1], cmpopts.SortSlices(func(a, b string) bool { return a < b }))
95 95
 }
96
+
97
+func TestAPIImagesFilters(t *testing.T) {
98
+	t.Cleanup(setupTest(t))
99
+	client := testEnv.APIClient()
100
+	ctx := context.Background()
101
+
102
+	for _, n := range []string{"utest:tag1", "utest/docker:tag2", "utest:5000/docker:tag3"} {
103
+		err := client.ImageTag(ctx, "busybox:latest", n)
104
+		assert.NilError(t, err)
105
+	}
106
+
107
+	testcases := []struct {
108
+		name             string
109
+		filters          []filters.KeyValuePair
110
+		expectedImages   int
111
+		expectedRepoTags int
112
+	}{
113
+		{
114
+			name:             "repository regex",
115
+			filters:          []filters.KeyValuePair{filters.Arg("reference", "utest*/*")},
116
+			expectedImages:   1,
117
+			expectedRepoTags: 2,
118
+		},
119
+		{
120
+			name:             "image name regex",
121
+			filters:          []filters.KeyValuePair{filters.Arg("reference", "utest*")},
122
+			expectedImages:   1,
123
+			expectedRepoTags: 1,
124
+		},
125
+		{
126
+			name:             "image name without a tag",
127
+			filters:          []filters.KeyValuePair{filters.Arg("reference", "utest")},
128
+			expectedImages:   1,
129
+			expectedRepoTags: 1,
130
+		},
131
+		{
132
+			name:             "registry port regex",
133
+			filters:          []filters.KeyValuePair{filters.Arg("reference", "*5000*/*")},
134
+			expectedImages:   1,
135
+			expectedRepoTags: 1,
136
+		},
137
+	}
138
+
139
+	for _, tc := range testcases {
140
+		tc := tc
141
+		t.Run(tc.name, func(t *testing.T) {
142
+			t.Parallel()
143
+			images, err := client.ImageList(context.Background(), types.ImageListOptions{
144
+				Filters: filters.NewArgs(tc.filters...),
145
+			})
146
+			assert.Check(t, err)
147
+			assert.Assert(t, is.Len(images, tc.expectedImages))
148
+			assert.Check(t, is.Len(images[0].RepoTags, tc.expectedRepoTags))
149
+		})
150
+	}
151
+}