@@ -2,6 +2,76 @@ import XCTest
22
33final class SentryTracePropagationTests : XCTestCase {
44
5+ func testAddTraceparent_Sampled( ) throws {
6+ // Arrange
7+ let defaultRegex = try XCTUnwrap ( NSRegularExpression ( pattern: " .* " ) )
8+ let emptyBaggage = Baggage ( )
9+ let sessionTask = try createSessionTask ( )
10+
11+ let traceID = SentryId ( )
12+ let spanID = SpanId ( )
13+ let traceHeader = TraceHeader ( trace: traceID, spanId: spanID, sampled: SentrySampleDecision . yes)
14+
15+ // Act
16+ SentryTracePropagation . addBaggageHeader ( emptyBaggage, traceHeader: traceHeader, propagateTraceparent: true , tracePropagationTargets: [ defaultRegex] , toRequest: sessionTask)
17+
18+ // Assert
19+ let traceParent = try XCTUnwrap ( sessionTask. currentRequest? . allHTTPHeaderFields ? [ " traceparent " ] )
20+ XCTAssertEqual ( traceParent, " 00- \( traceID. sentryIdString) - \( spanID. sentrySpanIdString) -01 " )
21+ }
22+
23+ func testAddTraceparent_NotSampled( ) throws {
24+ // Arrange
25+ let defaultRegex = try XCTUnwrap ( NSRegularExpression ( pattern: " .* " ) )
26+ let emptyBaggage = Baggage ( )
27+ let sessionTask = try createSessionTask ( )
28+
29+ let traceID = SentryId ( )
30+ let spanID = SpanId ( )
31+ let traceHeader = TraceHeader ( trace: traceID, spanId: spanID, sampled: SentrySampleDecision . no)
32+
33+ // Act
34+ SentryTracePropagation . addBaggageHeader ( emptyBaggage, traceHeader: traceHeader, propagateTraceparent: true , tracePropagationTargets: [ defaultRegex] , toRequest: sessionTask)
35+
36+ // Assert
37+ let traceParent = try XCTUnwrap ( sessionTask. currentRequest? . allHTTPHeaderFields ? [ " traceparent " ] )
38+ XCTAssertEqual ( traceParent, " 00- \( traceID. sentryIdString) - \( spanID. sentrySpanIdString) -00 " )
39+ }
40+
41+ func testAddTraceparent_UndecidedSampled( ) throws {
42+ // Arrange
43+ let defaultRegex = try XCTUnwrap ( NSRegularExpression ( pattern: " .* " ) )
44+ let emptyBaggage = Baggage ( )
45+ let sessionTask = try createSessionTask ( )
46+
47+ let traceID = SentryId ( )
48+ let spanID = SpanId ( )
49+ let traceHeader = TraceHeader ( trace: traceID, spanId: spanID, sampled: SentrySampleDecision . undecided)
50+
51+ // Act
52+ SentryTracePropagation . addBaggageHeader ( emptyBaggage, traceHeader: traceHeader, propagateTraceparent: true , tracePropagationTargets: [ defaultRegex] , toRequest: sessionTask)
53+
54+ // Assert
55+ let traceParent = try XCTUnwrap ( sessionTask. currentRequest? . allHTTPHeaderFields ? [ " traceparent " ] )
56+ XCTAssertEqual ( traceParent, " 00- \( traceID. sentryIdString) - \( spanID. sentrySpanIdString) -00 " )
57+ }
58+
59+ func testAddTraceparent_NotAddedWhenTargetDoesntMatch( ) throws {
60+ // Arrange
61+ let emptyBaggage = Baggage ( )
62+ let sessionTask = try createSessionTask ( )
63+
64+ let traceID = SentryId ( )
65+ let spanID = SpanId ( )
66+ let traceHeader = TraceHeader ( trace: traceID, spanId: spanID, sampled: SentrySampleDecision . no)
67+
68+ // Act
69+ SentryTracePropagation . addBaggageHeader ( emptyBaggage, traceHeader: traceHeader, propagateTraceparent: true , tracePropagationTargets: [ " localhost " ] , toRequest: sessionTask)
70+
71+ // Assert
72+ XCTAssertNil ( sessionTask. currentRequest? . allHTTPHeaderFields ? [ " traceparent " ] )
73+ }
74+
575 func testIsTargetMatchWithDefaultRegex_MatchesAllURLs( ) throws {
676 // Arrange
777 let defaultRegex = try XCTUnwrap ( NSRegularExpression ( pattern: " .* " ) )
@@ -77,4 +147,11 @@ final class SentryTracePropagationTests: XCTestCase {
77147 XCTAssertTrue ( SentryTracePropagation . isTargetMatch ( localhostURL, withTargets: targetsWithInvalidType) )
78148 }
79149
150+ private func createSessionTask( method: String = " GET " ) throws -> URLSessionDownloadTaskMock {
151+ let url = try XCTUnwrap ( URL ( string: " https://www.domain.com/api?query=value&query2=value2#fragment " ) )
152+ var request = URLRequest ( url: url)
153+ request. httpMethod = method
154+ return URLSessionDownloadTaskMock ( request: request)
155+ }
156+
80157}
0 commit comments