middleware_unix_test.go 1.6 KB

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