github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/network/list_test.go (about) 1 package network 2 3 import ( 4 "context" 5 "io" 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(io.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{*builders.NetworkResource(builders.NetworkResourceID("123454321"), 63 builders.NetworkResourceName("network_1"), 64 builders.NetworkResourceDriver("09.7.01"), 65 builders.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 *builders.NetworkResource(builders.NetworkResourceName("network-2-foo")), 77 *builders.NetworkResource(builders.NetworkResourceName("network-1-foo")), 78 *builders.NetworkResource(builders.NetworkResourceName("network-10-foo")), 79 }, nil 80 }, 81 }, 82 } 83 84 for _, tc := range testCases { 85 t.Run(tc.doc, func(t *testing.T) { 86 cli := test.NewFakeCli(&fakeClient{networkListFunc: tc.networkListFunc}) 87 cmd := newListCommand(cli) 88 for key, value := range tc.flags { 89 assert.Check(t, cmd.Flags().Set(key, value)) 90 } 91 assert.NilError(t, cmd.Execute()) 92 golden.Assert(t, cli.OutBuffer().String(), tc.golden) 93 }) 94 } 95 }