remove_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package stack
  2. import (
  3. "bytes"
  4. "errors"
  5. "strings"
  6. "testing"
  7. "github.com/docker/docker/cli/internal/test"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestRemoveStack(t *testing.T) {
  11. allServices := []string{
  12. objectName("foo", "service1"),
  13. objectName("foo", "service2"),
  14. objectName("bar", "service1"),
  15. objectName("bar", "service2"),
  16. }
  17. allServiceIDs := buildObjectIDs(allServices)
  18. allNetworks := []string{
  19. objectName("foo", "network1"),
  20. objectName("bar", "network1"),
  21. }
  22. allNetworkIDs := buildObjectIDs(allNetworks)
  23. allSecrets := []string{
  24. objectName("foo", "secret1"),
  25. objectName("foo", "secret2"),
  26. objectName("bar", "secret1"),
  27. }
  28. allSecretIDs := buildObjectIDs(allSecrets)
  29. cli := &fakeClient{
  30. services: allServices,
  31. networks: allNetworks,
  32. secrets: allSecrets,
  33. }
  34. cmd := newRemoveCommand(test.NewFakeCli(cli, &bytes.Buffer{}))
  35. cmd.SetArgs([]string{"foo", "bar"})
  36. assert.NoError(t, cmd.Execute())
  37. assert.Equal(t, allServiceIDs, cli.removedServices)
  38. assert.Equal(t, allNetworkIDs, cli.removedNetworks)
  39. assert.Equal(t, allSecretIDs, cli.removedSecrets)
  40. }
  41. func TestSkipEmptyStack(t *testing.T) {
  42. buf := new(bytes.Buffer)
  43. allServices := []string{objectName("bar", "service1"), objectName("bar", "service2")}
  44. allServiceIDs := buildObjectIDs(allServices)
  45. allNetworks := []string{objectName("bar", "network1")}
  46. allNetworkIDs := buildObjectIDs(allNetworks)
  47. allSecrets := []string{objectName("bar", "secret1")}
  48. allSecretIDs := buildObjectIDs(allSecrets)
  49. cli := &fakeClient{
  50. services: allServices,
  51. networks: allNetworks,
  52. secrets: allSecrets,
  53. }
  54. cmd := newRemoveCommand(test.NewFakeCli(cli, buf))
  55. cmd.SetArgs([]string{"foo", "bar"})
  56. assert.NoError(t, cmd.Execute())
  57. assert.Contains(t, buf.String(), "Nothing found in stack: foo")
  58. assert.Equal(t, allServiceIDs, cli.removedServices)
  59. assert.Equal(t, allNetworkIDs, cli.removedNetworks)
  60. assert.Equal(t, allSecretIDs, cli.removedSecrets)
  61. }
  62. func TestContinueAfterError(t *testing.T) {
  63. allServices := []string{objectName("foo", "service1"), objectName("bar", "service1")}
  64. allServiceIDs := buildObjectIDs(allServices)
  65. allNetworks := []string{objectName("foo", "network1"), objectName("bar", "network1")}
  66. allNetworkIDs := buildObjectIDs(allNetworks)
  67. allSecrets := []string{objectName("foo", "secret1"), objectName("bar", "secret1")}
  68. allSecretIDs := buildObjectIDs(allSecrets)
  69. removedServices := []string{}
  70. cli := &fakeClient{
  71. services: allServices,
  72. networks: allNetworks,
  73. secrets: allSecrets,
  74. serviceRemoveFunc: func(serviceID string) error {
  75. removedServices = append(removedServices, serviceID)
  76. if strings.Contains(serviceID, "foo") {
  77. return errors.New("")
  78. }
  79. return nil
  80. },
  81. }
  82. cmd := newRemoveCommand(test.NewFakeCli(cli, &bytes.Buffer{}))
  83. cmd.SetArgs([]string{"foo", "bar"})
  84. assert.EqualError(t, cmd.Execute(), "Failed to remove some resources from stack: foo")
  85. assert.Equal(t, allServiceIDs, removedServices)
  86. assert.Equal(t, allNetworkIDs, cli.removedNetworks)
  87. assert.Equal(t, allSecretIDs, cli.removedSecrets)
  88. }