@@ -2135,6 +2135,83 @@ func TestTraceInfoOnTimeout(t *testing.T) {
21352135 assertEqual (t , true , tr .TotalTime == resp .Time ())
21362136}
21372137
2138+ func TestTraceInfoOnTimeoutWithSetTimeout (t * testing.T ) {
2139+ t .Run ("timeout with very short timeout" , func (t * testing.T ) {
2140+ client := New ().
2141+ SetTimeout (1 * time .Millisecond ).
2142+ SetBaseURL ("http://resty-nowhere.local" ).
2143+ EnableTrace ()
2144+
2145+ resp , err := client .R ().Get ("/" )
2146+ assertNotNil (t , err )
2147+ assertNotNil (t , resp )
2148+
2149+ tr := resp .Request .TraceInfo ()
2150+
2151+ assertEqual (t , true , tr .DNSLookup >= 0 )
2152+ assertEqual (t , true , tr .ConnTime == 0 )
2153+ assertEqual (t , true , tr .TLSHandshake == 0 )
2154+ assertEqual (t , true , tr .TCPConnTime == 0 )
2155+ assertEqual (t , true , tr .ServerTime == 0 )
2156+ assertEqual (t , true , tr .ResponseTime == 0 )
2157+ assertEqual (t , true , tr .TotalTime > 0 )
2158+ assertEqual (t , true , tr .TotalTime == resp .Time ())
2159+ })
2160+
2161+ t .Run ("successful request with SetTimeout" , func (t * testing.T ) {
2162+ ts := createGetServer (t )
2163+ defer ts .Close ()
2164+
2165+ client := New ().
2166+ SetTimeout (5 * time .Second ).
2167+ SetBaseURL (ts .URL ).
2168+ EnableTrace ()
2169+
2170+ resp , err := client .R ().Get ("/" )
2171+ assertNil (t , err )
2172+ assertNotNil (t , resp )
2173+
2174+ tr := resp .Request .TraceInfo ()
2175+
2176+ assertEqual (t , true , tr .DNSLookup >= 0 )
2177+ assertEqual (t , true , tr .ConnTime >= 0 )
2178+ assertEqual (t , true , tr .TLSHandshake >= 0 )
2179+ assertEqual (t , true , tr .TCPConnTime >= 0 )
2180+ assertEqual (t , true , tr .ServerTime >= 0 )
2181+ assertEqual (t , true , tr .ResponseTime >= 0 )
2182+ assertEqual (t , true , tr .TotalTime > 0 )
2183+ assertEqual (t , true , tr .TotalTime == resp .Time ())
2184+ })
2185+
2186+ t .Run ("HTTPS request with TLS handshake" , func (t * testing.T ) {
2187+ ts := httptest .NewTLSServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
2188+ w .WriteHeader (http .StatusOK )
2189+ _ , _ = w .Write ([]byte ("OK" ))
2190+ }))
2191+ defer ts .Close ()
2192+
2193+ client := New ().
2194+ SetTimeout (5 * time .Second ).
2195+ SetTLSClientConfig (& tls.Config {InsecureSkipVerify : true }).
2196+ EnableTrace ()
2197+
2198+ resp , err := client .R ().Get (ts .URL )
2199+ assertNil (t , err )
2200+ assertNotNil (t , resp )
2201+
2202+ tr := resp .Request .TraceInfo ()
2203+
2204+ assertEqual (t , true , tr .TLSHandshake > 0 )
2205+ assertEqual (t , true , tr .DNSLookup >= 0 )
2206+ assertEqual (t , true , tr .ConnTime >= 0 )
2207+ assertEqual (t , true , tr .TCPConnTime >= 0 )
2208+ assertEqual (t , true , tr .ServerTime >= 0 )
2209+ assertEqual (t , true , tr .ResponseTime >= 0 )
2210+ assertEqual (t , true , tr .TotalTime > 0 )
2211+ assertEqual (t , true , tr .TotalTime == resp .Time ())
2212+ })
2213+ }
2214+
21382215func TestDebugLoggerRequestBodyTooLarge (t * testing.T ) {
21392216 ts := createFilePostServer (t )
21402217 defer ts .Close ()
0 commit comments