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  }