@@ -144,7 +144,7 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
144
144
assertHeartbeatControllerFlushesEmptyPayload ( heartbeatController1)
145
145
}
146
146
147
- func testLogAndFlushConcurrencyStressTest( ) throws {
147
+ @ MainActor func testLogAndFlushConcurrencyStressTest( ) throws {
148
148
// Given
149
149
let date = Date ( timeIntervalSince1970: 1_635_739_200 ) // 2021-11-01 @ 00:00:00 (EST)
150
150
let heartbeatController = HeartbeatController ( id: #function, dateProvider: { date } )
@@ -154,39 +154,34 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
154
154
heartbeatController. log ( " dummy_agent " )
155
155
}
156
156
157
- var payloads : [ HeartbeatsPayload ] = [ ]
157
+ let expectation = self . expectation ( description : #function )
158
158
159
159
DispatchQueue . concurrentPerform ( iterations: 100 ) { _ in
160
160
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
+ """
179
165
{
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
+ ]
182
173
}
183
- ]
174
+ """
175
+ )
176
+ expectation. fulfill ( )
184
177
}
185
- """
186
- )
178
+ }
179
+
180
+ // Then
181
+ wait ( for: [ expectation] )
187
182
}
188
183
189
- func testLogAndFlushHeartbeatFromTodayConcurrencyStressTest( ) throws {
184
+ @ MainActor func testLogAndFlushHeartbeatFromTodayConcurrencyStressTest( ) throws {
190
185
// Given
191
186
let date = Date ( timeIntervalSince1970: 1_635_739_200 ) // 2021-11-01 @ 00:00:00 (EST)
192
187
let heartbeatController = HeartbeatController ( id: #function, dateProvider: { date } )
@@ -196,36 +191,31 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
196
191
heartbeatController. log ( " dummy_agent " )
197
192
}
198
193
199
- var payloads : [ HeartbeatsPayload ] = [ ]
194
+ let expectation = self . expectation ( description : #function )
200
195
201
196
DispatchQueue . concurrentPerform ( iterations: 100 ) { _ in
202
197
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
+ """
221
202
{
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
+ ]
224
210
}
225
- ]
211
+ """
212
+ )
213
+ expectation. fulfill ( )
226
214
}
227
- """
228
- )
215
+ }
216
+
217
+ // Then
218
+ wait ( for: [ expectation] )
229
219
230
220
assertHeartbeatControllerFlushesEmptyPayload ( heartbeatController)
231
221
}
0 commit comments