1616import XCTest
1717
1818class HeartbeatLoggingIntegrationTests : XCTestCase {
19- // 2021-11-01 @ 00:00:00 (EST)
20- let date = Date ( timeIntervalSince1970: 1_635_739_200 )
21-
2219 override func setUpWithError( ) throws {
2320 try HeartbeatLoggingTestUtils . removeUnderlyingHeartbeatStorageContainers ( )
2421 }
@@ -52,7 +49,7 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
5249 )
5350 }
5451
55- func testLogAndFlushAsync( ) throws {
52+ @ MainActor func testLogAndFlushAsync( ) throws {
5653 // Given
5754 let heartbeatController = HeartbeatController ( id: #function)
5855 let expectedDate = HeartbeatsPayload . dateFormatter. string ( from: Date ( ) )
@@ -123,8 +120,9 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
123120
124121 func testMultipleControllersWithTheSameIDUseTheSameStorageInstance( ) throws {
125122 // 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 } )
128126 // When
129127 heartbeatController1. log ( " dummy_agent " )
130128 // Then
@@ -146,92 +144,85 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
146144 assertHeartbeatControllerFlushesEmptyPayload ( heartbeatController1)
147145 }
148146
149- func testLogAndFlushConcurrencyStressTest( ) throws {
147+ @ MainActor func testLogAndFlushConcurrencyStressTest( ) throws {
150148 // 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 } )
152151
153152 // When
154153 DispatchQueue . concurrentPerform ( iterations: 100 ) { _ in
155154 heartbeatController. log ( " dummy_agent " )
156155 }
157156
158- var payloads : [ HeartbeatsPayload ] = [ ]
157+ let expectation = self . expectation ( description : #function )
159158
160159 DispatchQueue . concurrentPerform ( iterations: 100 ) { _ in
161160 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+ """
180165 {
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+ ]
183173 }
184- ]
174+ """
175+ )
176+ expectation. fulfill ( )
185177 }
186- """
187- )
178+ }
179+
180+ // Then
181+ wait ( for: [ expectation] )
188182 }
189183
190- func testLogAndFlushHeartbeatFromTodayConcurrencyStressTest( ) throws {
184+ @ MainActor func testLogAndFlushHeartbeatFromTodayConcurrencyStressTest( ) throws {
191185 // 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 } )
193188
194189 // When
195190 DispatchQueue . concurrentPerform ( iterations: 100 ) { _ in
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 }
232222
233223 func testLogRepeatedly_WithoutFlushing_LimitsOnWrite( ) throws {
234224 // Given
225+ let date = Date ( timeIntervalSince1970: 1_635_739_200 ) // 2021-11-01 @ 00:00:00 (EST)
235226 let testDate = AdjustableDate ( date: date)
236227 let heartbeatController = HeartbeatController ( id: #function, dateProvider: { testDate. date } )
237228
@@ -313,7 +304,8 @@ class HeartbeatLoggingIntegrationTests: XCTestCase {
313304
314305 func testLogAndFlush_AfterUnderlyingStorageIsDeleted_CreatesNewStorage( ) throws {
315306 // 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 } )
317309 heartbeatController. log ( " dummy_agent " )
318310 _ = XCTWaiter . wait ( for: [ expectation ( description: " Wait for async log. " ) ] , timeout: 0.1 )
319311
0 commit comments