docker_api_swarm_secret_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. // +build !windows
  2. package main
  3. import (
  4. "net/http"
  5. "github.com/docker/docker/api/types/swarm"
  6. "github.com/docker/docker/integration-cli/checker"
  7. "github.com/go-check/check"
  8. "golang.org/x/net/context"
  9. )
  10. func (s *DockerSwarmSuite) TestAPISwarmSecretsEmptyList(c *check.C) {
  11. d := s.AddDaemon(c, true, true)
  12. secrets := d.ListSecrets(c)
  13. c.Assert(secrets, checker.NotNil)
  14. c.Assert(len(secrets), checker.Equals, 0, check.Commentf("secrets: %#v", secrets))
  15. }
  16. func (s *DockerSwarmSuite) TestAPISwarmSecretsCreate(c *check.C) {
  17. d := s.AddDaemon(c, true, true)
  18. testName := "test_secret"
  19. secretSpec := swarm.SecretSpec{
  20. Annotations: swarm.Annotations{
  21. Name: testName,
  22. },
  23. Data: []byte("TESTINGDATA"),
  24. }
  25. id := d.CreateSecret(c, secretSpec)
  26. c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
  27. secrets := d.ListSecrets(c)
  28. c.Assert(len(secrets), checker.Equals, 1, check.Commentf("secrets: %#v", secrets))
  29. name := secrets[0].Spec.Annotations.Name
  30. c.Assert(name, checker.Equals, testName, check.Commentf("secret: %s", name))
  31. // create an already existing secret, daemon should return a status code of 409
  32. status, out, err := d.SockRequest("POST", "/secrets/create", secretSpec)
  33. c.Assert(err, checker.IsNil)
  34. c.Assert(status, checker.Equals, http.StatusConflict, check.Commentf("secret create: %s", string(out)))
  35. }
  36. func (s *DockerSwarmSuite) TestAPISwarmSecretsDelete(c *check.C) {
  37. d := s.AddDaemon(c, true, true)
  38. testName := "test_secret"
  39. id := d.CreateSecret(c, swarm.SecretSpec{Annotations: swarm.Annotations{
  40. Name: testName,
  41. },
  42. Data: []byte("TESTINGDATA"),
  43. })
  44. c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
  45. secret := d.GetSecret(c, id)
  46. c.Assert(secret.ID, checker.Equals, id, check.Commentf("secret: %v", secret))
  47. d.DeleteSecret(c, secret.ID)
  48. cli, err := d.NewClient()
  49. c.Assert(err, checker.IsNil)
  50. defer cli.Close()
  51. _, _, err = cli.SecretInspectWithRaw(context.Background(), id)
  52. c.Assert(err.Error(), checker.Contains, "No such secret")
  53. id = "non-existing"
  54. err = cli.SecretRemove(context.Background(), id)
  55. c.Assert(err.Error(), checker.Contains, "No such secret: non-existing")
  56. }
  57. func (s *DockerSwarmSuite) TestAPISwarmSecretsUpdate(c *check.C) {
  58. d := s.AddDaemon(c, true, true)
  59. testName := "test_secret"
  60. id := d.CreateSecret(c, swarm.SecretSpec{
  61. Annotations: swarm.Annotations{
  62. Name: testName,
  63. Labels: map[string]string{
  64. "test": "test1",
  65. },
  66. },
  67. Data: []byte("TESTINGDATA"),
  68. })
  69. c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
  70. secret := d.GetSecret(c, id)
  71. c.Assert(secret.ID, checker.Equals, id, check.Commentf("secret: %v", secret))
  72. // test UpdateSecret with full ID
  73. d.UpdateSecret(c, id, func(s *swarm.Secret) {
  74. s.Spec.Labels = map[string]string{
  75. "test": "test1",
  76. }
  77. })
  78. secret = d.GetSecret(c, id)
  79. c.Assert(secret.Spec.Labels["test"], checker.Equals, "test1", check.Commentf("secret: %v", secret))
  80. // test UpdateSecret with full name
  81. d.UpdateSecret(c, secret.Spec.Name, func(s *swarm.Secret) {
  82. s.Spec.Labels = map[string]string{
  83. "test": "test2",
  84. }
  85. })
  86. secret = d.GetSecret(c, id)
  87. c.Assert(secret.Spec.Labels["test"], checker.Equals, "test2", check.Commentf("secret: %v", secret))
  88. // test UpdateSecret with prefix ID
  89. d.UpdateSecret(c, id[:1], func(s *swarm.Secret) {
  90. s.Spec.Labels = map[string]string{
  91. "test": "test3",
  92. }
  93. })
  94. secret = d.GetSecret(c, id)
  95. c.Assert(secret.Spec.Labels["test"], checker.Equals, "test3", check.Commentf("secret: %v", secret))
  96. // test UpdateSecret in updating Data which is not supported in daemon
  97. // this test will produce an error in func UpdateSecret
  98. secret = d.GetSecret(c, id)
  99. secret.Spec.Data = []byte("TESTINGDATA2")
  100. cli, err := d.NewClient()
  101. c.Assert(err, checker.IsNil)
  102. defer cli.Close()
  103. expected := "only updates to Labels are allowed"
  104. err = cli.SecretUpdate(context.Background(), secret.ID, secret.Version, secret.Spec)
  105. c.Assert(err.Error(), checker.Contains, expected)
  106. }