github.com/docker/Engine@v17.12.1-ce-rc2+incompatible/client/container_prune_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/docker/docker/api/types/filters"
    14  	"github.com/stretchr/testify/assert"
    15  	"golang.org/x/net/context"
    16  )
    17  
    18  func TestContainersPruneError(t *testing.T) {
    19  	client := &Client{
    20  		client:  newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
    21  		version: "1.25",
    22  	}
    23  
    24  	filters := filters.NewArgs()
    25  
    26  	_, err := client.ContainersPrune(context.Background(), filters)
    27  	assert.EqualError(t, err, "Error response from daemon: Server error")
    28  }
    29  
    30  func TestContainersPrune(t *testing.T) {
    31  	expectedURL := "/v1.25/containers/prune"
    32  
    33  	danglingFilters := filters.NewArgs()
    34  	danglingFilters.Add("dangling", "true")
    35  
    36  	noDanglingFilters := filters.NewArgs()
    37  	noDanglingFilters.Add("dangling", "false")
    38  
    39  	danglingUntilFilters := filters.NewArgs()
    40  	danglingUntilFilters.Add("dangling", "true")
    41  	danglingUntilFilters.Add("until", "2016-12-15T14:00")
    42  
    43  	labelFilters := filters.NewArgs()
    44  	labelFilters.Add("dangling", "true")
    45  	labelFilters.Add("label", "label1=foo")
    46  	labelFilters.Add("label", "label2!=bar")
    47  
    48  	listCases := []struct {
    49  		filters             filters.Args
    50  		expectedQueryParams map[string]string
    51  	}{
    52  		{
    53  			filters: filters.Args{},
    54  			expectedQueryParams: map[string]string{
    55  				"until":   "",
    56  				"filter":  "",
    57  				"filters": "",
    58  			},
    59  		},
    60  		{
    61  			filters: danglingFilters,
    62  			expectedQueryParams: map[string]string{
    63  				"until":   "",
    64  				"filter":  "",
    65  				"filters": `{"dangling":{"true":true}}`,
    66  			},
    67  		},
    68  		{
    69  			filters: danglingUntilFilters,
    70  			expectedQueryParams: map[string]string{
    71  				"until":   "",
    72  				"filter":  "",
    73  				"filters": `{"dangling":{"true":true},"until":{"2016-12-15T14:00":true}}`,
    74  			},
    75  		},
    76  		{
    77  			filters: noDanglingFilters,
    78  			expectedQueryParams: map[string]string{
    79  				"until":   "",
    80  				"filter":  "",
    81  				"filters": `{"dangling":{"false":true}}`,
    82  			},
    83  		},
    84  		{
    85  			filters: labelFilters,
    86  			expectedQueryParams: map[string]string{
    87  				"until":   "",
    88  				"filter":  "",
    89  				"filters": `{"dangling":{"true":true},"label":{"label1=foo":true,"label2!=bar":true}}`,
    90  			},
    91  		},
    92  	}
    93  	for _, listCase := range listCases {
    94  		client := &Client{
    95  			client: newMockClient(func(req *http.Request) (*http.Response, error) {
    96  				if !strings.HasPrefix(req.URL.Path, expectedURL) {
    97  					return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL)
    98  				}
    99  				query := req.URL.Query()
   100  				for key, expected := range listCase.expectedQueryParams {
   101  					actual := query.Get(key)
   102  					assert.Equal(t, expected, actual)
   103  				}
   104  				content, err := json.Marshal(types.ContainersPruneReport{
   105  					ContainersDeleted: []string{"container_id1", "container_id2"},
   106  					SpaceReclaimed:    9999,
   107  				})
   108  				if err != nil {
   109  					return nil, err
   110  				}
   111  				return &http.Response{
   112  					StatusCode: http.StatusOK,
   113  					Body:       ioutil.NopCloser(bytes.NewReader(content)),
   114  				}, nil
   115  			}),
   116  			version: "1.25",
   117  		}
   118  
   119  		report, err := client.ContainersPrune(context.Background(), listCase.filters)
   120  		assert.NoError(t, err)
   121  		assert.Len(t, report.ContainersDeleted, 2)
   122  		assert.Equal(t, uint64(9999), report.SpaceReclaimed)
   123  	}
   124  }