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