Skip to content

Commit 3a38a18

Browse files
committed
Fix potential wrong total time in trace info when the request is invalid
1 parent 036c589 commit 3a38a18

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

request.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,11 +1253,18 @@ func (r *Request) TraceInfo() TraceInfo {
12531253

12541254
// Calculate the total time accordingly,
12551255
// when connection is reused
1256+
var requestStartTime time.Time
12561257
if ct.gotConnInfo.Reused {
1257-
ti.TotalTime = ct.endTime.Sub(ct.getConn)
1258+
requestStartTime = ct.getConn
12581259
} else {
1259-
ti.TotalTime = ct.endTime.Sub(ct.dnsStart)
1260+
requestStartTime = ct.dnsStart
12601261
}
1262+
// DNS start and get conn time may be zero if the request is invalid.
1263+
// See issue #1016.
1264+
if requestStartTime.IsZero() {
1265+
requestStartTime = r.Time
1266+
}
1267+
ti.TotalTime = ct.endTime.Sub(requestStartTime)
12611268

12621269
// Only calculate on successful connections
12631270
if !ct.connectDone.IsZero() {

request_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1830,6 +1830,18 @@ func TestTraceInfo(t *testing.T) {
18301830

18311831
})
18321832

1833+
t.Run("enable trace on invalid request, issue #1016", func(t *testing.T) {
1834+
resp, err := client.R().EnableTrace().Get("unknown://url.com")
1835+
assertNotNil(t, err)
1836+
tr := resp.Request.TraceInfo()
1837+
assertEqual(t, true, tr.DNSLookup == 0)
1838+
assertEqual(t, true, tr.ConnTime == 0)
1839+
assertEqual(t, true, tr.TLSHandshake == 0)
1840+
assertEqual(t, true, tr.ServerTime == 0)
1841+
assertEqual(t, true, tr.ResponseTime == 0)
1842+
assertEqual(t, true, tr.TotalTime > 0 && tr.TotalTime < time.Second)
1843+
})
1844+
18331845
t.Run("enable trace and debug on request", func(t *testing.T) {
18341846
c, logBuf := dcldb()
18351847
c.SetBaseURL(ts.URL)

0 commit comments

Comments
 (0)