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