docker_cli_service_update_test.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. // +build !windows
  2. package main
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. "github.com/docker/docker/api/types/swarm"
  7. "github.com/docker/docker/integration-cli/checker"
  8. "github.com/go-check/check"
  9. )
  10. func (s *DockerSwarmSuite) TestServiceUpdateLabel(c *check.C) {
  11. d := s.AddDaemon(c, true, true)
  12. out, err := d.Cmd("service", "create", "--detach", "--no-resolve-image", "--name=test", "busybox", "top")
  13. c.Assert(err, checker.IsNil, check.Commentf(out))
  14. service := d.GetService(c, "test")
  15. c.Assert(service.Spec.Labels, checker.HasLen, 0)
  16. // add label to empty set
  17. out, err = d.Cmd("service", "update", "--detach", "test", "--label-add", "foo=bar")
  18. c.Assert(err, checker.IsNil, check.Commentf(out))
  19. service = d.GetService(c, "test")
  20. c.Assert(service.Spec.Labels, checker.HasLen, 1)
  21. c.Assert(service.Spec.Labels["foo"], checker.Equals, "bar")
  22. // add label to non-empty set
  23. out, err = d.Cmd("service", "update", "--detach", "test", "--label-add", "foo2=bar")
  24. c.Assert(err, checker.IsNil, check.Commentf(out))
  25. service = d.GetService(c, "test")
  26. c.Assert(service.Spec.Labels, checker.HasLen, 2)
  27. c.Assert(service.Spec.Labels["foo2"], checker.Equals, "bar")
  28. out, err = d.Cmd("service", "update", "--detach", "test", "--label-rm", "foo2")
  29. c.Assert(err, checker.IsNil, check.Commentf(out))
  30. service = d.GetService(c, "test")
  31. c.Assert(service.Spec.Labels, checker.HasLen, 1)
  32. c.Assert(service.Spec.Labels["foo2"], checker.Equals, "")
  33. out, err = d.Cmd("service", "update", "--detach", "test", "--label-rm", "foo")
  34. c.Assert(err, checker.IsNil, check.Commentf(out))
  35. service = d.GetService(c, "test")
  36. c.Assert(service.Spec.Labels, checker.HasLen, 0)
  37. c.Assert(service.Spec.Labels["foo"], checker.Equals, "")
  38. // now make sure we can add again
  39. out, err = d.Cmd("service", "update", "--detach", "test", "--label-add", "foo=bar")
  40. c.Assert(err, checker.IsNil, check.Commentf(out))
  41. service = d.GetService(c, "test")
  42. c.Assert(service.Spec.Labels, checker.HasLen, 1)
  43. c.Assert(service.Spec.Labels["foo"], checker.Equals, "bar")
  44. }
  45. func (s *DockerSwarmSuite) TestServiceUpdateSecrets(c *check.C) {
  46. d := s.AddDaemon(c, true, true)
  47. testName := "test_secret"
  48. id := d.CreateSecret(c, swarm.SecretSpec{
  49. Annotations: swarm.Annotations{
  50. Name: testName,
  51. },
  52. Data: []byte("TESTINGDATA"),
  53. })
  54. c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
  55. testTarget := "testing"
  56. serviceName := "test"
  57. out, err := d.Cmd("service", "create", "--detach", "--no-resolve-image", "--name", serviceName, "busybox", "top")
  58. c.Assert(err, checker.IsNil, check.Commentf(out))
  59. // add secret
  60. out, err = d.Cmd("service", "update", "--detach", "test", "--secret-add", fmt.Sprintf("source=%s,target=%s", testName, testTarget))
  61. c.Assert(err, checker.IsNil, check.Commentf(out))
  62. out, err = d.Cmd("service", "inspect", "--format", "{{ json .Spec.TaskTemplate.ContainerSpec.Secrets }}", serviceName)
  63. c.Assert(err, checker.IsNil)
  64. var refs []swarm.SecretReference
  65. c.Assert(json.Unmarshal([]byte(out), &refs), checker.IsNil)
  66. c.Assert(refs, checker.HasLen, 1)
  67. c.Assert(refs[0].SecretName, checker.Equals, testName)
  68. c.Assert(refs[0].File, checker.Not(checker.IsNil))
  69. c.Assert(refs[0].File.Name, checker.Equals, testTarget)
  70. // remove
  71. out, err = d.Cmd("service", "update", "--detach", "test", "--secret-rm", testName)
  72. c.Assert(err, checker.IsNil, check.Commentf(out))
  73. out, err = d.Cmd("service", "inspect", "--format", "{{ json .Spec.TaskTemplate.ContainerSpec.Secrets }}", serviceName)
  74. c.Assert(err, checker.IsNil)
  75. c.Assert(json.Unmarshal([]byte(out), &refs), checker.IsNil)
  76. c.Assert(refs, checker.HasLen, 0)
  77. }
  78. func (s *DockerSwarmSuite) TestServiceUpdateConfigs(c *check.C) {
  79. d := s.AddDaemon(c, true, true)
  80. testName := "test_config"
  81. id := d.CreateConfig(c, swarm.ConfigSpec{
  82. Annotations: swarm.Annotations{
  83. Name: testName,
  84. },
  85. Data: []byte("TESTINGDATA"),
  86. })
  87. c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("configs: %s", id))
  88. testTarget := "/testing"
  89. serviceName := "test"
  90. out, err := d.Cmd("service", "create", "--detach", "--no-resolve-image", "--name", serviceName, "busybox", "top")
  91. c.Assert(err, checker.IsNil, check.Commentf(out))
  92. // add config
  93. out, err = d.Cmd("service", "update", "--detach", "test", "--config-add", fmt.Sprintf("source=%s,target=%s", testName, testTarget))
  94. c.Assert(err, checker.IsNil, check.Commentf(out))
  95. out, err = d.Cmd("service", "inspect", "--format", "{{ json .Spec.TaskTemplate.ContainerSpec.Configs }}", serviceName)
  96. c.Assert(err, checker.IsNil)
  97. var refs []swarm.ConfigReference
  98. c.Assert(json.Unmarshal([]byte(out), &refs), checker.IsNil)
  99. c.Assert(refs, checker.HasLen, 1)
  100. c.Assert(refs[0].ConfigName, checker.Equals, testName)
  101. c.Assert(refs[0].File, checker.Not(checker.IsNil))
  102. c.Assert(refs[0].File.Name, checker.Equals, testTarget)
  103. // remove
  104. out, err = d.Cmd("service", "update", "--detach", "test", "--config-rm", testName)
  105. c.Assert(err, checker.IsNil, check.Commentf(out))
  106. out, err = d.Cmd("service", "inspect", "--format", "{{ json .Spec.TaskTemplate.ContainerSpec.Configs }}", serviceName)
  107. c.Assert(err, checker.IsNil)
  108. c.Assert(json.Unmarshal([]byte(out), &refs), checker.IsNil)
  109. c.Assert(refs, checker.HasLen, 0)
  110. }