image_remove_test.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package client
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "net/http"
  8. "strings"
  9. "testing"
  10. "github.com/docker/docker/api/types"
  11. "golang.org/x/net/context"
  12. )
  13. func TestImageRemoveError(t *testing.T) {
  14. client := &Client{
  15. client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
  16. }
  17. _, err := client.ImageRemove(context.Background(), "image_id", types.ImageRemoveOptions{})
  18. if err == nil || err.Error() != "Error response from daemon: Server error" {
  19. t.Fatalf("expected a Server Error, got %v", err)
  20. }
  21. }
  22. func TestImageRemove(t *testing.T) {
  23. expectedURL := "/images/image_id"
  24. removeCases := []struct {
  25. force bool
  26. pruneChildren bool
  27. expectedQueryParams map[string]string
  28. }{
  29. {
  30. force: false,
  31. pruneChildren: false,
  32. expectedQueryParams: map[string]string{
  33. "force": "",
  34. "noprune": "1",
  35. },
  36. }, {
  37. force: true,
  38. pruneChildren: true,
  39. expectedQueryParams: map[string]string{
  40. "force": "1",
  41. "noprune": "",
  42. },
  43. },
  44. }
  45. for _, removeCase := range removeCases {
  46. client := &Client{
  47. client: newMockClient(func(req *http.Request) (*http.Response, error) {
  48. if !strings.HasPrefix(req.URL.Path, expectedURL) {
  49. return nil, fmt.Errorf("expected URL '%s', got '%s'", expectedURL, req.URL)
  50. }
  51. if req.Method != "DELETE" {
  52. return nil, fmt.Errorf("expected DELETE method, got %s", req.Method)
  53. }
  54. query := req.URL.Query()
  55. for key, expected := range removeCase.expectedQueryParams {
  56. actual := query.Get(key)
  57. if actual != expected {
  58. return nil, fmt.Errorf("%s not set in URL query properly. Expected '%s', got %s", key, expected, actual)
  59. }
  60. }
  61. b, err := json.Marshal([]types.ImageDeleteResponseItem{
  62. {
  63. Untagged: "image_id1",
  64. },
  65. {
  66. Deleted: "image_id",
  67. },
  68. })
  69. if err != nil {
  70. return nil, err
  71. }
  72. return &http.Response{
  73. StatusCode: http.StatusOK,
  74. Body: ioutil.NopCloser(bytes.NewReader(b)),
  75. }, nil
  76. }),
  77. }
  78. imageDeletes, err := client.ImageRemove(context.Background(), "image_id", types.ImageRemoveOptions{
  79. Force: removeCase.force,
  80. PruneChildren: removeCase.pruneChildren,
  81. })
  82. if err != nil {
  83. t.Fatal(err)
  84. }
  85. if len(imageDeletes) != 2 {
  86. t.Fatalf("expected 2 deleted images, got %v", imageDeletes)
  87. }
  88. }
  89. }