github.com/sams1990/dockerrepo@v17.12.1-ce-rc2+incompatible/client/image_remove_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/stretchr/testify/assert" 14 "golang.org/x/net/context" 15 ) 16 17 func TestImageRemoveError(t *testing.T) { 18 client := &Client{ 19 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 20 } 21 22 _, err := client.ImageRemove(context.Background(), "image_id", types.ImageRemoveOptions{}) 23 assert.EqualError(t, err, "Error response from daemon: Server error") 24 } 25 26 func TestImageRemoveImageNotFound(t *testing.T) { 27 client := &Client{ 28 client: newMockClient(errorMock(http.StatusNotFound, "missing")), 29 } 30 31 _, err := client.ImageRemove(context.Background(), "unknown", types.ImageRemoveOptions{}) 32 assert.EqualError(t, err, "Error: No such image: unknown") 33 assert.True(t, IsErrNotFound(err)) 34 } 35 36 func TestImageRemove(t *testing.T) { 37 expectedURL := "/images/image_id" 38 removeCases := []struct { 39 force bool 40 pruneChildren bool 41 expectedQueryParams map[string]string 42 }{ 43 { 44 force: false, 45 pruneChildren: false, 46 expectedQueryParams: map[string]string{ 47 "force": "", 48 "noprune": "1", 49 }, 50 }, { 51 force: true, 52 pruneChildren: true, 53 expectedQueryParams: map[string]string{ 54 "force": "1", 55 "noprune": "", 56 }, 57 }, 58 } 59 for _, removeCase := range removeCases { 60 client := &Client{ 61 client: newMockClient(func(req *http.Request) (*http.Response, error) { 62 if !strings.HasPrefix(req.URL.Path, expectedURL) { 63 return nil, fmt.Errorf("expected URL '%s', got '%s'", expectedURL, req.URL) 64 } 65 if req.Method != "DELETE" { 66 return nil, fmt.Errorf("expected DELETE method, got %s", req.Method) 67 } 68 query := req.URL.Query() 69 for key, expected := range removeCase.expectedQueryParams { 70 actual := query.Get(key) 71 if actual != expected { 72 return nil, fmt.Errorf("%s not set in URL query properly. Expected '%s', got %s", key, expected, actual) 73 } 74 } 75 b, err := json.Marshal([]types.ImageDeleteResponseItem{ 76 { 77 Untagged: "image_id1", 78 }, 79 { 80 Deleted: "image_id", 81 }, 82 }) 83 if err != nil { 84 return nil, err 85 } 86 87 return &http.Response{ 88 StatusCode: http.StatusOK, 89 Body: ioutil.NopCloser(bytes.NewReader(b)), 90 }, nil 91 }), 92 } 93 imageDeletes, err := client.ImageRemove(context.Background(), "image_id", types.ImageRemoveOptions{ 94 Force: removeCase.force, 95 PruneChildren: removeCase.pruneChildren, 96 }) 97 if err != nil { 98 t.Fatal(err) 99 } 100 if len(imageDeletes) != 2 { 101 t.Fatalf("expected 2 deleted images, got %v", imageDeletes) 102 } 103 } 104 }