* fix: #2700, timeout not enough for writing responses * fix: test fail * chore: add comments
This commit is contained in:
@@ -287,10 +287,9 @@ func (ng *engine) withTimeout() internal.StartOption {
|
|||||||
// without this timeout setting, the server will time out and respond 503 Service Unavailable,
|
// without this timeout setting, the server will time out and respond 503 Service Unavailable,
|
||||||
// which triggers the circuit breaker.
|
// which triggers the circuit breaker.
|
||||||
svr.ReadTimeout = 4 * time.Duration(timeout) * time.Millisecond / 5
|
svr.ReadTimeout = 4 * time.Duration(timeout) * time.Millisecond / 5
|
||||||
// factor 0.9, to avoid clients not reading the response
|
// factor 1.1, to avoid servers don't have enough time to write responses.
|
||||||
// without this timeout setting, the server will time out and respond 503 Service Unavailable,
|
// setting the factor less than 1.0 may lead clients not receiving the responses.
|
||||||
// which triggers the circuit breaker.
|
svr.WriteTimeout = 11 * time.Duration(timeout) * time.Millisecond / 10
|
||||||
svr.WriteTimeout = 9 * time.Duration(timeout) * time.Millisecond / 10
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -323,7 +323,7 @@ func TestEngine_withTimeout(t *testing.T) {
|
|||||||
|
|
||||||
assert.Equal(t, time.Duration(test.timeout)*time.Millisecond*4/5, svr.ReadTimeout)
|
assert.Equal(t, time.Duration(test.timeout)*time.Millisecond*4/5, svr.ReadTimeout)
|
||||||
assert.Equal(t, time.Duration(0), svr.ReadHeaderTimeout)
|
assert.Equal(t, time.Duration(0), svr.ReadHeaderTimeout)
|
||||||
assert.Equal(t, time.Duration(test.timeout)*time.Millisecond*9/10, svr.WriteTimeout)
|
assert.Equal(t, time.Duration(test.timeout)*time.Millisecond*11/10, svr.WriteTimeout)
|
||||||
assert.Equal(t, time.Duration(0), svr.IdleTimeout)
|
assert.Equal(t, time.Duration(0), svr.IdleTimeout)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,6 +90,25 @@ func (s *Server) Routes() []Route {
|
|||||||
return routes
|
return routes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ServeHTTP is for test purpose, allow developer to do a unit test with
|
||||||
|
// all defined router without starting an HTTP Server.
|
||||||
|
//
|
||||||
|
// For example:
|
||||||
|
//
|
||||||
|
// server := MustNewServer(...)
|
||||||
|
// server.addRoute(...) // router a
|
||||||
|
// server.addRoute(...) // router b
|
||||||
|
// server.addRoute(...) // router c
|
||||||
|
//
|
||||||
|
// r, _ := http.NewRequest(...)
|
||||||
|
// w := httptest.NewRecorder(...)
|
||||||
|
// server.ServeHTTP(w, r)
|
||||||
|
// // verify the response
|
||||||
|
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
|
s.ngin.bindRoutes(s.router)
|
||||||
|
s.router.ServeHTTP(w, r)
|
||||||
|
}
|
||||||
|
|
||||||
// Start starts the Server.
|
// Start starts the Server.
|
||||||
// Graceful shutdown is enabled by default.
|
// Graceful shutdown is enabled by default.
|
||||||
// Use proc.SetTimeToForceQuit to customize the graceful shutdown period.
|
// Use proc.SetTimeToForceQuit to customize the graceful shutdown period.
|
||||||
@@ -307,8 +326,3 @@ func newCorsRouter(router httpx.Router, headerFn func(http.Header), origins ...s
|
|||||||
func (c *corsRouter) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (c *corsRouter) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
c.middleware(c.Router.ServeHTTP)(w, r)
|
c.middleware(c.Router.ServeHTTP)(w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
||||||
s.ngin.bindRoutes(s.router)
|
|
||||||
s.router.ServeHTTP(w, r)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -92,19 +92,19 @@ func TestString_Camel2Snake(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
input: "goZero",
|
input: "goZero",
|
||||||
want: "go_zero",
|
want: "go_zero",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "Gozero",
|
input: "Gozero",
|
||||||
want: "gozero",
|
want: "gozero",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "GoZero",
|
input: "GoZero",
|
||||||
want: "go_zero",
|
want: "go_zero",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "Go_Zero",
|
input: "Go_Zero",
|
||||||
want: "go__zero",
|
want: "go__zero",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
|
|||||||
Reference in New Issue
Block a user