github.com/flavio/docker@v0.1.3-0.20170117145210-f63d1a6eec47/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  }