github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/pkg/authorization/middleware_unix_test.go (about)

     1  // +build !windows
     2  
     3  package authorization // import "github.com/docker/docker/pkg/authorization"
     4  
     5  import (
     6  	"context"
     7  	"net/http"
     8  	"net/http/httptest"
     9  	"testing"
    10  
    11  	"github.com/docker/docker/pkg/plugingetter"
    12  	"gotest.tools/v3/assert"
    13  	is "gotest.tools/v3/assert/cmp"
    14  )
    15  
    16  func TestMiddlewareWrapHandler(t *testing.T) {
    17  	server := authZPluginTestServer{t: t}
    18  	server.start()
    19  	defer server.stop()
    20  
    21  	authZPlugin := createTestPlugin(t, server.socketAddress())
    22  	pluginNames := []string{authZPlugin.name}
    23  
    24  	var pluginGetter plugingetter.PluginGetter
    25  	middleWare := NewMiddleware(pluginNames, pluginGetter)
    26  	handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
    27  		return nil
    28  	}
    29  
    30  	authList := []Plugin{authZPlugin}
    31  	middleWare.SetPlugins([]string{"My Test Plugin"})
    32  	setAuthzPlugins(middleWare, authList)
    33  	mdHandler := middleWare.WrapHandler(handler)
    34  	assert.Assert(t, mdHandler != nil)
    35  
    36  	addr := "www.example.com/auth"
    37  	req, _ := http.NewRequest(http.MethodGet, addr, nil)
    38  	req.RequestURI = addr
    39  	req.Header.Add("header", "value")
    40  
    41  	resp := httptest.NewRecorder()
    42  	ctx := context.Background()
    43  
    44  	t.Run("Error Test Case :", func(t *testing.T) {
    45  		server.replayResponse = Response{
    46  			Allow: false,
    47  			Msg:   "Server Auth Not Allowed",
    48  		}
    49  		if err := mdHandler(ctx, resp, req, map[string]string{}); err == nil {
    50  			assert.Assert(t, is.ErrorContains(err, ""))
    51  		}
    52  
    53  	})
    54  
    55  	t.Run("Positive Test Case :", func(t *testing.T) {
    56  		server.replayResponse = Response{
    57  			Allow: true,
    58  			Msg:   "Server Auth Allowed",
    59  		}
    60  		if err := mdHandler(ctx, resp, req, map[string]string{}); err != nil {
    61  			assert.NilError(t, err)
    62  		}
    63  
    64  	})
    65  
    66  }