From 4edb1364e94c8289104cee679786b5873e5aeb7c Mon Sep 17 00:00:00 2001 From: Carl Bergquist Date: Wed, 2 Dec 2020 13:42:17 +0100 Subject: [PATCH] fixes bug with invalid handler name for metrics (#29529) closes https://github.com/grafana/grafana/issues/29487 Signed-off-by: bergquist --- pkg/api/routing/route_register.go | 8 +++++--- pkg/api/routing/route_register_test.go | 11 ++++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/pkg/api/routing/route_register.go b/pkg/api/routing/route_register.go index b0acb581681..0d9952c6db0 100644 --- a/pkg/api/routing/route_register.go +++ b/pkg/api/routing/route_register.go @@ -118,22 +118,24 @@ func (rr *routeRegister) Register(router Router) { func (rr *routeRegister) route(pattern, method string, handlers ...macaron.Handler) { h := make([]macaron.Handler, 0) + fullPattern := rr.prefix + pattern + for _, fn := range rr.namedMiddleware { - h = append(h, fn(pattern)) + h = append(h, fn(fullPattern)) } h = append(h, rr.subfixHandlers...) h = append(h, handlers...) for _, r := range rr.routes { - if r.pattern == rr.prefix+pattern && r.method == method { + if r.pattern == fullPattern && r.method == method { panic("cannot add duplicate route") } } rr.routes = append(rr.routes, route{ method: method, - pattern: rr.prefix + pattern, + pattern: fullPattern, handlers: h, }) } diff --git a/pkg/api/routing/route_register_test.go b/pkg/api/routing/route_register_test.go index e7030d57eab..cf67abf06dc 100644 --- a/pkg/api/routing/route_register_test.go +++ b/pkg/api/routing/route_register_test.go @@ -214,8 +214,13 @@ func TestNamedMiddlewareRouteRegister(t *testing.T) { {method: "GET", pattern: "/user/admin/all", handlers: emptyHandlers(5)}, } + namedMiddlewares := map[string]bool{} // Setup - rr := NewRouteRegister(emptyHandler) + rr := NewRouteRegister(func(name string) macaron.Handler { + namedMiddlewares[name] = true + + return struct{ name string }{name: name} + }) rr.Delete("/admin", emptyHandler("1")) rr.Get("/down", emptyHandler("1"), emptyHandler("2")) @@ -247,6 +252,10 @@ func TestNamedMiddlewareRouteRegister(t *testing.T) { t.Errorf("want %s got %v", testTable[i].pattern, fr.route[i].pattern) } + if _, exist := namedMiddlewares[testTable[i].pattern]; !exist { + t.Errorf("could not find named route named %s", testTable[i].pattern) + } + if len(testTable[i].handlers) != len(fr.route[i].handlers) { t.Errorf("want %d handlers got %d handlers \ntestcase: %v\nroute: %v\n", len(testTable[i].handlers),