@@ -179,14 +179,84 @@ 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 ) {
185+ defer mt .Reset ()
186+
187+ router := gin .New ()
188+ router .Use (Middleware ("foobar" , WithUseGinErrors ()))
189+
190+ // configure a handler that returns an error and 5xx status code
191+ router .GET ("/server_err" , func (c * gin.Context ) {
192+ c .AbortWithError (500 , responseErr )
193+ })
194+ r := httptest .NewRequest ("GET" , "/server_err" , nil )
195+ w := httptest .NewRecorder ()
196+ router .ServeHTTP (w , r )
197+ response := w .Result ()
198+ defer response .Body .Close ()
199+ assert .Equal (response .StatusCode , 500 )
200+
201+ // verify the errors and status are correct
202+ spans := mt .FinishedSpans ()
203+ assert .Len (spans , 1 )
204+ if len (spans ) < 1 {
205+ t .Fatalf ("no spans" )
206+ }
207+ span := spans [0 ]
208+ assert .Equal ("http.request" , span .OperationName ())
209+ assert .Equal ("foobar" , span .Tag (ext .ServiceName ))
210+ assert .Equal ("500" , span .Tag (ext .HTTPCode ))
211+ assert .Equal (fmt .Sprintf ("Error #01: %s\n " , responseErr ), span .Tag ("gin.errors" ))
212+ // server errors set the ext.ErrorMsg tag
213+ assert .Equal (fmt .Sprintf ("Error #01: %s\n " , responseErr ), span .Tag (ext .ErrorMsg ))
214+ assert .Equal (ext .SpanKindServer , span .Tag (ext .SpanKind ))
215+ assert .Equal ("gin-gonic/gin" , span .Tag (ext .Component ))
216+ assert .Equal (componentName , span .Integration ())
217+ })
218+
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" , WithUseGinErrors ()))
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+
254+ t .Run ("server error - without error propagation" , func (* testing.T ) {
188255 defer mt .Reset ()
189256
257+ router := gin .New ()
258+ router .Use (Middleware ("foobar" ))
259+
190260 // configure a handler that returns an error and 5xx status code
191261 router .GET ("/server_err" , func (c * gin.Context ) {
192262 c .AbortWithError (500 , responseErr )
@@ -219,6 +289,9 @@ func TestError(t *testing.T) {
219289 t .Run ("client error" , func (* testing.T ) {
220290 defer mt .Reset ()
221291
292+ router := gin .New ()
293+ router .Use (Middleware ("foobar" ))
294+
222295 // configure a handler that returns an error and 4xx status code
223296 router .GET ("/client_err" , func (c * gin.Context ) {
224297 c .AbortWithError (418 , responseErr )
0 commit comments