6
6
7
7
package com.datadog.android.core.internal.persistence.file.batch
8
8
9
+ import android.os.FileObserver
9
10
import com.datadog.android.api.InternalLogger
10
11
import com.datadog.android.core.internal.metrics.BatchClosedMetadata
11
12
import com.datadog.android.core.internal.metrics.MetricsDispatcher
12
13
import com.datadog.android.core.internal.metrics.RemovalReason
13
- import com.datadog.android.core.internal.persistence.file.FileOrchestrator
14
14
import com.datadog.android.core.internal.persistence.file.FilePersistenceConfig
15
15
import com.datadog.android.utils.forge.Configurator
16
16
import com.datadog.android.utils.verifyLog
@@ -57,7 +57,7 @@ import java.util.concurrent.atomic.AtomicInteger
57
57
@MockitoSettings(strictness = Strictness .LENIENT )
58
58
internal class BatchFileOrchestratorTest {
59
59
60
- private lateinit var testedOrchestrator: FileOrchestrator
60
+ private lateinit var testedOrchestrator: BatchFileOrchestrator
61
61
62
62
@TempDir
63
63
lateinit var tempDir: File
@@ -156,7 +156,11 @@ internal class BatchFileOrchestratorTest {
156
156
var previousFile: File ? = null
157
157
val startTimestamp = System .currentTimeMillis()
158
158
repeat(iterations) {
159
- previousFile = testedOrchestrator.getWritableFile(false )
159
+ val file = testedOrchestrator.getWritableFile(false )
160
+ if (file != previousFile) {
161
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , file?.name)
162
+ }
163
+ previousFile = file
160
164
previousFile?.writeText(data)
161
165
}
162
166
val endTimestamp = System .currentTimeMillis()
@@ -291,11 +295,14 @@ internal class BatchFileOrchestratorTest {
291
295
val oldTimestamp = System .currentTimeMillis() - oldFileAge
292
296
val oldFile = File (fakeRootDir, oldTimestamp.toString())
293
297
oldFile.createNewFile()
298
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , oldFile.name)
294
299
val oldFileMeta = File (" ${oldFile.path} _metadata" )
295
300
oldFileMeta.createNewFile()
301
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , oldFileMeta.name)
296
302
val youngTimestamp = System .currentTimeMillis() - RECENT_DELAY_MS - 1
297
303
val youngFile = File (fakeRootDir, youngTimestamp.toString())
298
304
youngFile.createNewFile()
305
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , youngFile.name)
299
306
300
307
// When
301
308
val start = System .currentTimeMillis()
@@ -331,11 +338,14 @@ internal class BatchFileOrchestratorTest {
331
338
val oldTimestamp = System .currentTimeMillis() - oldFileAge
332
339
val oldFile = File (fakeRootDir, oldTimestamp.toString())
333
340
oldFile.createNewFile()
341
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , oldFile.name)
334
342
val oldFileMeta = File (" ${oldFile.path} _metadata" )
335
343
oldFileMeta.createNewFile()
344
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , oldFileMeta.name)
336
345
val youngTimestamp = System .currentTimeMillis() - RECENT_DELAY_MS - 1
337
346
val youngFile = File (fakeRootDir, youngTimestamp.toString())
338
347
youngFile.createNewFile()
348
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , youngFile.name)
339
349
340
350
// When
341
351
val start = System .currentTimeMillis()
@@ -345,6 +355,7 @@ internal class BatchFileOrchestratorTest {
345
355
// cleanup shouldn't be performed during the next getWritableFile call
346
356
val evenOlderFile = File (fakeRootDir, (oldTimestamp - 1 ).toString())
347
357
evenOlderFile.createNewFile()
358
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , evenOlderFile.name)
348
359
testedOrchestrator.getWritableFile(forceNewFile)
349
360
350
361
// Then
@@ -376,8 +387,10 @@ internal class BatchFileOrchestratorTest {
376
387
val oldTimestamp = System .currentTimeMillis() - oldFileAge
377
388
val oldFile = File (fakeRootDir, oldTimestamp.toString())
378
389
oldFile.createNewFile()
390
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , oldFile.name)
379
391
val oldFileMeta = File (" ${oldFile.path} _metadata" )
380
392
oldFileMeta.createNewFile()
393
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , oldFileMeta.name)
381
394
382
395
// When
383
396
val start = System .currentTimeMillis()
@@ -386,6 +399,7 @@ internal class BatchFileOrchestratorTest {
386
399
Thread .sleep(CLEANUP_FREQUENCY_THRESHOLD_MS + 1 )
387
400
val evenOlderFile = File (fakeRootDir, (oldTimestamp - 1 ).toString())
388
401
evenOlderFile.createNewFile()
402
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , evenOlderFile.name)
389
403
testedOrchestrator.getWritableFile(forceNewFile)
390
404
391
405
// Then
@@ -450,6 +464,7 @@ internal class BatchFileOrchestratorTest {
450
464
assumeTrue(fakeRootDir.listFiles().isNullOrEmpty())
451
465
val previousFile = testedOrchestrator.getWritableFile()
452
466
checkNotNull(previousFile)
467
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , previousFile.name)
453
468
previousFile.writeText(previousData)
454
469
Thread .sleep(1 )
455
470
@@ -667,12 +682,16 @@ internal class BatchFileOrchestratorTest {
667
682
// Given
668
683
assumeTrue(fakeRootDir.listFiles().isNullOrEmpty())
669
684
val filesCount = MAX_DISK_SPACE / MAX_BATCH_SIZE
670
- val files = (0 .. filesCount).map {
685
+ val files = mutableListOf<File >()
686
+ repeat(filesCount + 1 ) {
671
687
val file = testedOrchestrator.getWritableFile()
672
688
checkNotNull(file)
689
+ if (files.none { it.name == file.name }) {
690
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , file.name)
691
+ }
673
692
file.writeText(previousData)
693
+ files.add(file)
674
694
Thread .sleep(1 )
675
- file
676
695
}
677
696
678
697
// When
@@ -831,11 +850,14 @@ internal class BatchFileOrchestratorTest {
831
850
val oldTimestamp = System .currentTimeMillis() - oldFileAge
832
851
val oldFile = File (fakeRootDir, oldTimestamp.toString())
833
852
oldFile.createNewFile()
853
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , oldFile.name)
834
854
val oldFileMeta = File (" ${oldFile.path} _metadata" )
835
855
oldFileMeta.createNewFile()
856
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , oldFileMeta.name)
836
857
val youngTimestamp = System .currentTimeMillis() - RECENT_DELAY_MS - 1
837
858
val youngFile = File (fakeRootDir, youngTimestamp.toString())
838
859
youngFile.createNewFile()
860
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , youngFile.name)
839
861
840
862
// When
841
863
val result = testedOrchestrator.getReadableFile(emptySet())
@@ -878,6 +900,7 @@ internal class BatchFileOrchestratorTest {
878
900
val timestamp = System .currentTimeMillis() - (RECENT_DELAY_MS * 2 )
879
901
val file = File (fakeRootDir, timestamp.toString())
880
902
file.createNewFile()
903
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , file.name)
881
904
882
905
// When
883
906
val result = testedOrchestrator.getReadableFile(emptySet())
@@ -1039,10 +1062,16 @@ internal class BatchFileOrchestratorTest {
1039
1062
for (i in 1 .. count) {
1040
1063
// create both non readable and non writable files
1041
1064
expectedFiles.add(
1042
- File (fakeRootDir, (new + i).toString()).also { it.createNewFile() }
1065
+ File (fakeRootDir, (new + i).toString()).also {
1066
+ it.createNewFile()
1067
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , it.name)
1068
+ }
1043
1069
)
1044
1070
expectedFiles.add(
1045
- File (fakeRootDir, (old - i).toString()).also { it.createNewFile() }
1071
+ File (fakeRootDir, (old - i).toString()).also {
1072
+ it.createNewFile()
1073
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , it.name)
1074
+ }
1046
1075
)
1047
1076
}
1048
1077
@@ -1085,10 +1114,16 @@ internal class BatchFileOrchestratorTest {
1085
1114
for (i in 1 .. count) {
1086
1115
// create both non readable and non writable files
1087
1116
expectedFiles.add(
1088
- File (fakeRootDir, (new + i).toString()).also { it.createNewFile() }
1117
+ File (fakeRootDir, (new + i).toString()).also {
1118
+ it.createNewFile()
1119
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , it.name)
1120
+ }
1089
1121
)
1090
1122
expectedFiles.add(
1091
- File (fakeRootDir, (old - i).toString()).also { it.createNewFile() }
1123
+ File (fakeRootDir, (old - i).toString()).also {
1124
+ it.createNewFile()
1125
+ testedOrchestrator.fileObserver.onEvent(FileObserver .CREATE , it.name)
1126
+ }
1092
1127
)
1093
1128
}
1094
1129
0 commit comments