This makes separating middlewares from the core api easier. As an example, the authorization middleware is moved to it's own package. Initialize all static middlewares when the server is created, reducing allocations every time a route is wrapper with the middlewares. Signed-off-by: David Calavera <david.calavera@gmail.com> Upstream-commit: 8d3467626ee26cad48ad84f2181552dce7afccb6 Component: engine
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/docker/docker/api"
|
|
"github.com/docker/docker/api/server/httputils"
|
|
"github.com/docker/docker/api/server/middleware"
|
|
"github.com/docker/docker/pkg/version"
|
|
|
|
"golang.org/x/net/context"
|
|
)
|
|
|
|
func TestMiddlewares(t *testing.T) {
|
|
cfg := &Config{
|
|
Version: "0.1omega2",
|
|
}
|
|
srv := &Server{
|
|
cfg: cfg,
|
|
}
|
|
|
|
srv.UseMiddleware(middleware.NewVersionMiddleware(version.Version("0.1omega2"), api.DefaultVersion, api.MinVersion))
|
|
|
|
req, _ := http.NewRequest("GET", "/containers/json", nil)
|
|
resp := httptest.NewRecorder()
|
|
ctx := context.Background()
|
|
|
|
localHandler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if httputils.VersionFromContext(ctx) == "" {
|
|
t.Fatalf("Expected version, got empty string")
|
|
}
|
|
|
|
if sv := w.Header().Get("Server"); !strings.Contains(sv, "Docker/0.1omega2") {
|
|
t.Fatalf("Expected server version in the header `Docker/0.1omega2`, got %s", sv)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
handlerFunc := srv.handleWithGlobalMiddlewares(localHandler)
|
|
if err := handlerFunc(ctx, resp, req, map[string]string{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|