Skip to content

Commit ac90182

Browse files
authored
Merge pull request #2624 from DataDog/nogorodnikov/rum-9746/resolve-write-orchestrator-from-datadogcontext
RUM-9746: Resolve file orchestrator for write operation from `DatadogContext`
2 parents 10c7f1f + cac8f54 commit ac90182

File tree

5 files changed

+34
-49
lines changed

5 files changed

+34
-49
lines changed

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/SdkFeature.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,6 @@ internal class SdkFeature(
371371
internalLogger = internalLogger,
372372
filePersistenceConfig = filePersistenceConfig,
373373
metricsDispatcher = metricsDispatcher,
374-
coreFeature.trackingConsentProvider,
375374
featureName
376375
)
377376
}

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/persistence/AbstractStorage.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ internal class AbstractStorage(
3030
private val executorService: ExecutorService,
3131
private val internalLogger: InternalLogger,
3232
internal val storageConfiguration: FeatureStorageConfiguration,
33-
private val consentProvider: ConsentProvider
33+
consentProvider: ConsentProvider
3434
) : Storage, TrackingConsentProviderCallback {
3535

3636
private val grantedPersistenceStrategy: PersistenceStrategy by lazy {
@@ -64,7 +64,7 @@ internal class AbstractStorage(
6464
callback: (EventBatchWriter) -> Unit
6565
) {
6666
executorService.executeSafe("Data write", internalLogger) {
67-
val strategy = resolvePersistenceStrategy()
67+
val strategy = resolvePersistenceStrategy(datadogContext)
6868
val writer = object : EventBatchWriter {
6969
@WorkerThread
7070
override fun currentMetadata(): ByteArray? {
@@ -81,8 +81,8 @@ internal class AbstractStorage(
8181
}
8282

8383
@WorkerThread
84-
private fun resolvePersistenceStrategy() =
85-
when (consentProvider.getConsent()) {
84+
private fun resolvePersistenceStrategy(datadogContext: DatadogContext) =
85+
when (datadogContext.trackingConsent) {
8686
TrackingConsent.GRANTED -> grantedPersistenceStrategy
8787
TrackingConsent.PENDING -> pendingPersistenceStrategy
8888
TrackingConsent.NOT_GRANTED -> notGrantedPersistenceStrategy

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/persistence/ConsentAwareStorage.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import com.datadog.android.core.internal.persistence.file.FileReaderWriter
2222
import com.datadog.android.core.internal.persistence.file.batch.BatchFileReaderWriter
2323
import com.datadog.android.core.internal.persistence.file.existsSafe
2424
import com.datadog.android.core.internal.persistence.file.lengthSafe
25-
import com.datadog.android.core.internal.privacy.ConsentProvider
2625
import com.datadog.android.core.internal.utils.executeSafe
2726
import com.datadog.android.privacy.TrackingConsent
2827
import java.io.File
@@ -39,7 +38,6 @@ internal class ConsentAwareStorage(
3938
private val internalLogger: InternalLogger,
4039
internal val filePersistenceConfig: FilePersistenceConfig,
4140
private val metricsDispatcher: MetricsDispatcher,
42-
private val consentProvider: ConsentProvider,
4341
private val featureName: String,
4442
private val benchmarkUploads: BenchmarkUploads = BenchmarkUploads()
4543
) : Storage, BatchWriteEventListener {
@@ -58,7 +56,7 @@ internal class ConsentAwareStorage(
5856
callback: (EventBatchWriter) -> Unit
5957
) {
6058
executorService.executeSafe("Data write", internalLogger) {
61-
val orchestrator = resolveOrchestrator()
59+
val orchestrator = resolveOrchestrator(datadogContext)
6260
// TODO RUM-9712 Put performance metric for event processing + event write measurement
6361
if (orchestrator == null) {
6462
callback.invoke(NoOpEventBatchWriter())
@@ -147,9 +145,8 @@ internal class ConsentAwareStorage(
147145
}
148146

149147
@WorkerThread
150-
private fun resolveOrchestrator(): FileOrchestrator? {
151-
val consent = consentProvider.getConsent()
152-
return when (consent) {
148+
private fun resolveOrchestrator(datadogContext: DatadogContext): FileOrchestrator? {
149+
return when (datadogContext.trackingConsent) {
153150
TrackingConsent.GRANTED -> grantedOrchestrator
154151
TrackingConsent.PENDING -> pendingOrchestrator
155152
TrackingConsent.NOT_GRANTED -> null

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/persistence/AbstractStorageTest.kt

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,13 @@ internal class AbstractStorageTest {
108108
@Forgery fakeBatchEvent: RawBatchEvent
109109
) {
110110
// Given
111-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.GRANTED
111+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.GRANTED)
112112
val mockWriteCallback = mock<(EventBatchWriter) -> Unit>()
113113
whenever(mockGrantedPersistenceStrategy.write(any(), anyOrNull(), any())) doReturn fakeResult
114114
var result: Boolean? = null
115115
whenever(mockWriteCallback.invoke(any())) doAnswer {
116-
result = (it.getArgument(0) as? EventBatchWriter)?.write(fakeBatchEvent, null, fakeEventType)
116+
result = it.getArgument<EventBatchWriter>(0)
117+
.write(fakeBatchEvent, null, fakeEventType)
117118
}
118119

119120
// When
@@ -136,13 +137,14 @@ internal class AbstractStorageTest {
136137
@StringForgery fakeBatchMetadata: String
137138
) {
138139
// Given
139-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.GRANTED
140+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.GRANTED)
140141
val mockWriteCallback = mock<(EventBatchWriter) -> Unit>()
141142
val batchMetadata = fakeBatchMetadata.toByteArray()
142143
whenever(mockGrantedPersistenceStrategy.write(any(), anyOrNull(), any())) doReturn fakeResult
143144
var result: Boolean? = null
144145
whenever(mockWriteCallback.invoke(any())) doAnswer {
145-
result = (it.getArgument(0) as? EventBatchWriter)?.write(fakeBatchEvent, batchMetadata, fakeEventType)
146+
result = it.getArgument<EventBatchWriter>(0)
147+
.write(fakeBatchEvent, batchMetadata, fakeEventType)
146148
}
147149

148150
// When
@@ -161,13 +163,13 @@ internal class AbstractStorageTest {
161163
@Test
162164
fun `M provide writer W writeCurrentBatch()+currentMetadata() {consent=granted, batchMetadata=null}`() {
163165
// Given
164-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.GRANTED
166+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.GRANTED)
165167
whenever(mockGrantedPersistenceStrategy.currentMetadata()) doReturn null
166168
val mockWriteCallback = mock<(EventBatchWriter) -> Unit>()
167169
whenever(mockGrantedPersistenceStrategy.currentMetadata()) doReturn null
168170
var resultMetadata: ByteArray? = null
169171
whenever(mockWriteCallback.invoke(any())) doAnswer {
170-
resultMetadata = (it.getArgument(0) as? EventBatchWriter)?.currentMetadata()
172+
resultMetadata = it.getArgument<EventBatchWriter>(0).currentMetadata()
171173
}
172174

173175
// When
@@ -188,13 +190,13 @@ internal class AbstractStorageTest {
188190
@StringForgery fakeBatchMetadata: String
189191
) {
190192
// Given
191-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.GRANTED
193+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.GRANTED)
192194
val mockWriteCallback = mock<(EventBatchWriter) -> Unit>()
193195
val batchMetadata = fakeBatchMetadata.toByteArray()
194196
whenever(mockGrantedPersistenceStrategy.currentMetadata()) doReturn batchMetadata
195197
var resultMetadata: ByteArray? = null
196198
whenever(mockWriteCallback.invoke(any())) doAnswer {
197-
resultMetadata = (it.getArgument(0) as? EventBatchWriter)?.currentMetadata()
199+
resultMetadata = it.getArgument<EventBatchWriter>(0).currentMetadata()
198200
}
199201

200202
// When
@@ -216,12 +218,12 @@ internal class AbstractStorageTest {
216218
@Forgery fakeBatchEvent: RawBatchEvent
217219
) {
218220
// Given
219-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.PENDING
221+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.PENDING)
220222
val mockWriteCallback = mock<(EventBatchWriter) -> Unit>()
221223
whenever(mockPendingPersistenceStrategy.write(any(), anyOrNull(), any())) doReturn fakeResult
222224
var result: Boolean? = null
223225
whenever(mockWriteCallback.invoke(any())) doAnswer {
224-
result = (it.getArgument(0) as? EventBatchWriter)?.write(fakeBatchEvent, null, fakeEventType)
226+
result = it.getArgument<EventBatchWriter>(0).write(fakeBatchEvent, null, fakeEventType)
225227
}
226228

227229
// When
@@ -244,13 +246,13 @@ internal class AbstractStorageTest {
244246
@StringForgery fakeBatchMetadata: String
245247
) {
246248
// Given
247-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.PENDING
249+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.PENDING)
248250
val mockWriteCallback = mock<(EventBatchWriter) -> Unit>()
249251
val batchMetadata = fakeBatchMetadata.toByteArray()
250252
whenever(mockPendingPersistenceStrategy.write(any(), anyOrNull(), any())) doReturn fakeResult
251253
var result: Boolean? = null
252254
whenever(mockWriteCallback.invoke(any())) doAnswer {
253-
result = (it.getArgument(0) as? EventBatchWriter)?.write(fakeBatchEvent, batchMetadata, fakeEventType)
255+
result = it.getArgument<EventBatchWriter>(0).write(fakeBatchEvent, batchMetadata, fakeEventType)
254256
}
255257

256258
// When
@@ -269,11 +271,11 @@ internal class AbstractStorageTest {
269271
@Test
270272
fun `M provide writer W writeCurrentBatch()+currentMetadata() {consent=pending, batchMetadata=null}`() {
271273
// Given
272-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.PENDING
274+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.PENDING)
273275
val mockWriteCallback = mock<(EventBatchWriter) -> Unit>()
274276
var resultMetadata: ByteArray? = null
275277
whenever(mockWriteCallback.invoke(any())) doAnswer {
276-
resultMetadata = (it.getArgument(0) as? EventBatchWriter)?.currentMetadata()
278+
resultMetadata = it.getArgument<EventBatchWriter>(0).currentMetadata()
277279
}
278280
whenever(mockPendingPersistenceStrategy.currentMetadata()) doReturn null
279281

@@ -295,12 +297,12 @@ internal class AbstractStorageTest {
295297
@StringForgery fakeBatchMetadata: String
296298
) {
297299
// Given
298-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.PENDING
300+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.PENDING)
299301
val mockWriteCallback = mock<(EventBatchWriter) -> Unit>()
300302
val batchMetadata = fakeBatchMetadata.toByteArray()
301303
var resultMetadata: ByteArray? = null
302304
whenever(mockWriteCallback.invoke(any())) doAnswer {
303-
resultMetadata = (it.getArgument(0) as? EventBatchWriter)?.currentMetadata()
305+
resultMetadata = it.getArgument<EventBatchWriter>(0).currentMetadata()
304306
}
305307
whenever(mockPendingPersistenceStrategy.currentMetadata()) doReturn batchMetadata
306308

@@ -323,12 +325,12 @@ internal class AbstractStorageTest {
323325
@StringForgery fakeBatchMetadata: String
324326
) {
325327
// Given
326-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.NOT_GRANTED
328+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.NOT_GRANTED)
327329
val mockWriteCallback = mock<(EventBatchWriter) -> Unit>()
328330
val batchMetadata = fakeBatchMetadata.toByteArray()
329331
var result: Boolean? = null
330332
whenever(mockWriteCallback.invoke(any())) doAnswer {
331-
result = (it.getArgument(0) as? EventBatchWriter)?.write(fakeBatchEvent, batchMetadata, fakeEventType)
333+
result = it.getArgument<EventBatchWriter>(0).write(fakeBatchEvent, batchMetadata, fakeEventType)
332334
}
333335

334336
// When
@@ -346,11 +348,11 @@ internal class AbstractStorageTest {
346348
@Test
347349
fun `M provide no op writer W writeCurrentBatch()+currentMetadata() {consent=not_granted}`() {
348350
// Given
349-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.NOT_GRANTED
351+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.NOT_GRANTED)
350352
val mockWriteCallback = mock<(EventBatchWriter) -> Unit>()
351353
var resultMetadata: ByteArray? = null
352354
whenever(mockWriteCallback.invoke(any())) doAnswer {
353-
resultMetadata = (it.getArgument(0) as? EventBatchWriter)?.currentMetadata()
355+
resultMetadata = it.getArgument<EventBatchWriter>(0).currentMetadata()
354356
}
355357

356358
// When

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/persistence/ConsentAwareStorageTest.kt

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import com.datadog.android.core.internal.persistence.file.FileOrchestrator
2020
import com.datadog.android.core.internal.persistence.file.FilePersistenceConfig
2121
import com.datadog.android.core.internal.persistence.file.FileReaderWriter
2222
import com.datadog.android.core.internal.persistence.file.batch.BatchFileReaderWriter
23-
import com.datadog.android.core.internal.privacy.ConsentProvider
2423
import com.datadog.android.privacy.TrackingConsent
2524
import com.datadog.android.utils.forge.Configurator
2625
import com.datadog.android.utils.verifyLog
@@ -114,18 +113,14 @@ internal class ConsentAwareStorageTest {
114113
@Forgery
115114
lateinit var mockGrantedRootParentFile: File
116115

117-
@Mock
118-
lateinit var mockConsentProvider: ConsentProvider
119-
120116
@StringForgery
121117
lateinit var fakeFeatureName: String
122118

123119
@IntForgery(min = 0, max = 100)
124120
var fakePendingBatches: Int = 0
125121

126122
@BeforeEach
127-
fun `set up`(forge: Forge) {
128-
whenever(mockConsentProvider.getConsent()) doReturn forge.aValueFrom(TrackingConsent::class.java)
123+
fun `set up`() {
129124
whenever(mockPendingOrchestrator.getRootDir()) doReturn File(mockPendingRootParentFile, fakeRootDirName)
130125
whenever(mockGrantedOrchestrator.getRootDir()) doReturn File(mockGrantedRootParentFile, fakeRootDirName)
131126
whenever(mockPendingOrchestrator.getRootDirName()) doReturn fakeRootDirName
@@ -146,7 +141,6 @@ internal class ConsentAwareStorageTest {
146141
internalLogger = mockInternalLogger,
147142
filePersistenceConfig = mockFilePersistenceConfig,
148143
metricsDispatcher = mockMetricsDispatcher,
149-
consentProvider = mockConsentProvider,
150144
featureName = fakeFeatureName
151145
)
152146
}
@@ -157,7 +151,7 @@ internal class ConsentAwareStorageTest {
157151
fun `M provide writer W writeCurrentBatch() {consent=granted}`() {
158152
// Given
159153
val mockCallback = mock<(EventBatchWriter) -> Unit>()
160-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.GRANTED
154+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.GRANTED)
161155

162156
// When
163157
testedStorage.writeCurrentBatch(fakeDatadogContext, callback = mockCallback)
@@ -179,7 +173,7 @@ internal class ConsentAwareStorageTest {
179173
fun `M provide writer W writeCurrentBatch() {consent=pending}`() {
180174
// Given
181175
val mockCallback = mock<(EventBatchWriter) -> Unit>()
182-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.PENDING
176+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.PENDING)
183177

184178
// When
185179
testedStorage.writeCurrentBatch(fakeDatadogContext, callback = mockCallback)
@@ -201,7 +195,7 @@ internal class ConsentAwareStorageTest {
201195
fun `M provide no-op writer W writeCurrentBatch() {not_granted}`() {
202196
// Given
203197
val mockCallback = mock<(EventBatchWriter) -> Unit>()
204-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.NOT_GRANTED
198+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.NOT_GRANTED)
205199

206200
// When
207201
testedStorage.writeCurrentBatch(fakeDatadogContext, callback = mockCallback)
@@ -237,7 +231,6 @@ internal class ConsentAwareStorageTest {
237231
internalLogger = mockInternalLogger,
238232
filePersistenceConfig = mockFilePersistenceConfig,
239233
metricsDispatcher = mockMetricsDispatcher,
240-
consentProvider = mockConsentProvider,
241234
featureName = fakeFeatureName
242235
)
243236

@@ -280,7 +273,6 @@ internal class ConsentAwareStorageTest {
280273
internalLogger = mockInternalLogger,
281274
filePersistenceConfig = mockFilePersistenceConfig,
282275
metricsDispatcher = mockMetricsDispatcher,
283-
consentProvider = mockConsentProvider,
284276
featureName = fakeFeatureName
285277
)
286278
var accumulator: Byte = 0
@@ -298,7 +290,7 @@ internal class ConsentAwareStorageTest {
298290
eventType = fakeEventType
299291
)
300292
}
301-
whenever(mockConsentProvider.getConsent()) doReturn TrackingConsent.GRANTED
293+
fakeDatadogContext = fakeDatadogContext.copy(trackingConsent = TrackingConsent.GRANTED)
302294
whenever(mockGrantedOrchestrator.getWritableFile()) doReturn file
303295
val mockMetaFile = mock<File>().apply { whenever(exists()) doReturn true }
304296
whenever(mockMetaReaderWriter.readData(mockMetaFile)) doAnswer {
@@ -459,7 +451,6 @@ internal class ConsentAwareStorageTest {
459451
internalLogger = mockInternalLogger,
460452
filePersistenceConfig = mockFilePersistenceConfig,
461453
metricsDispatcher = mockMetricsDispatcher,
462-
consentProvider = mockConsentProvider,
463454
featureName = fakeFeatureName
464455
)
465456

@@ -590,7 +581,6 @@ internal class ConsentAwareStorageTest {
590581
internalLogger = mockInternalLogger,
591582
filePersistenceConfig = mockFilePersistenceConfig,
592583
metricsDispatcher = mockMetricsDispatcher,
593-
consentProvider = mockConsentProvider,
594584
featureName = fakeFeatureName
595585
)
596586

@@ -649,7 +639,6 @@ internal class ConsentAwareStorageTest {
649639
internalLogger = mockInternalLogger,
650640
filePersistenceConfig = mockFilePersistenceConfig,
651641
metricsDispatcher = mockMetricsDispatcher,
652-
consentProvider = mockConsentProvider,
653642
featureName = fakeFeatureName
654643
)
655644

@@ -712,7 +701,6 @@ internal class ConsentAwareStorageTest {
712701
internalLogger = mockInternalLogger,
713702
filePersistenceConfig = mockFilePersistenceConfig,
714703
metricsDispatcher = mockMetricsDispatcher,
715-
consentProvider = mockConsentProvider,
716704
featureName = fakeFeatureName,
717705
benchmarkUploads = mockBenchmarkUploads
718706
)
@@ -756,7 +744,6 @@ internal class ConsentAwareStorageTest {
756744
internalLogger = mockInternalLogger,
757745
filePersistenceConfig = mockFilePersistenceConfig,
758746
metricsDispatcher = mockMetricsDispatcher,
759-
consentProvider = mockConsentProvider,
760747
featureName = fakeFeatureName,
761748
benchmarkUploads = mockBenchmarkUploads
762749
)

0 commit comments

Comments
 (0)