github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/client/config_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/ioutil" 9 "net/http" 10 "strings" 11 "testing" 12 13 "github.com/docker/docker/api/types" 14 "github.com/docker/docker/api/types/swarm" 15 "gotest.tools/assert" 16 is "gotest.tools/assert/cmp" 17 ) 18 19 func TestConfigCreateUnsupported(t *testing.T) { 20 client := &Client{ 21 version: "1.29", 22 client: &http.Client{}, 23 } 24 _, err := client.ConfigCreate(context.Background(), swarm.ConfigSpec{}) 25 assert.Check(t, is.Error(err, `"config create" requires API version 1.30, but the Docker daemon API version is 1.29`)) 26 } 27 28 func TestConfigCreateError(t *testing.T) { 29 client := &Client{ 30 version: "1.30", 31 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 32 } 33 _, err := client.ConfigCreate(context.Background(), swarm.ConfigSpec{}) 34 if err == nil || err.Error() != "Error response from daemon: Server error" { 35 t.Fatalf("expected a Server Error, got %v", err) 36 } 37 } 38 39 func TestConfigCreate(t *testing.T) { 40 expectedURL := "/v1.30/configs/create" 41 client := &Client{ 42 version: "1.30", 43 client: newMockClient(func(req *http.Request) (*http.Response, error) { 44 if !strings.HasPrefix(req.URL.Path, expectedURL) { 45 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 46 } 47 if req.Method != "POST" { 48 return nil, fmt.Errorf("expected POST method, got %s", req.Method) 49 } 50 b, err := json.Marshal(types.ConfigCreateResponse{ 51 ID: "test_config", 52 }) 53 if err != nil { 54 return nil, err 55 } 56 return &http.Response{ 57 StatusCode: http.StatusCreated, 58 Body: ioutil.NopCloser(bytes.NewReader(b)), 59 }, nil 60 }), 61 } 62 63 r, err := client.ConfigCreate(context.Background(), swarm.ConfigSpec{}) 64 if err != nil { 65 t.Fatal(err) 66 } 67 if r.ID != "test_config" { 68 t.Fatalf("expected `test_config`, got %s", r.ID) 69 } 70 }