remove_test.go 3.1 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/docker/docker/pkg/testutil/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. allServicesIDs := buildObjectIDs(allServices)
  18. allNetworks := []string{
  19. objectName("foo", "network1"),
  20. objectName("bar", "network1"),
  21. }
  22. allNetworksIDs := buildObjectIDs(allNetworks)
  23. allSecrets := []string{
  24. objectName("foo", "secret1"),
  25. objectName("foo", "secret2"),
  26. objectName("bar", "secret1"),
  27. }
  28. allSecretsIDs := 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.NilError(t, cmd.Execute())
  37. assert.DeepEqual(t, cli.removedServices, allServicesIDs)
  38. assert.DeepEqual(t, cli.removedNetworks, allNetworksIDs)
  39. assert.DeepEqual(t, cli.removedSecrets, allSecretsIDs)
  40. }
  41. func TestSkipEmptyStack(t *testing.T) {
  42. buf := new(bytes.Buffer)
  43. allServices := []string{objectName("bar", "service1"), objectName("bar", "service2")}
  44. allServicesIDs := buildObjectIDs(allServices)
  45. allNetworks := []string{objectName("bar", "network1")}
  46. allNetworksIDs := buildObjectIDs(allNetworks)
  47. allSecrets := []string{objectName("bar", "secret1")}
  48. allSecretsIDs := 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.NilError(t, cmd.Execute())
  57. assert.Contains(t, buf.String(), "Nothing found in stack: foo")
  58. assert.DeepEqual(t, cli.removedServices, allServicesIDs)
  59. assert.DeepEqual(t, cli.removedNetworks, allNetworksIDs)
  60. assert.DeepEqual(t, cli.removedSecrets, allSecretsIDs)
  61. }
  62. func TestContinueAfterError(t *testing.T) {
  63. allServices := []string{objectName("foo", "service1"), objectName("bar", "service1")}
  64. allServicesIDs := buildObjectIDs(allServices)
  65. allNetworks := []string{objectName("foo", "network1"), objectName("bar", "network1")}
  66. allNetworksIDs := buildObjectIDs(allNetworks)
  67. allSecrets := []string{objectName("foo", "secret1"), objectName("bar", "secret1")}
  68. allSecretsIDs := 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.Error(t, cmd.Execute(), "Failed to remove some resources from stack: foo")
  85. assert.DeepEqual(t, removedServices, allServicesIDs)
  86. assert.DeepEqual(t, cli.removedNetworks, allNetworksIDs)
  87. assert.DeepEqual(t, cli.removedSecrets, allSecretsIDs)
  88. }