diff --git a/client/client_interfaces.go b/client/client_interfaces.go index 34e0cd5537..f13dd3979a 100644 --- a/client/client_interfaces.go +++ b/client/client_interfaces.go @@ -131,7 +131,7 @@ type NetworkAPIClient interface { NetworkCreate(ctx context.Context, name string, options NetworkCreateOptions) (network.CreateResponse, error) NetworkDisconnect(ctx context.Context, network, container string, force bool) error NetworkInspect(ctx context.Context, network string, options NetworkInspectOptions) (NetworkInspectResult, error) - NetworkList(ctx context.Context, options NetworkListOptions) ([]network.Summary, error) + NetworkList(ctx context.Context, options NetworkListOptions) (NetworkListResult, error) NetworkRemove(ctx context.Context, network string) error NetworksPrune(ctx context.Context, opts NetworkPruneOptions) (NetworkPruneResult, error) } diff --git a/client/network_list.go b/client/network_list.go index 7eeebcaf23..d65f560974 100644 --- a/client/network_list.go +++ b/client/network_list.go @@ -8,16 +8,21 @@ import ( "github.com/moby/moby/api/types/network" ) +// NetworkListResult holds the result from the [Client.NetworkList] method. +type NetworkListResult struct { + Items []network.Summary +} + // NetworkList returns the list of networks configured in the docker host. -func (cli *Client) NetworkList(ctx context.Context, options NetworkListOptions) ([]network.Summary, error) { +func (cli *Client) NetworkList(ctx context.Context, options NetworkListOptions) (NetworkListResult, error) { query := url.Values{} options.Filters.updateURLValues(query) - var networkResources []network.Summary resp, err := cli.get(ctx, "/networks", query, nil) defer ensureReaderClosed(resp) if err != nil { - return networkResources, err + return NetworkListResult{}, err } - err = json.NewDecoder(resp.Body).Decode(&networkResources) - return networkResources, err + var res NetworkListResult + err = json.NewDecoder(resp.Body).Decode(&res.Items) + return res, err } diff --git a/client/network_list_test.go b/client/network_list_test.go index 41d37e54c3..d9dcdb591a 100644 --- a/client/network_list_test.go +++ b/client/network_list_test.go @@ -84,8 +84,8 @@ func TestNetworkList(t *testing.T) { })) assert.NilError(t, err) - networkResources, err := client.NetworkList(context.Background(), listCase.options) + res, err := client.NetworkList(context.Background(), listCase.options) assert.NilError(t, err) - assert.Check(t, is.Len(networkResources, 1)) + assert.Check(t, is.Len(res.Items, 1)) } } diff --git a/integration-cli/requirements_test.go b/integration-cli/requirements_test.go index 2d404ed936..fc4ed832be 100644 --- a/integration-cli/requirements_test.go +++ b/integration-cli/requirements_test.go @@ -35,8 +35,8 @@ func OnlyDefaultNetworks(ctx context.Context) bool { if err != nil { return false } - networks, err := apiClient.NetworkList(ctx, client.NetworkListOptions{}) - if err != nil || len(networks) > 0 { + res, err := apiClient.NetworkList(ctx, client.NetworkListOptions{}) + if err != nil || len(res.Items) > 0 { return false } return true diff --git a/integration/network/delete_test.go b/integration/network/delete_test.go index fc95ca67ac..365aea1fca 100644 --- a/integration/network/delete_test.go +++ b/integration/network/delete_test.go @@ -31,12 +31,12 @@ func createAmbiguousNetworks(ctx context.Context, t *testing.T, apiClient client idPrefixNet := network.CreateNoError(ctx, t, apiClient, testNet[:12]) fullIDNet := network.CreateNoError(ctx, t, apiClient, testNet) - nws, err := apiClient.NetworkList(ctx, client.NetworkListOptions{}) + res, err := apiClient.NetworkList(ctx, client.NetworkListOptions{}) assert.NilError(t, err) - assert.Check(t, is.Equal(true, containsNetwork(nws, testNet)), "failed to create network testNet") - assert.Check(t, is.Equal(true, containsNetwork(nws, idPrefixNet)), "failed to create network idPrefixNet") - assert.Check(t, is.Equal(true, containsNetwork(nws, fullIDNet)), "failed to create network fullIDNet") + assert.Check(t, is.Equal(true, containsNetwork(res.Items, testNet)), "failed to create network testNet") + assert.Check(t, is.Equal(true, containsNetwork(res.Items, idPrefixNet)), "failed to create network idPrefixNet") + assert.Check(t, is.Equal(true, containsNetwork(res.Items, fullIDNet)), "failed to create network fullIDNet") return testNet, idPrefixNet, fullIDNet } @@ -79,9 +79,9 @@ func TestDockerNetworkDeletePreferID(t *testing.T) { assert.NilError(t, err) // networks "testNet" and "idPrefixNet" should be removed, but "fullIDNet" should still exist - nws, err := apiClient.NetworkList(ctx, client.NetworkListOptions{}) + res, err := apiClient.NetworkList(ctx, client.NetworkListOptions{}) assert.NilError(t, err) - assert.Check(t, is.Equal(false, containsNetwork(nws, testNet)), "Network testNet not removed") - assert.Check(t, is.Equal(false, containsNetwork(nws, idPrefixNet)), "Network idPrefixNet not removed") - assert.Check(t, is.Equal(true, containsNetwork(nws, fullIDNet)), "Network fullIDNet not found") + assert.Check(t, is.Equal(false, containsNetwork(res.Items, testNet)), "Network testNet not removed") + assert.Check(t, is.Equal(false, containsNetwork(res.Items, idPrefixNet)), "Network idPrefixNet not removed") + assert.Check(t, is.Equal(true, containsNetwork(res.Items, fullIDNet)), "Network fullIDNet not found") } diff --git a/integration/network/helpers.go b/integration/network/helpers.go index 355ae88b3f..61c09783d7 100644 --- a/integration/network/helpers.go +++ b/integration/network/helpers.go @@ -53,12 +53,12 @@ func LinkDoesntExist(ctx context.Context, t *testing.T, master string) { // IsNetworkAvailable provides a comparison to check if a docker network is available func IsNetworkAvailable(ctx context.Context, c client.NetworkAPIClient, name string) is.Comparison { return func() is.Result { - networks, err := c.NetworkList(ctx, client.NetworkListOptions{}) + res, err := c.NetworkList(ctx, client.NetworkListOptions{}) if err != nil { return is.ResultFromError(err) } - for _, network := range networks { - if network.Name == name { + for _, nw := range res.Items { + if nw.Name == name { return is.ResultSuccess } } @@ -69,12 +69,12 @@ func IsNetworkAvailable(ctx context.Context, c client.NetworkAPIClient, name str // IsNetworkNotAvailable provides a comparison to check if a docker network is not available func IsNetworkNotAvailable(ctx context.Context, c client.NetworkAPIClient, name string) is.Comparison { return func() is.Result { - networks, err := c.NetworkList(ctx, client.NetworkListOptions{}) + res, err := c.NetworkList(ctx, client.NetworkListOptions{}) if err != nil { return is.ResultFromError(err) } - for _, network := range networks { - if network.Name == name { + for _, nw := range res.Items { + if nw.Name == name { return is.ResultFailure(fmt.Sprintf("network %s is still present", name)) } } diff --git a/integration/network/helpers_windows.go b/integration/network/helpers_windows.go index fd21892920..c40d29a388 100644 --- a/integration/network/helpers_windows.go +++ b/integration/network/helpers_windows.go @@ -11,12 +11,12 @@ import ( // IsNetworkAvailable provides a comparison to check if a docker network is available func IsNetworkAvailable(ctx context.Context, c client.NetworkAPIClient, name string) cmp.Comparison { return func() cmp.Result { - networks, err := c.NetworkList(ctx, client.NetworkListOptions{}) + res, err := c.NetworkList(ctx, client.NetworkListOptions{}) if err != nil { return cmp.ResultFromError(err) } - for _, network := range networks { - if network.Name == name { + for _, nw := range res.Items { + if nw.Name == name { return cmp.ResultSuccess } } @@ -27,12 +27,12 @@ func IsNetworkAvailable(ctx context.Context, c client.NetworkAPIClient, name str // IsNetworkNotAvailable provides a comparison to check if a docker network is not available func IsNetworkNotAvailable(ctx context.Context, c client.NetworkAPIClient, name string) cmp.Comparison { return func() cmp.Result { - networks, err := c.NetworkList(ctx, client.NetworkListOptions{}) + res, err := c.NetworkList(ctx, client.NetworkListOptions{}) if err != nil { return cmp.ResultFromError(err) } - for _, network := range networks { - if network.Name == name { + for _, nw := range res.Items { + if nw.Name == name { return cmp.ResultFailure(fmt.Sprintf("network %s is still present", name)) } } diff --git a/integration/network/network_test.go b/integration/network/network_test.go index 16ce896f3a..82eeda8d7f 100644 --- a/integration/network/network_test.go +++ b/integration/network/network_test.go @@ -130,15 +130,15 @@ func TestAPINetworkFilter(t *testing.T) { ctx := setupTest(t) apiClient := testEnv.APIClient() - networks, err := apiClient.NetworkList(ctx, client.NetworkListOptions{ + res, err := apiClient.NetworkList(ctx, client.NetworkListOptions{ Filters: make(client.Filters).Add("name", networkName), }) assert.NilError(t, err) found := false - for _, network := range networks { - if network.Name == networkName { + for _, nw := range res.Items { + if nw.Name == networkName { found = true } } diff --git a/internal/testutil/environment/clean.go b/internal/testutil/environment/clean.go index 0dd499c138..93988274fd 100644 --- a/internal/testutil/environment/clean.go +++ b/internal/testutil/environment/clean.go @@ -144,22 +144,22 @@ func deleteAllVolumes(ctx context.Context, t testing.TB, c client.VolumeAPIClien func deleteAllNetworks(ctx context.Context, t testing.TB, c client.NetworkAPIClient, daemonPlatform string, protectedNetworks map[string]struct{}) { t.Helper() - networks, err := c.NetworkList(ctx, client.NetworkListOptions{}) + res, err := c.NetworkList(ctx, client.NetworkListOptions{}) assert.Check(t, err, "failed to list networks") - for _, n := range networks { - if n.Name == network.NetworkBridge || n.Name == network.NetworkNone || n.Name == network.NetworkHost { + for _, nw := range res.Items { + if nw.Name == network.NetworkBridge || nw.Name == network.NetworkNone || nw.Name == network.NetworkHost { continue } - if _, ok := protectedNetworks[n.ID]; ok { + if _, ok := protectedNetworks[nw.ID]; ok { continue } - if daemonPlatform == "windows" && strings.ToLower(n.Name) == network.NetworkNat { + if daemonPlatform == "windows" && strings.ToLower(nw.Name) == network.NetworkNat { // nat is a pre-defined network on Windows and cannot be removed continue } - err := c.NetworkRemove(ctx, n.ID) - assert.Check(t, err, "failed to remove network %s", n.ID) + err := c.NetworkRemove(ctx, nw.ID) + assert.Check(t, err, "failed to remove network %s", nw.ID) } } diff --git a/internal/testutil/environment/protect.go b/internal/testutil/environment/protect.go index 7ed44aa908..528b73d11e 100644 --- a/internal/testutil/environment/protect.go +++ b/internal/testutil/environment/protect.go @@ -165,14 +165,14 @@ func ProtectNetworks(ctx context.Context, t testing.TB, testEnv *Execution) { func getExistingNetworks(ctx context.Context, t testing.TB, testEnv *Execution) []string { t.Helper() apiClient := testEnv.APIClient() - networkList, err := apiClient.NetworkList(ctx, client.NetworkListOptions{}) + res, err := apiClient.NetworkList(ctx, client.NetworkListOptions{}) assert.NilError(t, err, "failed to list networks") - var networks []string - for _, network := range networkList { - networks = append(networks, network.ID) + var nwIDs []string + for _, nw := range res.Items { + nwIDs = append(nwIDs, nw.ID) } - return networks + return nwIDs } // ProtectPlugin adds the specified plugin(s) to be protected in case of clean diff --git a/vendor/github.com/moby/moby/client/client_interfaces.go b/vendor/github.com/moby/moby/client/client_interfaces.go index 34e0cd5537..f13dd3979a 100644 --- a/vendor/github.com/moby/moby/client/client_interfaces.go +++ b/vendor/github.com/moby/moby/client/client_interfaces.go @@ -131,7 +131,7 @@ type NetworkAPIClient interface { NetworkCreate(ctx context.Context, name string, options NetworkCreateOptions) (network.CreateResponse, error) NetworkDisconnect(ctx context.Context, network, container string, force bool) error NetworkInspect(ctx context.Context, network string, options NetworkInspectOptions) (NetworkInspectResult, error) - NetworkList(ctx context.Context, options NetworkListOptions) ([]network.Summary, error) + NetworkList(ctx context.Context, options NetworkListOptions) (NetworkListResult, error) NetworkRemove(ctx context.Context, network string) error NetworksPrune(ctx context.Context, opts NetworkPruneOptions) (NetworkPruneResult, error) } diff --git a/vendor/github.com/moby/moby/client/network_list.go b/vendor/github.com/moby/moby/client/network_list.go index 7eeebcaf23..d65f560974 100644 --- a/vendor/github.com/moby/moby/client/network_list.go +++ b/vendor/github.com/moby/moby/client/network_list.go @@ -8,16 +8,21 @@ import ( "github.com/moby/moby/api/types/network" ) +// NetworkListResult holds the result from the [Client.NetworkList] method. +type NetworkListResult struct { + Items []network.Summary +} + // NetworkList returns the list of networks configured in the docker host. -func (cli *Client) NetworkList(ctx context.Context, options NetworkListOptions) ([]network.Summary, error) { +func (cli *Client) NetworkList(ctx context.Context, options NetworkListOptions) (NetworkListResult, error) { query := url.Values{} options.Filters.updateURLValues(query) - var networkResources []network.Summary resp, err := cli.get(ctx, "/networks", query, nil) defer ensureReaderClosed(resp) if err != nil { - return networkResources, err + return NetworkListResult{}, err } - err = json.NewDecoder(resp.Body).Decode(&networkResources) - return networkResources, err + var res NetworkListResult + err = json.NewDecoder(resp.Body).Decode(&res.Items) + return res, err }