Skip to content

Commit ec2a96e

Browse files
committed
Adding test that reproduced crash before fix
1 parent f8a29a3 commit ec2a96e

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

Tests/Segment-Tests/Telemetry_Tests.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,39 @@ class TelemetryTests: XCTestCase {
143143
Telemetry.shared.error(metric: Telemetry.INVOKE_ERROR_METRIC, log: longString) { $0["writekey"] = longString }
144144
XCTAssertTrue(Telemetry.shared.queue.count < 1000)
145145
}
146+
147+
func testConcurrentErrorReporting() {
148+
Telemetry.shared.enable = true
149+
Telemetry.shared.start()
150+
let operationCount = 200
151+
152+
var concurrentExpectation = XCTestExpectation(description: "High pressure operations")
153+
concurrentExpectation.expectedFulfillmentCount = operationCount
154+
155+
// Use multiple dispatch queues to increase concurrency
156+
let queues = [
157+
DispatchQueue.global(qos: .userInitiated),
158+
DispatchQueue.global(qos: .default),
159+
DispatchQueue.global(qos: .utility)
160+
]
161+
for i in 0..<operationCount {
162+
// Round-robin between different queues
163+
let queue = queues[i % queues.count]
164+
queue.async {
165+
Telemetry.shared.error(
166+
metric: Telemetry.INVOKE_ERROR_METRIC,
167+
log: "High pressure test \(i)"
168+
) { tags in
169+
tags["error"] = "pressure_test_key"
170+
tags["queue"] = "\(i % queues.count)"
171+
tags["iteration"] = "\(i)"
172+
}
173+
concurrentExpectation.fulfill()
174+
}
175+
}
176+
wait(for: [concurrentExpectation], timeout: 15.0)
177+
XCTAssertTrue(Telemetry.shared.queue.count == Telemetry.shared.maxQueueSize)
178+
}
146179
}
147180

148181
// Mock URLSession

0 commit comments

Comments
 (0)