docker_api_swarm_secret_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // +build !windows
  2. package main
  3. import (
  4. "fmt"
  5. "net/http"
  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) 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. status, out, err := d.SockRequest("GET", "/secrets/"+id, nil)
  49. c.Assert(err, checker.IsNil)
  50. c.Assert(status, checker.Equals, http.StatusNotFound, check.Commentf("secret delete: %s", string(out)))
  51. // delete non-existing secret, daemon should return a status code of 404
  52. id = "non-existing"
  53. status, out, err = d.SockRequest("DELETE", "/secrets/"+id, nil)
  54. c.Assert(err, checker.IsNil)
  55. c.Assert(status, checker.Equals, http.StatusNotFound, check.Commentf("secret delete: %s", string(out)))
  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. url := fmt.Sprintf("/secrets/%s/update?version=%d", secret.ID, secret.Version.Index)
  101. status, out, err := d.SockRequest("POST", url, secret.Spec)
  102. c.Assert(err, checker.IsNil, check.Commentf(string(out)))
  103. c.Assert(status, checker.Equals, http.StatusBadRequest, check.Commentf("output: %q", string(out)))
  104. }