@@ -7,7 +7,7 @@ namespace Sentry.Tests;
77 * TODO: Find a way to consolidate these tests cleanly.
88 */
99
10- public class SentryHttpMessageHandlerTests : SentryMessageHandlerTests
10+ public class SentryHttpMessageHandlerTests
1111{
1212 [ Fact ]
1313 public async Task SendAsync_SentryTraceHeaderNotSet_SetsHeader_ByDefault ( )
@@ -122,12 +122,17 @@ public async Task SendAsync_SentryTraceHeaderAlreadySet_NotOverwritten()
122122 }
123123
124124 [ Fact ]
125- public async Task SendAsync_TransactionOnScope_StartsChildSpan ( )
125+ public async Task SendAsync_TransactionOnScope_StartsNewSpan ( )
126126 {
127127 // Arrange
128- var hub = _fixture . GetHub ( ) ;
129- var transaction = hub . StartTransaction ( "foo" , "bar" ) ;
130- hub . ConfigureScope ( scope => scope . Transaction = transaction ) ;
128+ var hub = Substitute . For < IHub > ( ) ;
129+
130+ var transaction = new TransactionTracer (
131+ hub ,
132+ "foo" ,
133+ "bar" ) ;
134+
135+ hub . GetSpan ( ) . ReturnsForAnyArgs ( transaction ) ;
131136
132137 using var innerHandler = new FakeHttpMessageHandler ( ) ;
133138 using var sentryHandler = new SentryHttpMessageHandler ( innerHandler , hub ) ;
@@ -144,40 +149,17 @@ public async Task SendAsync_TransactionOnScope_StartsChildSpan()
144149 }
145150
146151 [ Fact ]
147- public async Task SendAsync_NoTransactionOnScope_StartsTransaction ( )
152+ public async Task SendAsync_ExceptionThrown_ExceptionLinkedToSpan ( )
148153 {
149154 // Arrange
150- SentryTransaction received = null ;
151- _fixture . Client . CaptureTransaction (
152- Arg . Do < SentryTransaction > ( t => received = t ) ,
153- Arg . Any < Scope > ( ) ,
154- Arg . Any < SentryHint > ( )
155- ) ;
156- var hub = _fixture . GetHub ( ) ;
157-
158- using var innerHandler = new FakeHttpMessageHandler ( ) ;
159- using var sentryHandler = new SentryHttpMessageHandler ( innerHandler , hub ) ;
160- using var client = new HttpClient ( sentryHandler ) ;
155+ var hub = Substitute . For < IHub > ( ) ;
161156
162- // Act
163- await client . GetAsync ( "https://localhost/" ) ;
157+ var transaction = new TransactionTracer (
158+ hub ,
159+ "foo" ,
160+ "bar" ) ;
164161
165- // Assert
166- received . Should ( ) . NotBeNull ( ) ;
167- using ( new AssertionScope ( ) )
168- {
169- received . Name . Should ( ) . Be ( "GET https://localhost/" ) ;
170- received . Operation . Should ( ) . Be ( "http.client" ) ;
171- received . Description . Should ( ) . Be ( "GET https://localhost/" ) ;
172- received . IsFinished . Should ( ) . BeTrue ( ) ;
173- }
174- }
175-
176- [ Fact ]
177- public async Task SendAsync_ExceptionThrown_ExceptionLinkedToSpan ( )
178- {
179- // Arrange
180- var hub = _fixture . GetHub ( ) ;
162+ hub . GetSpan ( ) . ReturnsForAnyArgs ( transaction ) ;
181163
182164 var exception = new Exception ( ) ;
183165
@@ -189,8 +171,7 @@ public async Task SendAsync_ExceptionThrown_ExceptionLinkedToSpan()
189171 await Assert . ThrowsAsync < Exception > ( ( ) => client . GetAsync ( "https://localhost/" ) ) ;
190172
191173 // Assert
192- hub . ExceptionToSpanMap . TryGetValue ( exception , out var span ) . Should ( ) . BeTrue ( ) ;
193- span . Should ( ) . NotBeNull ( ) ;
174+ hub . Received ( 1 ) . BindException ( exception , Arg . Any < ISpan > ( ) ) ; // second argument is an implicitly created span
194175 }
195176
196177 [ Fact ]
@@ -262,15 +243,18 @@ public async Task SendAsync_Executed_FailedRequestsCaptured()
262243 public void ProcessRequest_SetsSpanData ( )
263244 {
264245 // Arrange
265- var hub = _fixture . GetHub ( ) ;
266- using var innerHandler = new FakeHttpMessageHandler ( ) ;
267- var sut = new SentryHttpMessageHandler ( hub , _fixture . Options , innerHandler ) ;
246+ var hub = Substitute . For < IHub > ( ) ;
247+ var parentSpan = Substitute . For < ISpan > ( ) ;
248+ hub . GetSpan ( ) . Returns ( parentSpan ) ;
249+ var childSpan = Substitute . For < ISpan > ( ) ;
250+ parentSpan . When ( p => p . StartChild ( Arg . Any < string > ( ) ) )
251+ . Do ( op => childSpan . Operation = op . Arg < string > ( ) ) ;
252+ parentSpan . StartChild ( Arg . Any < string > ( ) ) . Returns ( childSpan ) ;
253+ var sut = new SentryHttpMessageHandler ( hub , null ) ;
268254
269255 var method = "GET" ;
270- var host = "example.com" ;
271- var url = $ "https://{ host } /graphql";
272- var uri = new Uri ( url ) ;
273- var request = new HttpRequestMessage ( HttpMethod . Get , uri ) ;
256+ var url = "http://example.com/graphql" ;
257+ var request = new HttpRequestMessage ( HttpMethod . Get , url ) ;
274258
275259 // Act
276260 var returnedSpan = sut . ProcessRequest ( request , method , url ) ;
@@ -279,14 +263,7 @@ public void ProcessRequest_SetsSpanData()
279263 returnedSpan . Should ( ) . NotBeNull ( ) ;
280264 returnedSpan ! . Operation . Should ( ) . Be ( "http.client" ) ;
281265 returnedSpan . Description . Should ( ) . Be ( $ "{ method } { url } ") ;
282- returnedSpan . Extra . Should ( ) . Contain ( kvp =>
283- kvp . Key == OtelSemanticConventions . AttributeHttpRequestMethod &&
284- Equals ( kvp . Value , method )
285- ) ;
286- returnedSpan . Extra . Should ( ) . Contain ( kvp =>
287- kvp . Key == OtelSemanticConventions . AttributeServerAddress &&
288- Equals ( kvp . Value , host )
289- ) ;
266+ returnedSpan . Received ( 1 ) . SetExtra ( OtelSemanticConventions . AttributeHttpRequestMethod , method ) ;
290267 }
291268
292269 [ Fact ]
@@ -430,9 +407,14 @@ public void Send_SentryTraceHeaderAlreadySet_NotOverwritten()
430407 public void Send_TransactionOnScope_StartsNewSpan ( )
431408 {
432409 // Arrange
433- var hub = _fixture . GetHub ( ) ;
434- var transaction = hub . StartTransaction ( "foo" , "bar" ) ;
435- hub . ConfigureScope ( scope => scope . Transaction = transaction ) ;
410+ var hub = Substitute . For < IHub > ( ) ;
411+
412+ var transaction = new TransactionTracer (
413+ hub ,
414+ "foo" ,
415+ "bar" ) ;
416+
417+ hub . GetSpan ( ) . ReturnsForAnyArgs ( transaction ) ;
436418
437419 using var innerHandler = new FakeHttpMessageHandler ( ) ;
438420 using var sentryHandler = new SentryHttpMessageHandler ( innerHandler , hub ) ;
@@ -452,7 +434,14 @@ public void Send_TransactionOnScope_StartsNewSpan()
452434 public void Send_ExceptionThrown_ExceptionLinkedToSpan ( )
453435 {
454436 // Arrange
455- var hub = _fixture . GetHub ( ) ;
437+ var hub = Substitute . For < IHub > ( ) ;
438+
439+ var transaction = new TransactionTracer (
440+ hub ,
441+ "foo" ,
442+ "bar" ) ;
443+
444+ hub . GetSpan ( ) . ReturnsForAnyArgs ( transaction ) ;
456445
457446 var exception = new Exception ( ) ;
458447
@@ -464,8 +453,7 @@ public void Send_ExceptionThrown_ExceptionLinkedToSpan()
464453 Assert . Throws < Exception > ( ( ) => client . Get ( "https://localhost/" ) ) ;
465454
466455 // Assert
467- hub . ExceptionToSpanMap . TryGetValue ( exception , out var span ) . Should ( ) . BeTrue ( ) ;
468- span . Should ( ) . NotBeNull ( ) ;
456+ hub . Received ( 1 ) . BindException ( exception , Arg . Any < ISpan > ( ) ) ; // second argument is an implicitly created span
469457 }
470458
471459 [ Fact ]
0 commit comments