github.com/endophage/docker@v1.4.2-0.20161027011718-242853499895/client/container_create_test.go (about) 1 package client 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "io/ioutil" 8 "net/http" 9 "strings" 10 "testing" 11 12 "github.com/docker/docker/api/types" 13 "github.com/docker/docker/api/types/container" 14 "golang.org/x/net/context" 15 ) 16 17 func TestContainerCreateError(t *testing.T) { 18 client := &Client{ 19 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 20 } 21 _, err := client.ContainerCreate(context.Background(), nil, nil, nil, "nothing") 22 if err == nil || err.Error() != "Error response from daemon: Server error" { 23 t.Fatalf("expected a Server Error, got %v", err) 24 } 25 26 // 404 doesn't automagitally means an unknown image 27 client = &Client{ 28 client: newMockClient(errorMock(http.StatusNotFound, "Server error")), 29 } 30 _, err = client.ContainerCreate(context.Background(), nil, nil, nil, "nothing") 31 if err == nil || err.Error() != "Error response from daemon: Server error" { 32 t.Fatalf("expected a Server Error, got %v", err) 33 } 34 } 35 36 func TestContainerCreateImageNotFound(t *testing.T) { 37 client := &Client{ 38 client: newMockClient(errorMock(http.StatusNotFound, "No such image")), 39 } 40 _, err := client.ContainerCreate(context.Background(), &container.Config{Image: "unknown_image"}, nil, nil, "unknown") 41 if err == nil || !IsErrImageNotFound(err) { 42 t.Fatalf("expected an imageNotFound error, got %v", err) 43 } 44 } 45 46 func TestContainerCreateWithName(t *testing.T) { 47 expectedURL := "/containers/create" 48 client := &Client{ 49 client: newMockClient(func(req *http.Request) (*http.Response, error) { 50 if !strings.HasPrefix(req.URL.Path, expectedURL) { 51 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 52 } 53 name := req.URL.Query().Get("name") 54 if name != "container_name" { 55 return nil, fmt.Errorf("container name not set in URL query properly. Expected `container_name`, got %s", name) 56 } 57 b, err := json.Marshal(types.ContainerCreateResponse{ 58 ID: "container_id", 59 }) 60 if err != nil { 61 return nil, err 62 } 63 return &http.Response{ 64 StatusCode: http.StatusOK, 65 Body: ioutil.NopCloser(bytes.NewReader(b)), 66 }, nil 67 }), 68 } 69 70 r, err := client.ContainerCreate(context.Background(), nil, nil, nil, "container_name") 71 if err != nil { 72 t.Fatal(err) 73 } 74 if r.ID != "container_id" { 75 t.Fatalf("expected `container_id`, got %s", r.ID) 76 } 77 }