github.com/rish1988/moby@v25.0.2+incompatible/client/network_inspect_test.go (about) 1 package client // import "github.com/docker/docker/client" 2 3 import ( 4 "bytes" 5 "context" 6 "encoding/json" 7 "errors" 8 "io" 9 "net/http" 10 "strings" 11 "testing" 12 13 "github.com/docker/docker/api/types" 14 "github.com/docker/docker/api/types/network" 15 "github.com/docker/docker/errdefs" 16 "gotest.tools/v3/assert" 17 is "gotest.tools/v3/assert/cmp" 18 ) 19 20 func TestNetworkInspect(t *testing.T) { 21 client := &Client{ 22 client: newMockClient(func(req *http.Request) (*http.Response, error) { 23 if req.Method != http.MethodGet { 24 return nil, errors.New("expected GET method, got " + req.Method) 25 } 26 if req.URL.Path == "/networks/" { 27 return errorMock(http.StatusInternalServerError, "client should not make a request for empty IDs")(req) 28 } 29 if strings.HasPrefix(req.URL.Path, "/networks/unknown") { 30 return errorMock(http.StatusNotFound, "Error: No such network: unknown")(req) 31 } 32 if strings.HasPrefix(req.URL.Path, "/networks/test-500-response") { 33 return errorMock(http.StatusInternalServerError, "Server error")(req) 34 } 35 // other test-cases all use "network_id" 36 if !strings.HasPrefix(req.URL.Path, "/networks/network_id") { 37 return nil, errors.New("expected URL '/networks/network_id', got " + req.URL.Path) 38 } 39 if strings.Contains(req.URL.RawQuery, "scope=global") { 40 return errorMock(http.StatusNotFound, "Error: No such network: network_id")(req) 41 } 42 var ( 43 content []byte 44 err error 45 ) 46 if strings.Contains(req.URL.RawQuery, "verbose=true") { 47 s := map[string]network.ServiceInfo{ 48 "web": {}, 49 } 50 content, err = json.Marshal(types.NetworkResource{ 51 Name: "mynetwork", 52 Services: s, 53 }) 54 } else { 55 content, err = json.Marshal(types.NetworkResource{ 56 Name: "mynetwork", 57 }) 58 } 59 if err != nil { 60 return nil, err 61 } 62 return &http.Response{ 63 Header: http.Header{"Content-Type": []string{"application/json"}}, 64 StatusCode: http.StatusOK, 65 Body: io.NopCloser(bytes.NewReader(content)), 66 }, nil 67 }), 68 } 69 70 t.Run("empty ID", func(t *testing.T) { 71 // verify that the client does not create a request if the network-ID/name is empty. 72 _, err := client.NetworkInspect(context.Background(), "", types.NetworkInspectOptions{}) 73 assert.Check(t, is.ErrorType(err, errdefs.IsNotFound)) 74 }) 75 t.Run("no options", func(t *testing.T) { 76 r, err := client.NetworkInspect(context.Background(), "network_id", types.NetworkInspectOptions{}) 77 assert.NilError(t, err) 78 assert.Equal(t, r.Name, "mynetwork") 79 }) 80 t.Run("verbose", func(t *testing.T) { 81 r, err := client.NetworkInspect(context.Background(), "network_id", types.NetworkInspectOptions{Verbose: true}) 82 assert.NilError(t, err) 83 assert.Equal(t, r.Name, "mynetwork") 84 _, ok := r.Services["web"] 85 if !ok { 86 t.Fatalf("expected service `web` missing in the verbose output") 87 } 88 }) 89 t.Run("global scope", func(t *testing.T) { 90 _, err := client.NetworkInspect(context.Background(), "network_id", types.NetworkInspectOptions{Scope: "global"}) 91 assert.Check(t, is.ErrorContains(err, "Error: No such network: network_id")) 92 assert.Check(t, is.ErrorType(err, errdefs.IsNotFound)) 93 }) 94 t.Run("unknown network", func(t *testing.T) { 95 _, err := client.NetworkInspect(context.Background(), "unknown", types.NetworkInspectOptions{}) 96 assert.Check(t, is.ErrorContains(err, "Error: No such network: unknown")) 97 assert.Check(t, is.ErrorType(err, errdefs.IsNotFound)) 98 }) 99 t.Run("server error", func(t *testing.T) { 100 // Just testing that an internal server error is converted correctly by the client 101 _, err := client.NetworkInspect(context.Background(), "test-500-response", types.NetworkInspectOptions{}) 102 assert.Check(t, is.ErrorType(err, errdefs.IsSystem)) 103 }) 104 }