@@ -24,6 +24,9 @@ class FileWriterTests: XCTestCase {
2424 }
2525
2626 func testItWritesDataWithMetadataToSingleFileInTLVFormat( ) throws {
27+ let expectation = expectation ( description: " Writes complete " )
28+ expectation. expectedFulfillmentCount = 3
29+
2730 let writer = FileWriter (
2831 orchestrator: FilesOrchestrator (
2932 directory: directory,
@@ -35,9 +38,9 @@ class FileWriterTests: XCTestCase {
3538 telemetry: NOPTelemetry ( )
3639 )
3740
38- writer. write ( value: [ " key1 " : " value1 " ] , metadata: [ " meta1 " : " metaValue1 " ] )
39- writer. write ( value: [ " key2 " : " value2 " ] ) // skipped metadata here
40- writer. write ( value: [ " key3 " : " value3 " ] , metadata: [ " meta3 " : " metaValue3 " ] )
41+ writer. write ( value: [ " key1 " : " value1 " ] , metadata: [ " meta1 " : " metaValue1 " ] , completion : expectation . fulfill )
42+ writer. write ( value: [ " key2 " : " value2 " ] , completion : expectation . fulfill ) // skipped metadata here
43+ writer. write ( value: [ " key3 " : " value3 " ] , metadata: [ " meta3 " : " metaValue3 " ] , completion : expectation . fulfill )
4144
4245 XCTAssertEqual ( try directory. files ( ) . count, 1 )
4346 let stream = try directory. files ( ) [ 0 ] . stream ( )
@@ -58,6 +61,8 @@ class FileWriterTests: XCTestCase {
5861 block = try reader. next ( )
5962 XCTAssertEqual ( block? . type, . event)
6063 XCTAssertEqual ( block? . data, #"{"key3":"value3"}"# . utf8Data)
64+
65+ wait ( for: [ expectation] , timeout: 0 )
6166 }
6267
6368 func testItWritesEncryptedDataWithMetadataToSingleFileInTLVFormat( ) throws {
@@ -102,6 +107,9 @@ class FileWriterTests: XCTestCase {
102107 }
103108
104109 func testItWritesDataToSingleFileInTLVFormat( ) throws {
110+ let expectation = expectation ( description: " Writes complete " )
111+ expectation. expectedFulfillmentCount = 3
112+
105113 let writer = FileWriter (
106114 orchestrator: FilesOrchestrator (
107115 directory: directory,
@@ -113,9 +121,9 @@ class FileWriterTests: XCTestCase {
113121 telemetry: NOPTelemetry ( )
114122 )
115123
116- writer. write ( value: [ " key1 " : " value1 " ] )
117- writer. write ( value: [ " key2 " : " value2 " ] )
118- writer. write ( value: [ " key3 " : " value3 " ] )
124+ writer. write ( value: [ " key1 " : " value1 " ] , completion : expectation . fulfill )
125+ writer. write ( value: [ " key2 " : " value2 " ] , completion : expectation . fulfill )
126+ writer. write ( value: [ " key3 " : " value3 " ] , completion : expectation . fulfill )
119127
120128 XCTAssertEqual ( try directory. files ( ) . count, 1 )
121129 let stream = try directory. files ( ) [ 0 ] . stream ( )
@@ -130,9 +138,14 @@ class FileWriterTests: XCTestCase {
130138 block = try reader. next ( )
131139 XCTAssertEqual ( block? . type, . event)
132140 XCTAssertEqual ( block? . data, #"{"key3":"value3"}"# . utf8Data)
141+
142+ wait ( for: [ expectation] , timeout: 0 )
133143 }
134144
135145 func testGivenErrorVerbosity_whenIndividualDataExceedsMaxWriteSize_itDropsDataAndPrintsError( ) throws {
146+ let expectation = expectation ( description: " Writes complete " )
147+ expectation. expectedFulfillmentCount = 2
148+
136149 let dd = DD . mockWith ( logger: CoreLoggerMock ( ) )
137150 defer { dd. reset ( ) }
138151
@@ -161,24 +174,28 @@ class FileWriterTests: XCTestCase {
161174 telemetry: NOPTelemetry ( )
162175 )
163176
164- writer. write ( value: [ " key1 " : " value1 " ] ) // will be written
177+ writer. write ( value: [ " key1 " : " value1 " ] , completion : expectation . fulfill ) // will be written
165178
166179 XCTAssertEqual ( try directory. files ( ) . count, 1 )
167180 var reader = try BatchDataBlockReader ( input: directory. files ( ) [ 0 ] . stream ( ) )
168181 var blocks = try XCTUnwrap ( reader. all ( ) )
169182 XCTAssertEqual ( blocks. count, 1 )
170183 XCTAssertEqual ( blocks [ 0 ] . data, #"{"key1":"value1"}"# . utf8Data)
171184
172- writer. write ( value: [ " key2 " : " value3 that makes it exceed 23 bytes " ] ) // will be dropped
185+ writer. write ( value: [ " key2 " : " value3 that makes it exceed 23 bytes " ] , completion : expectation . fulfill ) // will be dropped
173186
174187 reader = try BatchDataBlockReader ( input: directory. files ( ) [ 0 ] . stream ( ) )
175188 blocks = try XCTUnwrap ( reader. all ( ) )
176189 XCTAssertEqual ( blocks. count, 1 ) // same content as before
177190 XCTAssertEqual ( dd. logger. errorLog? . message, " (rum) Failed to encode value " )
178191 XCTAssertEqual ( dd. logger. errorLog? . error? . message, " DataBlock with \( 47 ) bytes exceeds limit of \( 23 ) bytes " )
192+
193+ wait ( for: [ expectation] , timeout: 0 )
179194 }
180195
181196 func testGivenErrorVerbosity_whenDataCannotBeEncoded_itPrintsError( ) throws {
197+ let expectation = expectation ( description: " Writes complete " )
198+
182199 let dd = DD . mockWith ( logger: CoreLoggerMock ( ) )
183200 defer { dd. reset ( ) }
184201
@@ -199,13 +216,18 @@ class FileWriterTests: XCTestCase {
199216 telemetry: NOPTelemetry ( )
200217 )
201218
202- writer. write ( value: FailingEncodableMock ( errorMessage: " failed to encode `FailingEncodable`. " ) )
219+ writer. write ( value: FailingEncodableMock ( errorMessage: " failed to encode `FailingEncodable`. " ) , completion : expectation . fulfill )
203220
204221 XCTAssertEqual ( dd. logger. errorLog? . message, " (rum) Failed to encode value " )
205222 XCTAssertEqual ( dd. logger. errorLog? . error? . message, " failed to encode `FailingEncodable`. " )
223+
224+ wait ( for: [ expectation] , timeout: 0 )
206225 }
207226
208227 func testGivenErrorVerbosity_whenIOExceptionIsThrown_itPrintsError( ) throws {
228+ let expectation = expectation ( description: " Writes complete " )
229+ expectation. expectedFulfillmentCount = 2
230+
209231 let dd = DD . mockWith ( logger: CoreLoggerMock ( ) )
210232 defer { dd. reset ( ) }
211233
@@ -226,13 +248,15 @@ class FileWriterTests: XCTestCase {
226248 telemetry: NOPTelemetry ( )
227249 )
228250
229- writer. write ( value: [ " ok " ] ) // will create the file
251+ writer. write ( value: [ " ok " ] , completion : expectation . fulfill ) // will create the file
230252 try ? directory. files ( ) [ 0 ] . makeReadonly ( )
231- writer. write ( value: [ " won't be written " ] )
253+ writer. write ( value: [ " won't be written " ] , completion : expectation . fulfill )
232254 try ? directory. files ( ) [ 0 ] . makeReadWrite ( )
233255
234256 XCTAssertEqual ( dd. logger. errorLog? . message, " (rum) Failed to write 26 bytes to file " )
235257 XCTAssertTrue ( dd. logger. errorLog!. error!. message. contains ( " You don’t have permission " ) )
258+
259+ wait ( for: [ expectation] , timeout: 0 )
236260 }
237261
238262 /// NOTE: Test added after incident-4797
0 commit comments