github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/pkg/authorization/middleware_unix_test.go (about)

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