Files
moby/client/network_inspect_test.go
Sebastiaan van Stijn b29990916d client: fix unused imports
this was introduced in c950796596, but
likely due to the "replace" rules not being present, CI tested the
current version of the module instead of the code in the repository.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-11-12 17:53:36 +01:00

90 lines
3.4 KiB
Go

package client
import (
"net/http"
"strings"
"testing"
cerrdefs "github.com/containerd/errdefs"
"github.com/moby/moby/api/types/network"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
)
func TestNetworkInspect(t *testing.T) {
const expectedURL = "/networks/network_id"
client, err := New(WithMockClient(func(req *http.Request) (*http.Response, error) {
if req.URL.Path == defaultAPIPath+"/networks/" {
return errorMock(http.StatusInternalServerError, "client should not make a request for empty IDs")(req)
}
if strings.HasPrefix(req.URL.Path, defaultAPIPath+"/networks/unknown") {
return errorMock(http.StatusNotFound, "Error: No such network: unknown")(req)
}
if strings.HasPrefix(req.URL.Path, defaultAPIPath+"/networks/test-500-response") {
return errorMock(http.StatusInternalServerError, "Server error")(req)
}
// other test-cases all use "network_id"
if err := assertRequest(req, http.MethodGet, expectedURL); err != nil {
return nil, err
}
if strings.Contains(req.URL.RawQuery, "scope=global") {
return errorMock(http.StatusNotFound, "Error: No such network: network_id")(req)
}
var resp network.Inspect
if strings.Contains(req.URL.RawQuery, "verbose=true") {
resp = network.Inspect{
Network: network.Network{Name: "mynetwork"},
Services: map[string]network.ServiceInfo{
"web": {},
},
}
} else {
resp = network.Inspect{
Network: network.Network{Name: "mynetwork"},
}
}
return mockJSONResponse(http.StatusOK, nil, resp)(req)
}))
assert.NilError(t, err)
t.Run("empty ID", func(t *testing.T) {
// verify that the client does not create a request if the network-ID/name is empty.
_, err := client.NetworkInspect(t.Context(), "", NetworkInspectOptions{})
assert.Check(t, is.ErrorType(err, cerrdefs.IsInvalidArgument))
assert.Check(t, is.ErrorContains(err, "value is empty"))
_, err = client.NetworkInspect(t.Context(), " ", NetworkInspectOptions{})
assert.Check(t, is.ErrorType(err, cerrdefs.IsInvalidArgument))
assert.Check(t, is.ErrorContains(err, "value is empty"))
})
t.Run("no options", func(t *testing.T) {
r, err := client.NetworkInspect(t.Context(), "network_id", NetworkInspectOptions{})
assert.NilError(t, err)
assert.Check(t, is.Equal(r.Network.Name, "mynetwork"))
})
t.Run("verbose", func(t *testing.T) {
r, err := client.NetworkInspect(t.Context(), "network_id", NetworkInspectOptions{Verbose: true})
assert.NilError(t, err)
assert.Check(t, is.Equal(r.Network.Name, "mynetwork"))
_, ok := r.Network.Services["web"]
assert.Check(t, ok, "expected service `web` missing in the verbose output")
})
t.Run("global scope", func(t *testing.T) {
_, err := client.NetworkInspect(t.Context(), "network_id", NetworkInspectOptions{Scope: "global"})
assert.Check(t, is.ErrorContains(err, "Error: No such network: network_id"))
assert.Check(t, is.ErrorType(err, cerrdefs.IsNotFound))
})
t.Run("unknown network", func(t *testing.T) {
_, err := client.NetworkInspect(t.Context(), "unknown", NetworkInspectOptions{})
assert.Check(t, is.ErrorContains(err, "Error: No such network: unknown"))
assert.Check(t, is.ErrorType(err, cerrdefs.IsNotFound))
})
t.Run("server error", func(t *testing.T) {
// Just testing that an internal server error is converted correctly by the client
_, err := client.NetworkInspect(t.Context(), "test-500-response", NetworkInspectOptions{})
assert.Check(t, is.ErrorType(err, cerrdefs.IsInternal))
})
}