docker_cli_service_update_test.go 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // +build !windows
  2. package main
  3. import (
  4. "encoding/json"
  5. "github.com/docker/docker/pkg/integration/checker"
  6. "github.com/docker/engine-api/types/swarm"
  7. "github.com/go-check/check"
  8. )
  9. func (s *DockerSwarmSuite) TestServiceUpdatePort(c *check.C) {
  10. d := s.AddDaemon(c, true, true)
  11. serviceName := "TestServiceUpdatePort"
  12. serviceArgs := append([]string{"service", "create", "--name", serviceName, "-p", "8080:8081", defaultSleepImage}, defaultSleepCommand...)
  13. // Create a service with a port mapping of 8080:8081.
  14. out, err := d.Cmd(serviceArgs...)
  15. c.Assert(err, checker.IsNil)
  16. waitAndAssert(c, defaultReconciliationTimeout, d.checkActiveContainerCount, checker.Equals, 1)
  17. // Update the service: changed the port mapping from 8080:8081 to 8082:8083.
  18. _, err = d.Cmd("service", "update", "--publish-add", "8082:8083", "--publish-rm", "8081", serviceName)
  19. c.Assert(err, checker.IsNil)
  20. // Inspect the service and verify port mapping
  21. expected := []swarm.PortConfig{
  22. {
  23. Protocol: "tcp",
  24. PublishedPort: 8082,
  25. TargetPort: 8083,
  26. },
  27. }
  28. out, err = d.Cmd("service", "inspect", "--format", "{{ json .Spec.EndpointSpec.Ports }}", serviceName)
  29. c.Assert(err, checker.IsNil)
  30. var portConfig []swarm.PortConfig
  31. if err := json.Unmarshal([]byte(out), &portConfig); err != nil {
  32. c.Fatalf("invalid JSON in inspect result: %v (%s)", err, out)
  33. }
  34. c.Assert(portConfig, checker.DeepEquals, expected)
  35. }
  36. func (s *DockerSwarmSuite) TestServiceUpdateLabel(c *check.C) {
  37. d := s.AddDaemon(c, true, true)
  38. out, err := d.Cmd("service", "create", "--name=test", "busybox", "top")
  39. c.Assert(err, checker.IsNil, check.Commentf(out))
  40. service := d.getService(c, "test")
  41. c.Assert(service.Spec.Labels, checker.HasLen, 0)
  42. // add label to empty set
  43. out, err = d.Cmd("service", "update", "test", "--label-add", "foo=bar")
  44. c.Assert(err, checker.IsNil, check.Commentf(out))
  45. service = d.getService(c, "test")
  46. c.Assert(service.Spec.Labels, checker.HasLen, 1)
  47. c.Assert(service.Spec.Labels["foo"], checker.Equals, "bar")
  48. // add label to non-empty set
  49. out, err = d.Cmd("service", "update", "test", "--label-add", "foo2=bar")
  50. c.Assert(err, checker.IsNil, check.Commentf(out))
  51. service = d.getService(c, "test")
  52. c.Assert(service.Spec.Labels, checker.HasLen, 2)
  53. c.Assert(service.Spec.Labels["foo2"], checker.Equals, "bar")
  54. out, err = d.Cmd("service", "update", "test", "--label-rm", "foo2")
  55. c.Assert(err, checker.IsNil, check.Commentf(out))
  56. service = d.getService(c, "test")
  57. c.Assert(service.Spec.Labels, checker.HasLen, 1)
  58. c.Assert(service.Spec.Labels["foo2"], checker.Equals, "")
  59. out, err = d.Cmd("service", "update", "test", "--label-rm", "foo")
  60. c.Assert(err, checker.IsNil, check.Commentf(out))
  61. service = d.getService(c, "test")
  62. c.Assert(service.Spec.Labels, checker.HasLen, 0)
  63. c.Assert(service.Spec.Labels["foo"], checker.Equals, "")
  64. // now make sure we can add again
  65. out, err = d.Cmd("service", "update", "test", "--label-add", "foo=bar")
  66. c.Assert(err, checker.IsNil, check.Commentf(out))
  67. service = d.getService(c, "test")
  68. c.Assert(service.Spec.Labels, checker.HasLen, 1)
  69. c.Assert(service.Spec.Labels["foo"], checker.Equals, "bar")
  70. }