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