github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/client/network_prune_test.go (about)

     1  package client // import "github.com/docker/docker/client"
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"encoding/json"
     7  	"fmt"
     8  	"io/ioutil"
     9  	"net/http"
    10  	"strings"
    11  	"testing"
    12  
    13  	"github.com/docker/docker/api/types"
    14  	"github.com/docker/docker/api/types/filters"
    15  	"github.com/docker/docker/errdefs"
    16  	"gotest.tools/v3/assert"
    17  	is "gotest.tools/v3/assert/cmp"
    18  )
    19  
    20  func TestNetworksPruneError(t *testing.T) {
    21  	client := &Client{
    22  		client:  newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
    23  		version: "1.25",
    24  	}
    25  
    26  	filters := filters.NewArgs()
    27  
    28  	_, err := client.NetworksPrune(context.Background(), filters)
    29  	if !errdefs.IsSystem(err) {
    30  		t.Fatalf("expected a Server Error, got %[1]T: %[1]v", err)
    31  	}
    32  }
    33  
    34  func TestNetworksPrune(t *testing.T) {
    35  	expectedURL := "/v1.25/networks/prune"
    36  
    37  	danglingFilters := filters.NewArgs()
    38  	danglingFilters.Add("dangling", "true")
    39  
    40  	noDanglingFilters := filters.NewArgs()
    41  	noDanglingFilters.Add("dangling", "false")
    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: noDanglingFilters,
    70  			expectedQueryParams: map[string]string{
    71  				"until":   "",
    72  				"filter":  "",
    73  				"filters": `{"dangling":{"false":true}}`,
    74  			},
    75  		},
    76  		{
    77  			filters: labelFilters,
    78  			expectedQueryParams: map[string]string{
    79  				"until":   "",
    80  				"filter":  "",
    81  				"filters": `{"dangling":{"true":true},"label":{"label1=foo":true,"label2!=bar":true}}`,
    82  			},
    83  		},
    84  	}
    85  	for _, listCase := range listCases {
    86  		client := &Client{
    87  			client: newMockClient(func(req *http.Request) (*http.Response, error) {
    88  				if !strings.HasPrefix(req.URL.Path, expectedURL) {
    89  					return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL)
    90  				}
    91  				query := req.URL.Query()
    92  				for key, expected := range listCase.expectedQueryParams {
    93  					actual := query.Get(key)
    94  					assert.Check(t, is.Equal(expected, actual))
    95  				}
    96  				content, err := json.Marshal(types.NetworksPruneReport{
    97  					NetworksDeleted: []string{"network_id1", "network_id2"},
    98  				})
    99  				if err != nil {
   100  					return nil, err
   101  				}
   102  				return &http.Response{
   103  					StatusCode: http.StatusOK,
   104  					Body:       ioutil.NopCloser(bytes.NewReader(content)),
   105  				}, nil
   106  			}),
   107  			version: "1.25",
   108  		}
   109  
   110  		report, err := client.NetworksPrune(context.Background(), listCase.filters)
   111  		assert.Check(t, err)
   112  		assert.Check(t, is.Len(report.NetworksDeleted, 2))
   113  	}
   114  }