github.com/olljanat/moby@v1.13.1/cli/command/container/ps_test.go (about)

     1  package container
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/docker/docker/opts"
     7  	"github.com/docker/docker/pkg/testutil/assert"
     8  )
     9  
    10  func TestBuildContainerListOptions(t *testing.T) {
    11  	filters := opts.NewFilterOpt()
    12  	assert.NilError(t, filters.Set("foo=bar"))
    13  	assert.NilError(t, filters.Set("baz=foo"))
    14  
    15  	contexts := []struct {
    16  		psOpts          *psOptions
    17  		expectedAll     bool
    18  		expectedSize    bool
    19  		expectedLimit   int
    20  		expectedFilters map[string]string
    21  	}{
    22  		{
    23  			psOpts: &psOptions{
    24  				all:    true,
    25  				size:   true,
    26  				last:   5,
    27  				filter: filters,
    28  			},
    29  			expectedAll:   true,
    30  			expectedSize:  true,
    31  			expectedLimit: 5,
    32  			expectedFilters: map[string]string{
    33  				"foo": "bar",
    34  				"baz": "foo",
    35  			},
    36  		},
    37  		{
    38  			psOpts: &psOptions{
    39  				all:     true,
    40  				size:    true,
    41  				last:    -1,
    42  				nLatest: true,
    43  			},
    44  			expectedAll:     true,
    45  			expectedSize:    true,
    46  			expectedLimit:   1,
    47  			expectedFilters: make(map[string]string),
    48  		},
    49  		{
    50  			psOpts: &psOptions{
    51  				all:    true,
    52  				size:   false,
    53  				last:   5,
    54  				filter: filters,
    55  				// With .Size, size should be true
    56  				format: "{{.Size}}",
    57  			},
    58  			expectedAll:   true,
    59  			expectedSize:  true,
    60  			expectedLimit: 5,
    61  			expectedFilters: map[string]string{
    62  				"foo": "bar",
    63  				"baz": "foo",
    64  			},
    65  		},
    66  		{
    67  			psOpts: &psOptions{
    68  				all:    true,
    69  				size:   false,
    70  				last:   5,
    71  				filter: filters,
    72  				// With .Size, size should be true
    73  				format: "{{.Size}} {{.CreatedAt}} {{.Networks}}",
    74  			},
    75  			expectedAll:   true,
    76  			expectedSize:  true,
    77  			expectedLimit: 5,
    78  			expectedFilters: map[string]string{
    79  				"foo": "bar",
    80  				"baz": "foo",
    81  			},
    82  		},
    83  		{
    84  			psOpts: &psOptions{
    85  				all:    true,
    86  				size:   false,
    87  				last:   5,
    88  				filter: filters,
    89  				// Without .Size, size should be false
    90  				format: "{{.CreatedAt}} {{.Networks}}",
    91  			},
    92  			expectedAll:   true,
    93  			expectedSize:  false,
    94  			expectedLimit: 5,
    95  			expectedFilters: map[string]string{
    96  				"foo": "bar",
    97  				"baz": "foo",
    98  			},
    99  		},
   100  	}
   101  
   102  	for _, c := range contexts {
   103  		options, err := buildContainerListOptions(c.psOpts)
   104  		assert.NilError(t, err)
   105  
   106  		assert.Equal(t, c.expectedAll, options.All)
   107  		assert.Equal(t, c.expectedSize, options.Size)
   108  		assert.Equal(t, c.expectedLimit, options.Limit)
   109  		assert.Equal(t, options.Filters.Len(), len(c.expectedFilters))
   110  
   111  		for k, v := range c.expectedFilters {
   112  			f := options.Filters
   113  			if !f.ExactMatch(k, v) {
   114  				t.Fatalf("Expected filter with key %s to be %s but got %s", k, v, f.Get(k))
   115  			}
   116  		}
   117  	}
   118  }