diff --git a/rest/server.go b/rest/server.go index b0debcacdacc..fe1464ce6090 100644 --- a/rest/server.go +++ b/rest/server.go @@ -79,6 +79,15 @@ func (s *Server) PrintRoutes() { s.ngin.print() } +// Routes returns the Http routers which are registered in the engine +func (s *Server) Routes() []Route { + routers := make([]Route, len(s.ngin.routes)) + for _, r := range s.ngin.routes { + routers = append(routers, r.routes...) + } + return routers +} + // Start starts the Server. // Graceful shutdown is enabled by default. // Use proc.SetTimeToForceQuit to customize the graceful shutdown period. diff --git a/rest/server_test.go b/rest/server_test.go index 0f4af3f56888..d9cc4011ad97 100644 --- a/rest/server_test.go +++ b/rest/server_test.go @@ -425,6 +425,56 @@ Port: 54321 assert.Equal(t, expect, out) } +func TestServer_Routes(t *testing.T) { + const ( + configYaml = ` +Name: foo +Port: 54321 +` + expect = `GET /foo GET /bar GET /foo/:bar GET /foo/:bar/baz` + ) + + var cnf RestConf + assert.Nil(t, conf.LoadFromYamlBytes([]byte(configYaml), &cnf)) + + svr, err := NewServer(cnf) + assert.Nil(t, err) + + svr.AddRoutes([]Route{ + { + Method: http.MethodGet, + Path: "/foo", + Handler: http.NotFound, + }, + { + Method: http.MethodGet, + Path: "/bar", + Handler: http.NotFound, + }, + { + Method: http.MethodGet, + Path: "/foo/:bar", + Handler: http.NotFound, + }, + { + Method: http.MethodGet, + Path: "/foo/:bar/baz", + Handler: http.NotFound, + }, + }) + + routes := svr.Routes() + var buf strings.Builder + for i := 0; i < len(routes); i++ { + buf.WriteString(routes[i].Method) + buf.WriteString(" ") + buf.WriteString(routes[i].Path) + buf.WriteString(" ") + } + + assert.Equal(t, expect, strings.Trim(buf.String(), " ")) +} + func TestHandleError(t *testing.T) { assert.NotPanics(t, func() { handleError(nil)