Bläddra i källkod

feat:Add `Routes` method for server (#2125)

Co-authored-by: czyt <czyt@w.cn>
虫子樱桃 2 år sedan
förälder
incheckning
d71b3c841f
2 ändrade filer med 59 tillägg och 0 borttagningar
  1. 9 0
      rest/server.go
  2. 50 0
      rest/server_test.go

+ 9 - 0
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.

+ 50 - 0
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)