@@ -216,6 +216,41 @@ func TestError(t *testing.T) {
216216 assert .Equal (componentName , span .Integration ())
217217 })
218218
219+ t .Run ("server error - with error propagation - nil Errors in gin context" , func (* testing.T ) {
220+ defer mt .Reset ()
221+
222+ router := gin .New ()
223+ router .Use (Middleware ("foobar" , WithErrorPropagation ()))
224+
225+ // configure a handler that returns an error and 5xx status code
226+ router .GET ("/server_err" , func (c * gin.Context ) {
227+ c .AbortWithStatus (500 )
228+ })
229+ r := httptest .NewRequest ("GET" , "/server_err" , nil )
230+ w := httptest .NewRecorder ()
231+ router .ServeHTTP (w , r )
232+ response := w .Result ()
233+ defer response .Body .Close ()
234+ assert .Equal (response .StatusCode , 500 )
235+
236+ // verify the errors and status are correct
237+ spans := mt .FinishedSpans ()
238+ assert .Len (spans , 1 )
239+ if len (spans ) < 1 {
240+ t .Fatalf ("no spans" )
241+ }
242+ span := spans [0 ]
243+ assert .Equal ("http.request" , span .OperationName ())
244+ assert .Equal ("foobar" , span .Tag (ext .ServiceName ))
245+ assert .Equal ("500" , span .Tag (ext .HTTPCode ))
246+ assert .Empty (span .Tag ("gin.errors" ))
247+ // server errors set the ext.ErrorMsg tag
248+ assert .Equal ("500: Internal Server Error" , span .Tag (ext .ErrorMsg ))
249+ assert .Equal (ext .SpanKindServer , span .Tag (ext .SpanKind ))
250+ assert .Equal ("gin-gonic/gin" , span .Tag (ext .Component ))
251+ assert .Equal (componentName , span .Integration ())
252+ })
253+
219254 t .Run ("server error - without error propagation" , func (* testing.T ) {
220255 defer mt .Reset ()
221256
0 commit comments