Skip to content

Commit

Permalink
Fix message when writer is NoOp
Browse files Browse the repository at this point in the history
  • Loading branch information
xgouchet committed Apr 3, 2024
1 parent a107d7c commit acf1e06
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.datadog.android.api.context.DatadogContext
import com.datadog.android.api.feature.Feature
import com.datadog.android.api.feature.FeatureSdkCore
import com.datadog.android.api.storage.DataWriter
import com.datadog.android.api.storage.NoOpDataWriter
import com.datadog.android.rum.GlobalRumMonitor
import com.datadog.android.rum.internal.monitor.AdvancedRumMonitor

Expand Down Expand Up @@ -44,20 +45,28 @@ internal class WriteOperation(
fun submit() {
sdkCore.getFeature(Feature.RUM_FEATURE_NAME)
?.withWriteContext { datadogContext, eventBatchWriter ->
try {
val event = eventSource(datadogContext)
if (rumDataWriter is NoOpDataWriter) {
sdkCore.internalLogger.log(
level = InternalLogger.Level.INFO,
target = InternalLogger.Target.USER,
messageBuilder = { WRITE_OPERATION_IGNORED }
)
} else {
try {
val event = eventSource(datadogContext)

@Suppress("ThreadSafety") // called in a worker thread context
val isSuccess = rumDataWriter.write(eventBatchWriter, event)
if (isSuccess) {
advancedRumMonitor?.let {
onSuccess(it)
@Suppress("ThreadSafety") // called in a worker thread context
val isSuccess = rumDataWriter.write(eventBatchWriter, event)
if (isSuccess) {
advancedRumMonitor?.let {
onSuccess(it)
}
} else {
notifyEventWriteFailure()
}
} else {
notifyEventWriteFailure()
} catch (@Suppress("TooGenericExceptionCaught") e: Exception) {
notifyEventWriteFailure(e)
}
} catch (@Suppress("TooGenericExceptionCaught") e: Exception) {
notifyEventWriteFailure(e)
}
}
}
Expand Down Expand Up @@ -88,6 +97,7 @@ internal class WriteOperation(
}

internal companion object {
const val WRITE_OPERATION_IGNORED = "Write operation ignored, session is expired or RUM feature is disabled."
const val WRITE_OPERATION_FAILED_ERROR = "Write operation failed."
const val NO_ERROR_CALLBACK_PROVIDED_WARNING =
"Write operation failed, but no onError callback was provided."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.datadog.android.api.feature.Feature
import com.datadog.android.api.feature.FeatureScope
import com.datadog.android.api.storage.DataWriter
import com.datadog.android.api.storage.EventBatchWriter
import com.datadog.android.api.storage.NoOpDataWriter
import com.datadog.android.rum.utils.config.GlobalRumMonitorTestConfiguration
import com.datadog.android.rum.utils.forge.Configurator
import com.datadog.tools.unit.annotations.TestConfigurationsProvider
Expand All @@ -22,6 +23,7 @@ import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.junit.jupiter.api.extension.Extensions
import org.mockito.Mock
import org.mockito.Mockito.mock
import org.mockito.junit.jupiter.MockitoExtension
import org.mockito.junit.jupiter.MockitoSettings
import org.mockito.kotlin.any
Expand Down Expand Up @@ -218,6 +220,27 @@ internal class SdkCoreExtTest {
)
}

@Test
fun `𝕄 do nothing 𝕎 submit() { noop writer}`(
forge: Forge
) {
// Given
val fakeEvent = Any()
mockWriter = mock<NoOpDataWriter<Any>>()

// When
mockSdkCore.newRumEventWriteOperation(mockWriter) { fakeEvent }
.submit()

// Then
mockInternalLogger.verifyLog(
level = InternalLogger.Level.INFO,
target = InternalLogger.Target.USER,
message = WriteOperation.WRITE_OPERATION_IGNORED
)
verifyNoInteractions(mockWriter)
}

companion object {
val rumMonitor = GlobalRumMonitorTestConfiguration()

Expand Down

0 comments on commit acf1e06

Please sign in to comment.