version_test.go 2.4 KB

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