ping_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package system // import "github.com/docker/docker/integration/system"
  2. import (
  3. "context"
  4. "net/http"
  5. "strings"
  6. "testing"
  7. "github.com/docker/docker/api/types/swarm"
  8. "github.com/docker/docker/api/types/versions"
  9. "github.com/docker/docker/testutil/daemon"
  10. "github.com/docker/docker/testutil/request"
  11. "gotest.tools/v3/assert"
  12. "gotest.tools/v3/skip"
  13. )
  14. func TestPingCacheHeaders(t *testing.T) {
  15. skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "skip test from new feature")
  16. defer setupTest(t)()
  17. res, _, err := request.Get("/_ping")
  18. assert.NilError(t, err)
  19. assert.Equal(t, res.StatusCode, http.StatusOK)
  20. assert.Equal(t, hdr(res, "Cache-Control"), "no-cache, no-store, must-revalidate")
  21. assert.Equal(t, hdr(res, "Pragma"), "no-cache")
  22. }
  23. func TestPingGet(t *testing.T) {
  24. defer setupTest(t)()
  25. res, body, err := request.Get("/_ping")
  26. assert.NilError(t, err)
  27. b, err := request.ReadBody(body)
  28. assert.NilError(t, err)
  29. assert.Equal(t, string(b), "OK")
  30. assert.Equal(t, res.StatusCode, http.StatusOK)
  31. assert.Check(t, hdr(res, "API-Version") != "")
  32. }
  33. func TestPingHead(t *testing.T) {
  34. skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "skip test from new feature")
  35. defer setupTest(t)()
  36. res, body, err := request.Head("/_ping")
  37. assert.NilError(t, err)
  38. b, err := request.ReadBody(body)
  39. assert.NilError(t, err)
  40. assert.Equal(t, 0, len(b))
  41. assert.Equal(t, res.StatusCode, http.StatusOK)
  42. assert.Check(t, hdr(res, "API-Version") != "")
  43. }
  44. func TestPingSwarmHeader(t *testing.T) {
  45. skip.If(t, testEnv.IsRemoteDaemon)
  46. skip.If(t, testEnv.DaemonInfo.OSType == "windows")
  47. defer setupTest(t)()
  48. d := daemon.New(t)
  49. d.Start(t)
  50. defer d.Stop(t)
  51. client := d.NewClientT(t)
  52. defer client.Close()
  53. ctx := context.TODO()
  54. t.Run("before swarm init", func(t *testing.T) {
  55. res, _, err := request.Get("/_ping")
  56. assert.NilError(t, err)
  57. assert.Equal(t, res.StatusCode, http.StatusOK)
  58. assert.Equal(t, hdr(res, "Swarm"), "inactive")
  59. })
  60. _, err := client.SwarmInit(ctx, swarm.InitRequest{ListenAddr: "127.0.0.1", AdvertiseAddr: "127.0.0.1:2377"})
  61. assert.NilError(t, err)
  62. t.Run("after swarm init", func(t *testing.T) {
  63. res, _, err := request.Get("/_ping", request.Host(d.Sock()))
  64. assert.NilError(t, err)
  65. assert.Equal(t, res.StatusCode, http.StatusOK)
  66. assert.Equal(t, hdr(res, "Swarm"), "active/manager")
  67. })
  68. err = client.SwarmLeave(ctx, true)
  69. assert.NilError(t, err)
  70. t.Run("after swarm leave", func(t *testing.T) {
  71. res, _, err := request.Get("/_ping", request.Host(d.Sock()))
  72. assert.NilError(t, err)
  73. assert.Equal(t, res.StatusCode, http.StatusOK)
  74. assert.Equal(t, hdr(res, "Swarm"), "inactive")
  75. })
  76. }
  77. func hdr(res *http.Response, name string) string {
  78. val, ok := res.Header[http.CanonicalHeaderKey(name)]
  79. if !ok || len(val) == 0 {
  80. return ""
  81. }
  82. return strings.Join(val, ", ")
  83. }