version_test.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package middleware // import "github.com/docker/docker/api/server/middleware"
  2. import (
  3. "context"
  4. "net/http"
  5. "net/http/httptest"
  6. "runtime"
  7. "testing"
  8. "github.com/docker/docker/api/server/httputils"
  9. "gotest.tools/v3/assert"
  10. is "gotest.tools/v3/assert/cmp"
  11. )
  12. func TestVersionMiddlewareVersion(t *testing.T) {
  13. defaultVersion := "1.10.0"
  14. minVersion := "1.2.0"
  15. expectedVersion := defaultVersion
  16. handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
  17. v := httputils.VersionFromContext(ctx)
  18. assert.Check(t, is.Equal(expectedVersion, v))
  19. return nil
  20. }
  21. m := NewVersionMiddleware(defaultVersion, defaultVersion, minVersion)
  22. h := m.WrapHandler(handler)
  23. req, _ := http.NewRequest(http.MethodGet, "/containers/json", nil)
  24. resp := httptest.NewRecorder()
  25. ctx := context.Background()
  26. tests := []struct {
  27. reqVersion string
  28. expectedVersion string
  29. errString string
  30. }{
  31. {
  32. expectedVersion: "1.10.0",
  33. },
  34. {
  35. reqVersion: "1.9.0",
  36. expectedVersion: "1.9.0",
  37. },
  38. {
  39. reqVersion: "0.1",
  40. errString: "client version 0.1 is too old. Minimum supported API version is 1.2.0, please upgrade your client to a newer version",
  41. },
  42. {
  43. reqVersion: "9999.9999",
  44. errString: "client version 9999.9999 is too new. Maximum supported API version is 1.10.0",
  45. },
  46. }
  47. for _, test := range tests {
  48. expectedVersion = test.expectedVersion
  49. err := h(ctx, resp, req, map[string]string{"version": test.reqVersion})
  50. if test.errString != "" {
  51. assert.Check(t, is.Error(err, test.errString))
  52. } else {
  53. assert.Check(t, err)
  54. }
  55. }
  56. }
  57. func TestVersionMiddlewareWithErrorsReturnsHeaders(t *testing.T) {
  58. handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
  59. v := httputils.VersionFromContext(ctx)
  60. assert.Check(t, len(v) != 0)
  61. return nil
  62. }
  63. defaultVersion := "1.10.0"
  64. minVersion := "1.2.0"
  65. m := NewVersionMiddleware(defaultVersion, defaultVersion, minVersion)
  66. h := m.WrapHandler(handler)
  67. req, _ := http.NewRequest(http.MethodGet, "/containers/json", nil)
  68. resp := httptest.NewRecorder()
  69. ctx := context.Background()
  70. vars := map[string]string{"version": "0.1"}
  71. err := h(ctx, resp, req, vars)
  72. assert.Check(t, is.ErrorContains(err, ""))
  73. hdr := resp.Result().Header
  74. assert.Check(t, is.Contains(hdr.Get("Server"), "Docker/"+defaultVersion))
  75. assert.Check(t, is.Contains(hdr.Get("Server"), runtime.GOOS))
  76. assert.Check(t, is.Equal(hdr.Get("API-Version"), defaultVersion))
  77. assert.Check(t, is.Equal(hdr.Get("OSType"), runtime.GOOS))
  78. }