session_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package session // import "github.com/docker/docker/integration/session"
  2. import (
  3. "net/http"
  4. "testing"
  5. "github.com/docker/docker/internal/test/daemon"
  6. req "github.com/docker/docker/internal/test/request"
  7. "gotest.tools/assert"
  8. is "gotest.tools/assert/cmp"
  9. "gotest.tools/skip"
  10. )
  11. func TestSessionCreate(t *testing.T) {
  12. skip.If(t, testEnv.OSType == "windows", "FIXME")
  13. defer setupTest(t)()
  14. daemonHost := req.DaemonHost()
  15. if !testEnv.DaemonInfo.ExperimentalBuild {
  16. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  17. d := daemon.New(t, daemon.WithExperimental)
  18. d.StartWithBusybox(t)
  19. defer d.Stop(t)
  20. daemonHost = d.Sock()
  21. }
  22. res, body, err := req.Post("/session",
  23. req.Host(daemonHost),
  24. req.With(func(r *http.Request) error {
  25. r.Header.Set("X-Docker-Expose-Session-Uuid", "testsessioncreate") // so we don't block default name if something else is using it
  26. r.Header.Set("Upgrade", "h2c")
  27. return nil
  28. }),
  29. )
  30. assert.NilError(t, err)
  31. assert.NilError(t, body.Close())
  32. assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusSwitchingProtocols))
  33. assert.Check(t, is.Equal(res.Header.Get("Upgrade"), "h2c"))
  34. }
  35. func TestSessionCreateWithBadUpgrade(t *testing.T) {
  36. skip.If(t, testEnv.OSType == "windows", "FIXME")
  37. defer setupTest(t)()
  38. daemonHost := req.DaemonHost()
  39. if !testEnv.DaemonInfo.ExperimentalBuild {
  40. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  41. d := daemon.New(t, daemon.WithExperimental)
  42. d.StartWithBusybox(t)
  43. defer d.Stop(t)
  44. daemonHost = d.Sock()
  45. }
  46. res, body, err := req.Post("/session", req.Host(daemonHost))
  47. assert.NilError(t, err)
  48. assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusBadRequest))
  49. buf, err := req.ReadBody(body)
  50. assert.NilError(t, err)
  51. assert.Check(t, is.Contains(string(buf), "no upgrade"))
  52. res, body, err = req.Post("/session",
  53. req.Host(daemonHost),
  54. req.With(func(r *http.Request) error {
  55. r.Header.Set("Upgrade", "foo")
  56. return nil
  57. }),
  58. )
  59. assert.NilError(t, err)
  60. assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusBadRequest))
  61. buf, err = req.ReadBody(body)
  62. assert.NilError(t, err)
  63. assert.Check(t, is.Contains(string(buf), "not supported"))
  64. }