github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/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 "fmt" 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 "github.com/pkg/errors" 17 "gotest.tools/v3/assert" 18 is "gotest.tools/v3/assert/cmp" 19 ) 20 21 func TestNetworkInspectError(t *testing.T) { 22 client := &Client{ 23 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 24 } 25 26 _, err := client.NetworkInspect(context.Background(), "nothing", types.NetworkInspectOptions{}) 27 if !errdefs.IsSystem(err) { 28 t.Fatalf("expected a Server Error, got %[1]T: %[1]v", err) 29 } 30 } 31 32 func TestNetworkInspectNotFoundError(t *testing.T) { 33 client := &Client{ 34 client: newMockClient(errorMock(http.StatusNotFound, "missing")), 35 } 36 37 _, err := client.NetworkInspect(context.Background(), "unknown", types.NetworkInspectOptions{}) 38 assert.Check(t, is.Error(err, "Error: No such network: unknown")) 39 assert.Check(t, IsErrNotFound(err)) 40 } 41 42 func TestNetworkInspectWithEmptyID(t *testing.T) { 43 client := &Client{ 44 client: newMockClient(func(req *http.Request) (*http.Response, error) { 45 return nil, errors.New("should not make request") 46 }), 47 } 48 _, _, err := client.NetworkInspectWithRaw(context.Background(), "", types.NetworkInspectOptions{}) 49 if !IsErrNotFound(err) { 50 t.Fatalf("Expected NotFoundError, got %v", err) 51 } 52 } 53 54 func TestNetworkInspect(t *testing.T) { 55 expectedURL := "/networks/network_id" 56 client := &Client{ 57 client: newMockClient(func(req *http.Request) (*http.Response, error) { 58 if !strings.HasPrefix(req.URL.Path, expectedURL) { 59 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 60 } 61 if req.Method != http.MethodGet { 62 return nil, fmt.Errorf("expected GET method, got %s", req.Method) 63 } 64 65 var ( 66 content []byte 67 err error 68 ) 69 if strings.Contains(req.URL.RawQuery, "scope=global") { 70 return &http.Response{ 71 StatusCode: http.StatusNotFound, 72 Body: io.NopCloser(bytes.NewReader(content)), 73 }, nil 74 } 75 76 if strings.Contains(req.URL.RawQuery, "verbose=true") { 77 s := map[string]network.ServiceInfo{ 78 "web": {}, 79 } 80 content, err = json.Marshal(types.NetworkResource{ 81 Name: "mynetwork", 82 Services: s, 83 }) 84 } else { 85 content, err = json.Marshal(types.NetworkResource{ 86 Name: "mynetwork", 87 }) 88 } 89 if err != nil { 90 return nil, err 91 } 92 return &http.Response{ 93 StatusCode: http.StatusOK, 94 Body: io.NopCloser(bytes.NewReader(content)), 95 }, nil 96 }), 97 } 98 99 r, err := client.NetworkInspect(context.Background(), "network_id", types.NetworkInspectOptions{}) 100 if err != nil { 101 t.Fatal(err) 102 } 103 if r.Name != "mynetwork" { 104 t.Fatalf("expected `mynetwork`, got %s", r.Name) 105 } 106 107 r, err = client.NetworkInspect(context.Background(), "network_id", types.NetworkInspectOptions{Verbose: true}) 108 if err != nil { 109 t.Fatal(err) 110 } 111 if r.Name != "mynetwork" { 112 t.Fatalf("expected `mynetwork`, got %s", r.Name) 113 } 114 _, ok := r.Services["web"] 115 if !ok { 116 t.Fatalf("expected service `web` missing in the verbose output") 117 } 118 119 _, err = client.NetworkInspect(context.Background(), "network_id", types.NetworkInspectOptions{Scope: "global"}) 120 assert.Check(t, is.Error(err, "Error: No such network: network_id")) 121 }