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