Skip to content

Commit

Permalink
Clean internal testing android code
Browse files Browse the repository at this point in the history
  • Loading branch information
louiszawadzki committed Jan 25, 2024
1 parent 33cc79b commit 9a317d9
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 109 deletions.
4 changes: 0 additions & 4 deletions packages/internal-testing-tools/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ buildscript {
}
}


apply plugin: 'de.mobilej.unmock'

def isNewArchitectureEnabled() {
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
}
Expand Down Expand Up @@ -195,7 +192,6 @@ dependencies {
testImplementation "com.github.xgouchet.Elmyr:jvm:1.3.1"
testImplementation "org.mockito.kotlin:mockito-kotlin:5.1.0"
testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
unmock 'org.robolectric:android-all:4.4_r1-robolectric-r2'
}

tasks.withType(Test) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ import com.datadog.reactnative.DatadogSDKWrapperStorage
import com.facebook.react.bridge.Promise
import com.google.gson.Gson
import okhttp3.HttpUrl
import kotlin.concurrent.thread

/**
* The entry point to use Datadog's internal testing feature.
*/
class DdInternalTestingImplementation() {
private var wrappedCore: StubSDKCore? = null
private val gson = Gson()

/**
* Clears all data for all features.
Expand All @@ -42,7 +42,7 @@ class DdInternalTestingImplementation() {
*/
fun getAllEvents(feature: String, promise: Promise) {
val events = wrappedCore?.eventsWritten(feature)
val eventsJson = Gson().toJson(events)
val eventsJson = gson.toJson(events)
promise.resolve(eventsJson)
}

Expand Down Expand Up @@ -80,31 +80,13 @@ internal class StubSDKCore(
}

fun clearData() {
featureScopes.forEach { entry ->
featureScopes[entry.key]?.clearData()
}
}

// endregion

// region InternalSdkCore

override val firstPartyHostResolver: FirstPartyHostHeaderTypeResolver =
StubFirstPartyHostHeaderTypeResolver()

override fun getDatadogContext(): DatadogContext? {
return core.getDatadogContext()
featureScopes.values.forEach { it.clearData() }
}

override val networkInfo: NetworkInfo
get() = core.networkInfo

// endregion

// region FeatureSdkCore

override val internalLogger: InternalLogger = core.internalLogger

override fun registerFeature(feature: Feature) {
core.registerFeature(feature)
core.getFeature(feature.name)?.let {
Expand All @@ -116,71 +98,9 @@ internal class StubSDKCore(
return featureScopes[featureName]
}

override fun updateFeatureContext(
featureName: String,
updateCallback: (context: MutableMap<String, Any?>) -> Unit
) {
core.updateFeatureContext(featureName, updateCallback)
}

override fun getFeatureContext(featureName: String): Map<String, Any?> {
return core.getFeatureContext(featureName)
}

// endregion

// region SdkCore

override val service: String
get() {
return core.service
}

override val time: TimeInfo
get() {
val nanos = System.nanoTime()
return TimeInfo(
deviceTimeNs = nanos,
serverTimeNs = nanos,
serverTimeOffsetMs = 0L,
serverTimeOffsetNs = 0L
)
}

override fun setUserInfo(
id: String?,
name: String?,
email: String?,
extraInfo: Map<String, Any?>
) {
core.setUserInfo(id, name, email, extraInfo)
}

// endregion
}

class StubFirstPartyHostHeaderTypeResolver :
FirstPartyHostHeaderTypeResolver {

// region FirstPartyHostHeaderTypeResolver

override fun isEmpty(): Boolean = false

override fun isFirstPartyUrl(url: HttpUrl): Boolean = true

override fun isFirstPartyUrl(url: String): Boolean = true

override fun headerTypesForUrl(url: String): Set<TracingHeaderType> = setOf(TracingHeaderType.TRACECONTEXT)

override fun headerTypesForUrl(url: HttpUrl): Set<TracingHeaderType> = setOf(TracingHeaderType.TRACECONTEXT)

override fun getAllHeaderTypes(): Set<TracingHeaderType> = setOf(TracingHeaderType.TRACECONTEXT)

// endregion
}



internal class FeatureScopeInterceptor(
private val featureScope: FeatureScope,
private val core: InternalSdkCore,
Expand Down Expand Up @@ -229,9 +149,7 @@ internal class EventBatchInterceptor: EventBatchWriter {
): Boolean {
val eventContent = String(event.data)

events.add(events.size,
eventContent
)
events += eventContent

return true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,9 @@ internal class DdInternalTestingImplementationTest {
DdInternalTestingImplementation()
}

@AfterEach
fun `tear down`() {
}

@Test
fun `M return captured events W enable()`() {
fun `M return captured events W enabled()`() {
// Given
testedInternalTesting.enable(mockPromise)
val mockFeature = MockFeature("mockFeature")
val mockFeatureScope = MockFeatureScope(mockFeature)
whenever(mockCore.getFeature(mockFeature.name)).doReturn(
Expand All @@ -73,15 +68,17 @@ internal class DdInternalTestingImplementationTest {
whenever(mockCore.getDatadogContext()).doReturn(
mockContext
)

// When
testedInternalTesting.enable(mockPromise)
// Simulating DdSdkImplementation initialization
DatadogSDKWrapperStorage.setSdkCore(mockCore)
DatadogSDKWrapperStorage.notifyOnInitializedListeners(mockCore)


// When
val wrappedCore = DatadogSDKWrapperStorage.getSdkCore() as StubSDKCore
wrappedCore.registerFeature(mockFeature)
wrappedCore.getFeature(mockFeature.name)!!.withWriteContext { _, eventBatchWriter ->
MockDataWriter().write(eventBatchWriter, MockEvent("mock event for test"))
eventBatchWriter.write(RawBatchEvent(data = "mock event for test".toByteArray()), batchMetadata = null)
}

// Then
Expand All @@ -107,13 +104,3 @@ internal class MockFeature(override val name: String) : Feature {

override fun onStop() {}
}

internal data class MockEvent (
public var name: String
)

internal class MockDataWriter: DataWriter<MockEvent> {
override fun write(writer: EventBatchWriter, element: MockEvent): Boolean {
return synchronized(this) { writer.write(RawBatchEvent(data = element.name.toByteArray()), batchMetadata = null) }
}
}

0 comments on commit 9a317d9

Please sign in to comment.