Skip to content

Commit c1e3583

Browse files
committed
more fixes
1 parent a227874 commit c1e3583

File tree

2 files changed

+84
-50
lines changed

2 files changed

+84
-50
lines changed

FirebaseCore/Internal/Tests/Integration/HeartbeatLoggingIntegrationTests.swift

+40-50
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
144144
assertHeartbeatControllerFlushesEmptyPayload(heartbeatController1)
145145
}
146146

147-
func testLogAndFlushConcurrencyStressTest() throws {
147+
@MainActor func testLogAndFlushConcurrencyStressTest() throws {
148148
// Given
149149
let date = Date(timeIntervalSince1970: 1_635_739_200) // 2021-11-01 @ 00:00:00 (EST)
150150
let heartbeatController = HeartbeatController(id: #function, dateProvider: { date })
@@ -154,39 +154,34 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
154154
heartbeatController.log("dummy_agent")
155155
}
156156

157-
var payloads: [HeartbeatsPayload] = []
157+
let expectation = self.expectation(description: #function)
158158

159159
DispatchQueue.concurrentPerform(iterations: 100) { _ in
160160
let payload = heartbeatController.flush()
161-
payloads.append(payload)
162-
}
163-
164-
// Then
165-
let nonEmptyPayloads = payloads.filter { payload in
166-
// Filter out non-empty payloads.
167-
!payload.userAgentPayloads.isEmpty
168-
}
169-
170-
XCTAssertEqual(nonEmptyPayloads.count, 1)
171-
172-
let payload = try XCTUnwrap(nonEmptyPayloads.first)
173-
try HeartbeatLoggingTestUtils.assertEqualPayloadStrings(
174-
payload.headerValue(),
175-
"""
176-
{
177-
"version": 2,
178-
"heartbeats": [
161+
if !payload.userAgentPayloads.isEmpty {
162+
try! HeartbeatLoggingTestUtils.assertEqualPayloadStrings(
163+
payload.headerValue(),
164+
"""
179165
{
180-
"agent": "dummy_agent",
181-
"dates": ["2021-11-01"]
166+
"version": 2,
167+
"heartbeats": [
168+
{
169+
"agent": "dummy_agent",
170+
"dates": ["2021-11-01"]
171+
}
172+
]
182173
}
183-
]
174+
"""
175+
)
176+
expectation.fulfill()
184177
}
185-
"""
186-
)
178+
}
179+
180+
// Then
181+
wait(for: [expectation])
187182
}
188183

189-
func testLogAndFlushHeartbeatFromTodayConcurrencyStressTest() throws {
184+
@MainActor func testLogAndFlushHeartbeatFromTodayConcurrencyStressTest() throws {
190185
// Given
191186
let date = Date(timeIntervalSince1970: 1_635_739_200) // 2021-11-01 @ 00:00:00 (EST)
192187
let heartbeatController = HeartbeatController(id: #function, dateProvider: { date })
@@ -196,36 +191,31 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
196191
heartbeatController.log("dummy_agent")
197192
}
198193

199-
var payloads: [HeartbeatsPayload] = []
194+
let expectation = self.expectation(description: #function)
200195

201196
DispatchQueue.concurrentPerform(iterations: 100) { _ in
202197
let payload = heartbeatController.flushHeartbeatFromToday()
203-
payloads.append(payload)
204-
}
205-
206-
// Then
207-
let nonEmptyPayloads = payloads.filter { payload in
208-
// Filter out non-empty payloads.
209-
!payload.userAgentPayloads.isEmpty
210-
}
211-
212-
XCTAssertEqual(nonEmptyPayloads.count, 1)
213-
214-
let payload = try XCTUnwrap(nonEmptyPayloads.first)
215-
try HeartbeatLoggingTestUtils.assertEqualPayloadStrings(
216-
payload.headerValue(),
217-
"""
218-
{
219-
"version": 2,
220-
"heartbeats": [
198+
if !payload.userAgentPayloads.isEmpty {
199+
try! HeartbeatLoggingTestUtils.assertEqualPayloadStrings(
200+
payload.headerValue(),
201+
"""
221202
{
222-
"agent": "dummy_agent",
223-
"dates": ["2021-11-01"],
203+
"version": 2,
204+
"heartbeats": [
205+
{
206+
"agent": "dummy_agent",
207+
"dates": ["2021-11-01"],
208+
}
209+
]
224210
}
225-
]
211+
"""
212+
)
213+
expectation.fulfill()
226214
}
227-
"""
228-
)
215+
}
216+
217+
// Then
218+
wait(for: [expectation])
229219

230220
assertHeartbeatControllerFlushesEmptyPayload(heartbeatController)
231221
}

FirebaseCore/Internal/Tests/Unit/HeartbeatStorageTests.swift

+44
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,33 @@
1515
@testable import FirebaseCoreInternal
1616
import XCTest
1717

18+
public typealias SessionsSubscriberName = Int
19+
20+
public class SessionsDependencies {
21+
#if compiler(>=6)
22+
private nonisolated(unsafe) static var _dependencies: Set<SessionsSubscriberName> = .init()
23+
private(set) static var dependencies: Set<SessionsSubscriberName> {
24+
get {
25+
lock.withLock {
26+
_dependencies
27+
}
28+
}
29+
set {
30+
lock.withLock {
31+
_dependencies = newValue
32+
}
33+
}
34+
}
35+
#else
36+
private static var _dependencies: Set<SessionsSubscriberName> = .init()
37+
#endif
38+
private static let lock = NSLock()
39+
40+
public static func addDependency(name: SessionsSubscriberName) {
41+
SessionsDependencies.dependencies.insert(name)
42+
}
43+
}
44+
1845
extension HeartbeatsBundle {
1946
static func testHeartbeatBundle() -> HeartbeatsBundle {
2047
var heartbeatBundle = HeartbeatsBundle(capacity: 1)
@@ -27,6 +54,23 @@ extension HeartbeatsBundle {
2754
class HeartbeatStorageTests: XCTestCase {
2855
// MARK: - Instance Management
2956

57+
// @MainActor func testStressTest() {
58+
// var expectations: [XCTestExpectation] = []
59+
// let lock = NSLock()
60+
// DispatchQueue.concurrentPerform(iterations: 1000) { i in
61+
// lock.lock()
62+
// let exp = self.expectation(description: "\(i)")
63+
// expectations.append(exp)
64+
// defer { exp.fulfill() }
65+
// lock.unlock()
66+
// SessionsDependencies.addDependency(name: i)
67+
// exp.fulfill()
68+
// }
69+
// DispatchQueue.perform
70+
// wait(for: expectations)
71+
// XCTAssertEqual(SessionsDependencies.dependencies.count, 1000)
72+
// }
73+
3074
func testGettingInstance_WithSameID_ReturnsSameInstance() {
3175
// Given
3276
let heartbeatStorage1 = HeartbeatStorage.getInstance(id: "sparky")

0 commit comments

Comments
 (0)