github.com/tonistiigi/docker@v0.10.1-0.20240229224939-974013b0dc6a/client/network_create_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/errdefs" 15 "gotest.tools/v3/assert" 16 is "gotest.tools/v3/assert/cmp" 17 ) 18 19 func TestNetworkCreateError(t *testing.T) { 20 client := &Client{ 21 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 22 } 23 24 _, err := client.NetworkCreate(context.Background(), "mynetwork", types.NetworkCreate{}) 25 assert.Check(t, is.ErrorType(err, errdefs.IsSystem)) 26 } 27 28 // TestNetworkCreateConnectionError verifies that connection errors occurring 29 // during API-version negotiation are not shadowed by API-version errors. 30 // 31 // Regression test for https://github.com/docker/cli/issues/4890 32 func TestNetworkCreateConnectionError(t *testing.T) { 33 client, err := NewClientWithOpts(WithAPIVersionNegotiation(), WithHost("tcp://no-such-host.invalid")) 34 assert.NilError(t, err) 35 36 _, err = client.NetworkCreate(context.Background(), "mynetwork", types.NetworkCreate{}) 37 assert.Check(t, is.ErrorType(err, IsErrConnectionFailed)) 38 } 39 40 func TestNetworkCreate(t *testing.T) { 41 expectedURL := "/networks/create" 42 43 client := &Client{ 44 client: newMockClient(func(req *http.Request) (*http.Response, error) { 45 if !strings.HasPrefix(req.URL.Path, expectedURL) { 46 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 47 } 48 49 if req.Method != http.MethodPost { 50 return nil, fmt.Errorf("expected POST method, got %s", req.Method) 51 } 52 53 content, err := json.Marshal(types.NetworkCreateResponse{ 54 ID: "network_id", 55 Warning: "warning", 56 }) 57 if err != nil { 58 return nil, err 59 } 60 return &http.Response{ 61 StatusCode: http.StatusOK, 62 Body: io.NopCloser(bytes.NewReader(content)), 63 }, nil 64 }), 65 } 66 67 networkResponse, err := client.NetworkCreate(context.Background(), "mynetwork", types.NetworkCreate{ 68 Driver: "mydriver", 69 EnableIPv6: true, 70 Internal: true, 71 Options: map[string]string{ 72 "opt-key": "opt-value", 73 }, 74 }) 75 if err != nil { 76 t.Fatal(err) 77 } 78 if networkResponse.ID != "network_id" { 79 t.Fatalf("expected networkResponse.ID to be 'network_id', got %s", networkResponse.ID) 80 } 81 if networkResponse.Warning != "warning" { 82 t.Fatalf("expected networkResponse.Warning to be 'warning', got %s", networkResponse.Warning) 83 } 84 }