diff --git a/rest/engine.go b/rest/engine.go index b048b5ee0..1fb0f2f40 100644 --- a/rest/engine.go +++ b/rest/engine.go @@ -62,8 +62,8 @@ func (ng *engine) addRoutes(r featuredRoutes) { // need to guarantee the timeout is the max of all routes // otherwise impossible to set http.Server.ReadTimeout & WriteTimeout - if r.timeout != nil { - ng.timeout = *r.timeout + if r.timeout > ng.timeout { + ng.timeout = r.timeout } } @@ -192,9 +192,9 @@ func (ng *engine) checkedMaxBytes(bytes int64) int64 { return ng.conf.MaxBytes } -func (ng *engine) checkedTimeout(timeout *time.Duration) time.Duration { - if timeout != nil { - return *timeout +func (ng *engine) checkedTimeout(timeout time.Duration) time.Duration { + if timeout > 0 { + return timeout } return time.Duration(ng.conf.Timeout) * time.Millisecond diff --git a/rest/engine_test.go b/rest/engine_test.go index 9cae95904..e7a08eb43 100644 --- a/rest/engine_test.go +++ b/rest/engine_test.go @@ -64,9 +64,6 @@ Verbose: true `, } - minuteDuration := time.Minute - secondDuration := time.Second - routes := []featuredRoutes{ { jwt: jwtSetting{}, @@ -76,7 +73,7 @@ Verbose: true Path: "/", Handler: func(w http.ResponseWriter, r *http.Request) {}, }}, - timeout: &minuteDuration, + timeout: time.Minute, }, { priority: true, @@ -87,7 +84,7 @@ Verbose: true Path: "/", Handler: func(w http.ResponseWriter, r *http.Request) {}, }}, - timeout: &secondDuration, + timeout: time.Second, }, { priority: true, @@ -230,8 +227,8 @@ Verbose: true })) timeout := time.Second * 3 - if route.timeout != nil { - timeout = *route.timeout + if route.timeout > timeout { + timeout = route.timeout } assert.Equal(t, timeout, ng.timeout) }) @@ -239,14 +236,10 @@ Verbose: true } } -func getPtrTimeDuration(dur time.Duration) *time.Duration { - return &dur -} - func TestEngine_checkedTimeout(t *testing.T) { tests := []struct { name string - timeout *time.Duration + timeout time.Duration expect time.Duration }{ { @@ -255,24 +248,19 @@ func TestEngine_checkedTimeout(t *testing.T) { }, { name: "less", - timeout: getPtrTimeDuration(time.Millisecond * 500), + timeout: time.Millisecond * 500, expect: time.Millisecond * 500, }, { name: "equal", - timeout: getPtrTimeDuration(time.Second), + timeout: time.Second, expect: time.Second, }, { name: "more", - timeout: getPtrTimeDuration(time.Millisecond * 1500), + timeout: time.Millisecond * 1500, expect: time.Millisecond * 1500, }, - { - name: "set zero", - timeout: getPtrTimeDuration(0), - expect: 0, - }, } ng := newEngine(RestConf{ diff --git a/rest/server.go b/rest/server.go index eb7aed1bc..b97ec5aa5 100644 --- a/rest/server.go +++ b/rest/server.go @@ -283,14 +283,14 @@ func WithSignature(signature SignatureConf) RouteOption { func WithSSE() RouteOption { return func(r *featuredRoutes) { r.sse = true - r.timeout = nil + r.timeout = 0 } } // WithTimeout returns a RouteOption to set timeout with given value. func WithTimeout(timeout time.Duration) RouteOption { return func(r *featuredRoutes) { - r.timeout = &timeout + r.timeout = timeout } } diff --git a/rest/server_test.go b/rest/server_test.go index 9676b3f87..9a513ddc3 100644 --- a/rest/server_test.go +++ b/rest/server_test.go @@ -345,7 +345,7 @@ func TestWithPriority(t *testing.T) { func TestWithTimeout(t *testing.T) { var fr featuredRoutes WithTimeout(time.Hour)(&fr) - assert.Equal(t, time.Hour, *fr.timeout) + assert.Equal(t, time.Hour, fr.timeout) } func TestWithTLSConfig(t *testing.T) { diff --git a/rest/types.go b/rest/types.go index c69e750a9..6d0bcab54 100644 --- a/rest/types.go +++ b/rest/types.go @@ -31,7 +31,7 @@ type ( } featuredRoutes struct { - timeout *time.Duration + timeout time.Duration priority bool jwt jwtSetting signature signatureSetting