@@ -12,7 +12,6 @@ import (
1212 "net/http"
1313 "net/http/httptest"
1414 "net/url"
15- "os"
1615 "regexp"
1716 "strconv"
1817 "strings"
@@ -145,8 +144,7 @@ func TestRoundTripperErrors(t *testing.T) {
145144 assert .Equal (t , "200" , s .Tag (ext .HTTPCode ))
146145 })
147146 t .Run ("custom" , func (t * testing.T ) {
148- os .Setenv ("DD_TRACE_HTTP_CLIENT_ERROR_STATUSES" , "500-510" )
149- defer os .Unsetenv ("DD_TRACE_HTTP_CLIENT_ERROR_STATUSES" )
147+ t .Setenv ("DD_TRACE_HTTP_CLIENT_ERROR_STATUSES" , "500-510" )
150148 mt := mocktracer .Start ()
151149 defer mt .Stop ()
152150 rt := WrapRoundTripper (http .DefaultTransport )
@@ -426,7 +424,12 @@ func TestRoundTripperStatusCheck(t *testing.T) {
426424 defer mt .Stop ()
427425
428426 s := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
429- w .WriteHeader (http .StatusNotFound )
427+ if r .URL .Path == "/not-found" {
428+ w .WriteHeader (http .StatusNotFound )
429+ return
430+ }
431+
432+ w .WriteHeader (http .StatusTeapot )
430433 }))
431434 defer s .Close ()
432435
@@ -437,17 +440,35 @@ func TestRoundTripperStatusCheck(t *testing.T) {
437440 client := & http.Client {
438441 Transport : rt ,
439442 }
440- resp , err := client .Get (s .URL + "/hello/world" )
443+
444+ // First request is not marked as an error as it's a 404
445+ resp , err := client .Get (s .URL + "/not-found" )
441446 assert .Nil (t , err )
442- defer resp .Body .Close ()
447+ resp .Body .Close ()
443448
444449 spans := mt .FinishedSpans ()
450+ mt .Reset ()
445451 assert .Len (t , spans , 1 )
446452 assert .Equal (t , "http.request" , spans [0 ].OperationName ())
447453 assert .Equal (t , "http.request" , spans [0 ].Tag (ext .ResourceName ))
448454 assert .Equal (t , "404" , spans [0 ].Tag (ext .HTTPCode ))
449455 assert .Equal (t , "GET" , spans [0 ].Tag (ext .HTTPMethod ))
450- assert .Nil (t , spans [0 ].Tag (ext .Error ))
456+ assert .Nil (t , spans [0 ].Tag ("http.errors" ))
457+ assert .Nil (t , spans [0 ].Tag (ext .ErrorNoStackTrace ))
458+
459+ // Second request is marked as an error as it's a 418
460+ resp , err = client .Get (s .URL + "/hello/world" )
461+ assert .Nil (t , err )
462+ resp .Body .Close ()
463+
464+ spans = mt .FinishedSpans ()
465+ assert .Len (t , spans , 1 )
466+ assert .Equal (t , "http.request" , spans [0 ].OperationName ())
467+ assert .Equal (t , "http.request" , spans [0 ].Tag (ext .ResourceName ))
468+ assert .Equal (t , "418" , spans [0 ].Tag (ext .HTTPCode ))
469+ assert .Equal (t , "GET" , spans [0 ].Tag (ext .HTTPMethod ))
470+ assert .EqualValues (t , "418 I'm a teapot" , spans [0 ].Tag ("http.errors" ))
471+ assert .EqualValues (t , "418: I'm a teapot" , spans [0 ].Tag (ext .ErrorMsg ))
451472}
452473
453474func TestRoundTripperURLWithoutPort (t * testing.T ) {
@@ -642,8 +663,7 @@ func TestClientQueryStringCollected(t *testing.T) {
642663 mt := mocktracer .Start ()
643664 defer mt .Stop ()
644665
645- os .Setenv ("DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING" , "false" )
646- defer os .Unsetenv ("DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING" )
666+ t .Setenv ("DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING" , "false" )
647667
648668 rt := WrapRoundTripper (http .DefaultTransport )
649669 client := & http.Client {
0 commit comments