File tree 3 files changed +14
-4
lines changed
3 files changed +14
-4
lines changed Original file line number Diff line number Diff line change @@ -98,11 +98,11 @@ extension Tracer {
98
98
_ function: ( Span ) throws -> T
99
99
) rethrows -> T {
100
100
let span = self . startSpan ( operationName, context: context, ofKind: kind)
101
+ defer { span. end ( ) }
101
102
do {
102
103
return try function ( span)
103
104
} catch {
104
105
span. recordError ( error)
105
- span. end ( )
106
106
throw error // rethrow
107
107
}
108
108
}
@@ -125,11 +125,11 @@ extension Tracer {
125
125
_ function: ( Span ) throws -> T
126
126
) rethrows -> T {
127
127
let span = self . startSpan ( operationName, baggage: baggage, ofKind: kind)
128
+ defer { span. end ( ) }
128
129
do {
129
130
return try function ( span)
130
131
} catch {
131
132
span. recordError ( error)
132
- span. end ( )
133
133
throw error // rethrow
134
134
}
135
135
}
Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ import Tracing
19
19
20
20
final class TestTracer : Tracer {
21
21
private( set) var spans = [ TestSpan] ( )
22
+ var onEndSpan : ( Span ) -> Void = { _ in }
22
23
23
24
func startSpan(
24
25
_ operationName: String ,
@@ -30,8 +31,9 @@ final class TestTracer: Tracer {
30
31
operationName: operationName,
31
32
startTime: time,
32
33
baggage: baggage,
33
- kind: kind
34
- ) { _ in }
34
+ kind: kind,
35
+ onEnd: onEndSpan
36
+ )
35
37
self . spans. append ( span)
36
38
return span
37
39
}
Original file line number Diff line number Diff line change @@ -63,11 +63,15 @@ final class TracerTests: XCTestCase {
63
63
InstrumentationSystem . bootstrapInternal ( NoOpTracer ( ) )
64
64
}
65
65
66
+ var spanEnded = false
67
+ tracer. onEndSpan = { _ in spanEnded = true }
68
+
66
69
let value = tracer. withSpan ( " hello " , baggage: . topLevel) { _ in
67
70
" yes "
68
71
}
69
72
70
73
XCTAssertEqual ( value, " yes " )
74
+ XCTAssertTrue ( spanEnded)
71
75
}
72
76
73
77
func testWithSpan_throws( ) {
@@ -77,11 +81,15 @@ final class TracerTests: XCTestCase {
77
81
InstrumentationSystem . bootstrapInternal ( NoOpTracer ( ) )
78
82
}
79
83
84
+ var spanEnded = false
85
+ tracer. onEndSpan = { _ in spanEnded = true }
86
+
80
87
do {
81
88
_ = try tracer. withSpan ( " hello " , baggage: . topLevel) { _ in
82
89
throw ExampleSpanError ( )
83
90
}
84
91
} catch {
92
+ XCTAssertTrue ( spanEnded)
85
93
XCTAssertEqual ( error as? ExampleSpanError , ExampleSpanError ( ) )
86
94
return
87
95
}
You can’t perform that action at this time.
0 commit comments