update_test.go 3.9 KB

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