container_commit_test.go 3.1 KB

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