github.com/jwhonce/docker@v0.6.7-0.20190327063223-da823cf3a5a3/client/container_commit_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/errdefs" 15 ) 16 17 func TestContainerCommitError(t *testing.T) { 18 client := &Client{ 19 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 20 } 21 _, err := client.ContainerCommit(context.Background(), "nothing", types.ContainerCommitOptions{}) 22 if err == nil || err.Error() != "Error response from daemon: Server error" { 23 t.Fatalf("expected a Server Error, got %v", err) 24 } 25 if !errdefs.IsSystem(err) { 26 t.Fatalf("expected a Server Error, got %T", err) 27 } 28 } 29 30 func TestContainerCommit(t *testing.T) { 31 expectedURL := "/commit" 32 expectedContainerID := "container_id" 33 specifiedReference := "repository_name:tag" 34 expectedRepositoryName := "repository_name" 35 expectedTag := "tag" 36 expectedComment := "comment" 37 expectedAuthor := "author" 38 expectedChanges := []string{"change1", "change2"} 39 40 client := &Client{ 41 client: newMockClient(func(req *http.Request) (*http.Response, error) { 42 if !strings.HasPrefix(req.URL.Path, expectedURL) { 43 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 44 } 45 query := req.URL.Query() 46 containerID := query.Get("container") 47 if containerID != expectedContainerID { 48 return nil, fmt.Errorf("container id not set in URL query properly. Expected '%s', got %s", expectedContainerID, containerID) 49 } 50 repo := query.Get("repo") 51 if repo != expectedRepositoryName { 52 return nil, fmt.Errorf("container repo not set in URL query properly. Expected '%s', got %s", expectedRepositoryName, repo) 53 } 54 tag := query.Get("tag") 55 if tag != expectedTag { 56 return nil, fmt.Errorf("container tag not set in URL query properly. Expected '%s', got %s'", expectedTag, tag) 57 } 58 comment := query.Get("comment") 59 if comment != expectedComment { 60 return nil, fmt.Errorf("container comment not set in URL query properly. Expected '%s', got %s'", expectedComment, comment) 61 } 62 author := query.Get("author") 63 if author != expectedAuthor { 64 return nil, fmt.Errorf("container author not set in URL query properly. Expected '%s', got %s'", expectedAuthor, author) 65 } 66 pause := query.Get("pause") 67 if pause != "0" { 68 return nil, fmt.Errorf("container pause not set in URL query properly. Expected 'true', got %v'", pause) 69 } 70 changes := query["changes"] 71 if len(changes) != len(expectedChanges) { 72 return nil, fmt.Errorf("expected container changes size to be '%d', got %d", len(expectedChanges), len(changes)) 73 } 74 b, err := json.Marshal(types.IDResponse{ 75 ID: "new_container_id", 76 }) 77 if err != nil { 78 return nil, err 79 } 80 return &http.Response{ 81 StatusCode: http.StatusOK, 82 Body: ioutil.NopCloser(bytes.NewReader(b)), 83 }, nil 84 }), 85 } 86 87 r, err := client.ContainerCommit(context.Background(), expectedContainerID, types.ContainerCommitOptions{ 88 Reference: specifiedReference, 89 Comment: expectedComment, 90 Author: expectedAuthor, 91 Changes: expectedChanges, 92 Pause: false, 93 }) 94 if err != nil { 95 t.Fatal(err) 96 } 97 if r.ID != "new_container_id" { 98 t.Fatalf("expected `new_container_id`, got %s", r.ID) 99 } 100 }