summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastiaan van Stijn <thaJeztah@users.noreply.github.com>2022-12-01 09:16:40 +0100
committerGitHub <noreply@github.com>2022-12-01 09:16:40 +0100
commitbb2eab21c6db326cb267045140b1c482863e556b (patch)
treec764984124df2be930629855dba6a1418f8f9443
parentcfc4677f62586a6bd05d3830af23fdec46bcef9f (diff)
parent978690e4f98fddcf5520ba211f067a707438f8d4 (diff)
downloaddocker-22.06.tar.gz
Merge pull request #44560 from vvoland/client-sharedsize-220622.06
[22.06 backport] client/list: Handle SharedSize
-rw-r--r--client/image_list.go3
-rw-r--r--client/image_list_test.go41
2 files changed, 44 insertions, 0 deletions
diff --git a/client/image_list.go b/client/image_list.go
index a4d7505094..950d513334 100644
--- a/client/image_list.go
+++ b/client/image_list.go
@@ -34,6 +34,9 @@ func (cli *Client) ImageList(ctx context.Context, options types.ImageListOptions
if options.All {
query.Set("all", "1")
}
+ if options.SharedSize && versions.GreaterThanOrEqualTo(cli.version, "1.42") {
+ query.Set("shared-size", "1")
+ }
serverResp, err := cli.get(ctx, "/images/json", query, nil)
defer ensureReaderClosed(serverResp)
diff --git a/client/image_list_test.go b/client/image_list_test.go
index 4619393ff3..b302d970c9 100644
--- a/client/image_list_test.go
+++ b/client/image_list_test.go
@@ -7,12 +7,15 @@ import (
"fmt"
"io"
"net/http"
+ "net/url"
"strings"
"testing"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/errdefs"
+ "gotest.tools/v3/assert"
+ is "gotest.tools/v3/assert/cmp"
)
func TestImageListError(t *testing.T) {
@@ -158,3 +161,41 @@ func TestImageListApiBefore125(t *testing.T) {
t.Fatalf("expected 2 images, got %v", images)
}
}
+
+// Checks if shared-size query parameter is set/not being set correctly
+// for /images/json.
+func TestImageListWithSharedSize(t *testing.T) {
+ t.Parallel()
+ const sharedSize = "shared-size"
+ for _, tc := range []struct {
+ name string
+ version string
+ options types.ImageListOptions
+ sharedSize string // expected value for the shared-size query param, or empty if it should not be set.
+ }{
+ {name: "unset after 1.42, no options set", version: "1.42"},
+ {name: "set after 1.42, if requested", version: "1.42", options: types.ImageListOptions{SharedSize: true}, sharedSize: "1"},
+ {name: "unset before 1.42, even if requested", version: "1.41", options: types.ImageListOptions{SharedSize: true}},
+ } {
+ tc := tc
+ t.Run(tc.name, func(t *testing.T) {
+ t.Parallel()
+ var query url.Values
+ client := &Client{
+ client: newMockClient(func(req *http.Request) (*http.Response, error) {
+ query = req.URL.Query()
+ return &http.Response{
+ StatusCode: http.StatusOK,
+ Body: io.NopCloser(strings.NewReader("[]")),
+ }, nil
+ }),
+ version: tc.version,
+ }
+ _, err := client.ImageList(context.Background(), tc.options)
+ assert.Check(t, err)
+ expectedSet := tc.sharedSize != ""
+ assert.Check(t, is.Equal(query.Has(sharedSize), expectedSet))
+ assert.Check(t, is.Equal(query.Get(sharedSize), tc.sharedSize))
+ })
+ }
+}