Skip to content

Commit 1767451

Browse files
JensAytonktoso
andauthored
Call span.end() in the happy path in withSpan (#33)
* Test that withSpan() calls end() as expected * Call span.end() in the happy path in withSpan * Apply suggestions from code review * Update TracerTests.swift Co-authored-by: Konrad `ktoso` Malawski <[email protected]> Co-authored-by: Konrad `ktoso` Malawski <[email protected]>
1 parent 5cf275a commit 1767451

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

Sources/Tracing/Tracer.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,11 @@ extension Tracer {
9898
_ function: (Span) throws -> T
9999
) rethrows -> T {
100100
let span = self.startSpan(operationName, context: context, ofKind: kind)
101+
defer { span.end() }
101102
do {
102103
return try function(span)
103104
} catch {
104105
span.recordError(error)
105-
span.end()
106106
throw error // rethrow
107107
}
108108
}
@@ -125,11 +125,11 @@ extension Tracer {
125125
_ function: (Span) throws -> T
126126
) rethrows -> T {
127127
let span = self.startSpan(operationName, baggage: baggage, ofKind: kind)
128+
defer { span.end() }
128129
do {
129130
return try function(span)
130131
} catch {
131132
span.recordError(error)
132-
span.end()
133133
throw error // rethrow
134134
}
135135
}

Tests/TracingTests/TestTracer.swift

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import Tracing
1919

2020
final class TestTracer: Tracer {
2121
private(set) var spans = [TestSpan]()
22+
var onEndSpan: (Span) -> Void = { _ in }
2223

2324
func startSpan(
2425
_ operationName: String,
@@ -30,8 +31,9 @@ final class TestTracer: Tracer {
3031
operationName: operationName,
3132
startTime: time,
3233
baggage: baggage,
33-
kind: kind
34-
) { _ in }
34+
kind: kind,
35+
onEnd: onEndSpan
36+
)
3537
self.spans.append(span)
3638
return span
3739
}

Tests/TracingTests/TracerTests.swift

+8
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,15 @@ final class TracerTests: XCTestCase {
6363
InstrumentationSystem.bootstrapInternal(NoOpTracer())
6464
}
6565

66+
var spanEnded = false
67+
tracer.onEndSpan = { _ in spanEnded = true }
68+
6669
let value = tracer.withSpan("hello", baggage: .topLevel) { _ in
6770
"yes"
6871
}
6972

7073
XCTAssertEqual(value, "yes")
74+
XCTAssertTrue(spanEnded)
7175
}
7276

7377
func testWithSpan_throws() {
@@ -77,11 +81,15 @@ final class TracerTests: XCTestCase {
7781
InstrumentationSystem.bootstrapInternal(NoOpTracer())
7882
}
7983

84+
var spanEnded = false
85+
tracer.onEndSpan = { _ in spanEnded = true }
86+
8087
do {
8188
_ = try tracer.withSpan("hello", baggage: .topLevel) { _ in
8289
throw ExampleSpanError()
8390
}
8491
} catch {
92+
XCTAssertTrue(spanEnded)
8593
XCTAssertEqual(error as? ExampleSpanError, ExampleSpanError())
8694
return
8795
}

0 commit comments

Comments
 (0)