github.com/shishir-a412ed/docker@v1.3.2-0.20180103180333-fda904911d87/client/network_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 TestNetworksPruneError(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.NetworksPrune(context.Background(), filters)
    27  	if err == nil || err.Error() != "Error response from daemon: Server error" {
    28  		t.Fatalf("expected a Server Error, got %v", err)
    29  	}
    30  }
    31  
    32  func TestNetworksPrune(t *testing.T) {
    33  	expectedURL := "/v1.25/networks/prune"
    34  
    35  	danglingFilters := filters.NewArgs()
    36  	danglingFilters.Add("dangling", "true")
    37  
    38  	noDanglingFilters := filters.NewArgs()
    39  	noDanglingFilters.Add("dangling", "false")
    40  
    41  	labelFilters := filters.NewArgs()
    42  	labelFilters.Add("dangling", "true")
    43  	labelFilters.Add("label", "label1=foo")
    44  	labelFilters.Add("label", "label2!=bar")
    45  
    46  	listCases := []struct {
    47  		filters             filters.Args
    48  		expectedQueryParams map[string]string
    49  	}{
    50  		{
    51  			filters: filters.Args{},
    52  			expectedQueryParams: map[string]string{
    53  				"until":   "",
    54  				"filter":  "",
    55  				"filters": "",
    56  			},
    57  		},
    58  		{
    59  			filters: danglingFilters,
    60  			expectedQueryParams: map[string]string{
    61  				"until":   "",
    62  				"filter":  "",
    63  				"filters": `{"dangling":{"true":true}}`,
    64  			},
    65  		},
    66  		{
    67  			filters: noDanglingFilters,
    68  			expectedQueryParams: map[string]string{
    69  				"until":   "",
    70  				"filter":  "",
    71  				"filters": `{"dangling":{"false":true}}`,
    72  			},
    73  		},
    74  		{
    75  			filters: labelFilters,
    76  			expectedQueryParams: map[string]string{
    77  				"until":   "",
    78  				"filter":  "",
    79  				"filters": `{"dangling":{"true":true},"label":{"label1=foo":true,"label2!=bar":true}}`,
    80  			},
    81  		},
    82  	}
    83  	for _, listCase := range listCases {
    84  		client := &Client{
    85  			client: newMockClient(func(req *http.Request) (*http.Response, error) {
    86  				if !strings.HasPrefix(req.URL.Path, expectedURL) {
    87  					return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL)
    88  				}
    89  				query := req.URL.Query()
    90  				for key, expected := range listCase.expectedQueryParams {
    91  					actual := query.Get(key)
    92  					assert.Equal(t, expected, actual)
    93  				}
    94  				content, err := json.Marshal(types.NetworksPruneReport{
    95  					NetworksDeleted: []string{"network_id1", "network_id2"},
    96  				})
    97  				if err != nil {
    98  					return nil, err
    99  				}
   100  				return &http.Response{
   101  					StatusCode: http.StatusOK,
   102  					Body:       ioutil.NopCloser(bytes.NewReader(content)),
   103  				}, nil
   104  			}),
   105  			version: "1.25",
   106  		}
   107  
   108  		report, err := client.NetworksPrune(context.Background(), listCase.filters)
   109  		assert.NoError(t, err)
   110  		assert.Len(t, report.NetworksDeleted, 2)
   111  	}
   112  }