github.com/cspotcode/docker-cli@v20.10.0-rc1.0.20201201121459-3faad7acc5b8+incompatible/cli/command/network/list_test.go (about) 1 package network 2 3 import ( 4 "context" 5 "io/ioutil" 6 "testing" 7 8 "github.com/docker/cli/internal/test" 9 . "github.com/docker/cli/internal/test/builders" 10 "github.com/docker/docker/api/types" 11 "github.com/docker/docker/api/types/filters" 12 "github.com/google/go-cmp/cmp" 13 "github.com/pkg/errors" 14 "gotest.tools/v3/assert" 15 is "gotest.tools/v3/assert/cmp" 16 "gotest.tools/v3/golden" 17 ) 18 19 func TestNetworkListErrors(t *testing.T) { 20 testCases := []struct { 21 networkListFunc func(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) 22 expectedError string 23 }{ 24 { 25 networkListFunc: func(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) { 26 return []types.NetworkResource{}, errors.Errorf("error creating network") 27 }, 28 expectedError: "error creating network", 29 }, 30 } 31 32 for _, tc := range testCases { 33 cmd := newListCommand( 34 test.NewFakeCli(&fakeClient{ 35 networkListFunc: tc.networkListFunc, 36 }), 37 ) 38 cmd.SetOut(ioutil.Discard) 39 assert.ErrorContains(t, cmd.Execute(), tc.expectedError) 40 } 41 } 42 43 func TestNetworkList(t *testing.T) { 44 testCases := []struct { 45 doc string 46 networkListFunc func(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) 47 flags map[string]string 48 golden string 49 }{ 50 { 51 doc: "network list with flags", 52 flags: map[string]string{ 53 "filter": "image.name=ubuntu", 54 }, 55 golden: "network-list.golden", 56 networkListFunc: func(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) { 57 expectedOpts := types.NetworkListOptions{ 58 Filters: filters.NewArgs(filters.Arg("image.name", "ubuntu")), 59 } 60 assert.Check(t, is.DeepEqual(expectedOpts, options, cmp.AllowUnexported(filters.Args{}))) 61 62 return []types.NetworkResource{*NetworkResource(NetworkResourceID("123454321"), 63 NetworkResourceName("network_1"), 64 NetworkResourceDriver("09.7.01"), 65 NetworkResourceScope("global"))}, nil 66 }, 67 }, 68 { 69 doc: "network list sort order", 70 flags: map[string]string{ 71 "format": "{{ .Name }}", 72 }, 73 golden: "network-list-sort.golden", 74 networkListFunc: func(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) { 75 return []types.NetworkResource{ 76 *NetworkResource(NetworkResourceName("network-2-foo")), 77 *NetworkResource(NetworkResourceName("network-1-foo")), 78 *NetworkResource(NetworkResourceName("network-10-foo"))}, nil 79 }, 80 }, 81 } 82 83 for _, tc := range testCases { 84 t.Run(tc.doc, func(t *testing.T) { 85 cli := test.NewFakeCli(&fakeClient{networkListFunc: tc.networkListFunc}) 86 cmd := newListCommand(cli) 87 for key, value := range tc.flags { 88 cmd.Flags().Set(key, value) 89 } 90 assert.NilError(t, cmd.Execute()) 91 golden.Assert(t, cli.OutBuffer().String(), tc.golden) 92 }) 93 } 94 }