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