github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/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  }