list_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package volume
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io/ioutil"
  6. "testing"
  7. "github.com/docker/docker/api/types"
  8. "github.com/docker/docker/api/types/filters"
  9. volumetypes "github.com/docker/docker/api/types/volume"
  10. "github.com/docker/docker/cli/config/configfile"
  11. "github.com/docker/docker/cli/internal/test"
  12. // Import builders to get the builder function as package function
  13. . "github.com/docker/docker/cli/internal/test/builders"
  14. "github.com/docker/docker/pkg/testutil/assert"
  15. "github.com/docker/docker/pkg/testutil/golden"
  16. )
  17. func TestVolumeListErrors(t *testing.T) {
  18. testCases := []struct {
  19. args []string
  20. flags map[string]string
  21. volumeListFunc func(filter filters.Args) (volumetypes.VolumesListOKBody, error)
  22. expectedError string
  23. }{
  24. {
  25. args: []string{"foo"},
  26. expectedError: "accepts no argument",
  27. },
  28. {
  29. volumeListFunc: func(filter filters.Args) (volumetypes.VolumesListOKBody, error) {
  30. return volumetypes.VolumesListOKBody{}, fmt.Errorf("error listing volumes")
  31. },
  32. expectedError: "error listing volumes",
  33. },
  34. }
  35. for _, tc := range testCases {
  36. buf := new(bytes.Buffer)
  37. cmd := newListCommand(
  38. test.NewFakeCli(&fakeClient{
  39. volumeListFunc: tc.volumeListFunc,
  40. }, buf),
  41. )
  42. cmd.SetArgs(tc.args)
  43. for key, value := range tc.flags {
  44. cmd.Flags().Set(key, value)
  45. }
  46. cmd.SetOutput(ioutil.Discard)
  47. assert.Error(t, cmd.Execute(), tc.expectedError)
  48. }
  49. }
  50. func TestVolumeListWithoutFormat(t *testing.T) {
  51. buf := new(bytes.Buffer)
  52. cli := test.NewFakeCli(&fakeClient{
  53. volumeListFunc: func(filter filters.Args) (volumetypes.VolumesListOKBody, error) {
  54. return volumetypes.VolumesListOKBody{
  55. Volumes: []*types.Volume{
  56. Volume(),
  57. Volume(VolumeName("foo"), VolumeDriver("bar")),
  58. Volume(VolumeName("baz"), VolumeLabels(map[string]string{
  59. "foo": "bar",
  60. })),
  61. },
  62. }, nil
  63. },
  64. }, buf)
  65. cli.SetConfigfile(&configfile.ConfigFile{})
  66. cmd := newListCommand(cli)
  67. assert.NilError(t, cmd.Execute())
  68. actual := buf.String()
  69. expected := golden.Get(t, []byte(actual), "volume-list-without-format.golden")
  70. assert.EqualNormalizedString(t, assert.RemoveSpace, actual, string(expected))
  71. }
  72. func TestVolumeListWithConfigFormat(t *testing.T) {
  73. buf := new(bytes.Buffer)
  74. cli := test.NewFakeCli(&fakeClient{
  75. volumeListFunc: func(filter filters.Args) (volumetypes.VolumesListOKBody, error) {
  76. return volumetypes.VolumesListOKBody{
  77. Volumes: []*types.Volume{
  78. Volume(),
  79. Volume(VolumeName("foo"), VolumeDriver("bar")),
  80. Volume(VolumeName("baz"), VolumeLabels(map[string]string{
  81. "foo": "bar",
  82. })),
  83. },
  84. }, nil
  85. },
  86. }, buf)
  87. cli.SetConfigfile(&configfile.ConfigFile{
  88. VolumesFormat: "{{ .Name }} {{ .Driver }} {{ .Labels }}",
  89. })
  90. cmd := newListCommand(cli)
  91. assert.NilError(t, cmd.Execute())
  92. actual := buf.String()
  93. expected := golden.Get(t, []byte(actual), "volume-list-with-config-format.golden")
  94. assert.EqualNormalizedString(t, assert.RemoveSpace, actual, string(expected))
  95. }
  96. func TestVolumeListWithFormat(t *testing.T) {
  97. buf := new(bytes.Buffer)
  98. cli := test.NewFakeCli(&fakeClient{
  99. volumeListFunc: func(filter filters.Args) (volumetypes.VolumesListOKBody, error) {
  100. return volumetypes.VolumesListOKBody{
  101. Volumes: []*types.Volume{
  102. Volume(),
  103. Volume(VolumeName("foo"), VolumeDriver("bar")),
  104. Volume(VolumeName("baz"), VolumeLabels(map[string]string{
  105. "foo": "bar",
  106. })),
  107. },
  108. }, nil
  109. },
  110. }, buf)
  111. cli.SetConfigfile(&configfile.ConfigFile{})
  112. cmd := newListCommand(cli)
  113. cmd.Flags().Set("format", "{{ .Name }} {{ .Driver }} {{ .Labels }}")
  114. assert.NilError(t, cmd.Execute())
  115. actual := buf.String()
  116. expected := golden.Get(t, []byte(actual), "volume-list-with-format.golden")
  117. assert.EqualNormalizedString(t, assert.RemoveSpace, actual, string(expected))
  118. }