16
16
import XCTest
17
17
18
18
class HeartbeatLoggingIntegrationTests : XCTestCase {
19
- // 2021-11-01 @ 00:00:00 (EST)
20
- let date = Date ( timeIntervalSince1970: 1_635_739_200 )
21
-
22
19
override func setUpWithError( ) throws {
23
20
try HeartbeatLoggingTestUtils . removeUnderlyingHeartbeatStorageContainers ( )
24
21
}
@@ -52,7 +49,7 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
52
49
)
53
50
}
54
51
55
- func testLogAndFlushAsync( ) throws {
52
+ @ MainActor func testLogAndFlushAsync( ) throws {
56
53
// Given
57
54
let heartbeatController = HeartbeatController ( id: #function)
58
55
let expectedDate = HeartbeatsPayload . dateFormatter. string ( from: Date ( ) )
@@ -123,8 +120,9 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
123
120
124
121
func testMultipleControllersWithTheSameIDUseTheSameStorageInstance( ) throws {
125
122
// Given
126
- let heartbeatController1 = HeartbeatController ( id: #function, dateProvider: { self . date } )
127
- let heartbeatController2 = HeartbeatController ( id: #function, dateProvider: { self . date } )
123
+ let date = Date ( timeIntervalSince1970: 1_635_739_200 ) // 2021-11-01 @ 00:00:00 (EST)
124
+ let heartbeatController1 = HeartbeatController ( id: #function, dateProvider: { date } )
125
+ let heartbeatController2 = HeartbeatController ( id: #function, dateProvider: { date } )
128
126
// When
129
127
heartbeatController1. log ( " dummy_agent " )
130
128
// Then
@@ -146,92 +144,85 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
146
144
assertHeartbeatControllerFlushesEmptyPayload ( heartbeatController1)
147
145
}
148
146
149
- func testLogAndFlushConcurrencyStressTest( ) throws {
147
+ @ MainActor func testLogAndFlushConcurrencyStressTest( ) throws {
150
148
// Given
151
- let heartbeatController = HeartbeatController ( id: #function, dateProvider: { self . date } )
149
+ let date = Date ( timeIntervalSince1970: 1_635_739_200 ) // 2021-11-01 @ 00:00:00 (EST)
150
+ let heartbeatController = HeartbeatController ( id: #function, dateProvider: { date } )
152
151
153
152
// When
154
153
DispatchQueue . concurrentPerform ( iterations: 100 ) { _ in
155
154
heartbeatController. log ( " dummy_agent " )
156
155
}
157
156
158
- var payloads : [ HeartbeatsPayload ] = [ ]
157
+ let expectation = self . expectation ( description : #function )
159
158
160
159
DispatchQueue . concurrentPerform ( iterations: 100 ) { _ in
161
160
let payload = heartbeatController. flush ( )
162
- payloads. append ( payload)
163
- }
164
-
165
- // Then
166
- let nonEmptyPayloads = payloads. filter { payload in
167
- // Filter out non-empty payloads.
168
- !payload. userAgentPayloads. isEmpty
169
- }
170
-
171
- XCTAssertEqual ( nonEmptyPayloads. count, 1 )
172
-
173
- let payload = try XCTUnwrap ( nonEmptyPayloads. first)
174
- try HeartbeatLoggingTestUtils . assertEqualPayloadStrings (
175
- payload. headerValue ( ) ,
176
- """
177
- {
178
- " version " : 2,
179
- " heartbeats " : [
161
+ if !payload. userAgentPayloads. isEmpty {
162
+ try ! HeartbeatLoggingTestUtils . assertEqualPayloadStrings (
163
+ payload. headerValue ( ) ,
164
+ """
180
165
{
181
- " agent " : " dummy_agent " ,
182
- " dates " : [ " 2021-11-01 " ]
166
+ " version " : 2,
167
+ " heartbeats " : [
168
+ {
169
+ " agent " : " dummy_agent " ,
170
+ " dates " : [ " 2021-11-01 " ]
171
+ }
172
+ ]
183
173
}
184
- ]
174
+ """
175
+ )
176
+ expectation. fulfill ( )
185
177
}
186
- """
187
- )
178
+ }
179
+
180
+ // Then
181
+ wait ( for: [ expectation] )
188
182
}
189
183
190
- func testLogAndFlushHeartbeatFromTodayConcurrencyStressTest( ) throws {
184
+ @ MainActor func testLogAndFlushHeartbeatFromTodayConcurrencyStressTest( ) throws {
191
185
// Given
192
- let heartbeatController = HeartbeatController ( id: #function, dateProvider: { self . date } )
186
+ let date = Date ( timeIntervalSince1970: 1_635_739_200 ) // 2021-11-01 @ 00:00:00 (EST)
187
+ let heartbeatController = HeartbeatController ( id: #function, dateProvider: { date } )
193
188
194
189
// When
195
190
DispatchQueue . concurrentPerform ( iterations: 100 ) { _ in
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
}
232
222
233
223
func testLogRepeatedly_WithoutFlushing_LimitsOnWrite( ) throws {
234
224
// Given
225
+ let date = Date ( timeIntervalSince1970: 1_635_739_200 ) // 2021-11-01 @ 00:00:00 (EST)
235
226
let testDate = AdjustableDate ( date: date)
236
227
let heartbeatController = HeartbeatController ( id: #function, dateProvider: { testDate. date } )
237
228
@@ -313,7 +304,8 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
313
304
314
305
func testLogAndFlush_AfterUnderlyingStorageIsDeleted_CreatesNewStorage( ) throws {
315
306
// Given
316
- let heartbeatController = HeartbeatController ( id: #function, dateProvider: { self . date } )
307
+ let date = Date ( timeIntervalSince1970: 1_635_739_200 ) // 2021-11-01 @ 00:00:00 (EST)
308
+ let heartbeatController = HeartbeatController ( id: #function, dateProvider: { date } )
317
309
heartbeatController. log ( " dummy_agent " )
318
310
_ = XCTWaiter . wait ( for: [ expectation ( description: " Wait for async log. " ) ] , timeout: 0.1 )
319
311
0 commit comments