@@ -179,14 +179,14 @@ func TestError(t *testing.T) {
179179	mt  :=  mocktracer .Start ()
180180	defer  mt .Stop ()
181181
182- 	// setup 
183- 	router  :=  gin .New ()
184- 	router .Use (Middleware ("foobar" ))
185182	responseErr  :=  errors .New ("oh no" )
186183
187- 	t .Run ("server error" , func (* testing.T ) {
184+ 	t .Run ("server error - with error propagation " , func (* testing.T ) {
188185		defer  mt .Reset ()
189186
187+ 		router  :=  gin .New ()
188+ 		router .Use (Middleware ("foobar" , WithErrorPropagation ()))
189+ 
190190		// configure a handler that returns an error and 5xx status code 
191191		router .GET ("/server_err" , func (c  * gin.Context ) {
192192			c .AbortWithError (500 , responseErr )
@@ -216,9 +216,47 @@ func TestError(t *testing.T) {
216216		assert .Equal (componentName , span .Integration ())
217217	})
218218
219+ 	t .Run ("server error - without error propagation" , func (* testing.T ) {
220+ 		defer  mt .Reset ()
221+ 
222+ 		router  :=  gin .New ()
223+ 		router .Use (Middleware ("foobar" ))
224+ 
225+ 		// configure a handler that returns an error and 5xx status code 
226+ 		router .GET ("/server_err" , func (c  * gin.Context ) {
227+ 			c .AbortWithError (500 , responseErr )
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 .Equal (fmt .Sprintf ("Error #01: %s\n " , responseErr ), 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 ("client error" , func (* testing.T ) {
220255		defer  mt .Reset ()
221256
257+ 		router  :=  gin .New ()
258+ 		router .Use (Middleware ("foobar" ))
259+ 
222260		// configure a handler that returns an error and 4xx status code 
223261		router .GET ("/client_err" , func (c  * gin.Context ) {
224262			c .AbortWithError (418 , responseErr )
0 commit comments