update_test.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package service
  2. import (
  3. "sort"
  4. "testing"
  5. "github.com/docker/docker/pkg/testutil/assert"
  6. mounttypes "github.com/docker/engine-api/types/mount"
  7. "github.com/docker/engine-api/types/swarm"
  8. )
  9. func TestUpdateServiceArgs(t *testing.T) {
  10. flags := newUpdateCommand(nil).Flags()
  11. flags.Set("args", "the \"new args\"")
  12. spec := &swarm.ServiceSpec{}
  13. cspec := &spec.TaskTemplate.ContainerSpec
  14. cspec.Args = []string{"old", "args"}
  15. updateService(flags, spec)
  16. assert.EqualStringSlice(t, cspec.Args, []string{"the", "new args"})
  17. }
  18. func TestUpdateLabels(t *testing.T) {
  19. flags := newUpdateCommand(nil).Flags()
  20. flags.Set("label-add", "toadd=newlabel")
  21. flags.Set("label-rm", "toremove")
  22. labels := map[string]string{
  23. "toremove": "thelabeltoremove",
  24. "tokeep": "value",
  25. }
  26. updateLabels(flags, &labels)
  27. assert.Equal(t, len(labels), 2)
  28. assert.Equal(t, labels["tokeep"], "value")
  29. assert.Equal(t, labels["toadd"], "newlabel")
  30. }
  31. func TestUpdateLabelsRemoveALabelThatDoesNotExist(t *testing.T) {
  32. flags := newUpdateCommand(nil).Flags()
  33. flags.Set("label-rm", "dne")
  34. labels := map[string]string{"foo": "theoldlabel"}
  35. updateLabels(flags, &labels)
  36. assert.Equal(t, len(labels), 1)
  37. }
  38. func TestUpdatePlacement(t *testing.T) {
  39. flags := newUpdateCommand(nil).Flags()
  40. flags.Set("constraint-add", "node=toadd")
  41. flags.Set("constraint-rm", "node!=toremove")
  42. placement := &swarm.Placement{
  43. Constraints: []string{"node!=toremove", "container=tokeep"},
  44. }
  45. updatePlacement(flags, placement)
  46. assert.Equal(t, len(placement.Constraints), 2)
  47. assert.Equal(t, placement.Constraints[0], "container=tokeep")
  48. assert.Equal(t, placement.Constraints[1], "node=toadd")
  49. }
  50. func TestUpdateEnvironment(t *testing.T) {
  51. flags := newUpdateCommand(nil).Flags()
  52. flags.Set("env-add", "toadd=newenv")
  53. flags.Set("env-rm", "toremove")
  54. envs := []string{"toremove=theenvtoremove", "tokeep=value"}
  55. updateEnvironment(flags, &envs)
  56. assert.Equal(t, len(envs), 2)
  57. // Order has been removed in updateEnvironment (map)
  58. sort.Strings(envs)
  59. assert.Equal(t, envs[0], "toadd=newenv")
  60. assert.Equal(t, envs[1], "tokeep=value")
  61. }
  62. func TestUpdateEnvironmentWithDuplicateValues(t *testing.T) {
  63. flags := newUpdateCommand(nil).Flags()
  64. flags.Set("env-add", "foo=newenv")
  65. flags.Set("env-add", "foo=dupe")
  66. flags.Set("env-rm", "foo")
  67. envs := []string{"foo=value"}
  68. updateEnvironment(flags, &envs)
  69. assert.Equal(t, len(envs), 0)
  70. }
  71. func TestUpdateEnvironmentWithDuplicateKeys(t *testing.T) {
  72. // Test case for #25404
  73. flags := newUpdateCommand(nil).Flags()
  74. flags.Set("env-add", "A=b")
  75. envs := []string{"A=c"}
  76. updateEnvironment(flags, &envs)
  77. assert.Equal(t, len(envs), 1)
  78. assert.Equal(t, envs[0], "A=b")
  79. }
  80. func TestUpdateMounts(t *testing.T) {
  81. flags := newUpdateCommand(nil).Flags()
  82. flags.Set("mount-add", "type=volume,target=/toadd")
  83. flags.Set("mount-rm", "/toremove")
  84. mounts := []mounttypes.Mount{
  85. {Target: "/toremove", Type: mounttypes.TypeBind},
  86. {Target: "/tokeep", Type: mounttypes.TypeBind},
  87. }
  88. updateMounts(flags, &mounts)
  89. assert.Equal(t, len(mounts), 2)
  90. assert.Equal(t, mounts[0].Target, "/tokeep")
  91. assert.Equal(t, mounts[1].Target, "/toadd")
  92. }
  93. func TestUpdateNetworks(t *testing.T) {
  94. flags := newUpdateCommand(nil).Flags()
  95. flags.Set("network-add", "toadd")
  96. flags.Set("network-rm", "toremove")
  97. attachments := []swarm.NetworkAttachmentConfig{
  98. {Target: "toremove", Aliases: []string{"foo"}},
  99. {Target: "tokeep"},
  100. }
  101. updateNetworks(flags, &attachments)
  102. assert.Equal(t, len(attachments), 2)
  103. assert.Equal(t, attachments[0].Target, "tokeep")
  104. assert.Equal(t, attachments[1].Target, "toadd")
  105. }
  106. func TestUpdatePorts(t *testing.T) {
  107. flags := newUpdateCommand(nil).Flags()
  108. flags.Set("publish-add", "1000:1000")
  109. flags.Set("publish-rm", "333/udp")
  110. portConfigs := []swarm.PortConfig{
  111. {TargetPort: 333, Protocol: swarm.PortConfigProtocolUDP},
  112. {TargetPort: 555},
  113. }
  114. updatePorts(flags, &portConfigs)
  115. assert.Equal(t, len(portConfigs), 2)
  116. assert.Equal(t, portConfigs[0].TargetPort, uint32(555))
  117. assert.Equal(t, portConfigs[1].TargetPort, uint32(1000))
  118. }