Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,15 @@ package io.embrace.android.embracesdk.testcases

import androidx.test.ext.junit.runners.AndroidJUnit4
import io.embrace.android.embracesdk.LogExceptionType
import io.embrace.android.embracesdk.concurrency.BlockingScheduledExecutorService
import io.embrace.android.embracesdk.fakes.config.FakeInstrumentedConfig
import io.embrace.android.embracesdk.fakes.config.FakeProjectConfig
import io.embrace.android.embracesdk.internal.EmbraceInternalApi
import io.embrace.android.embracesdk.internal.arch.schema.EmbType
import io.embrace.android.embracesdk.internal.payload.AppFramework
import io.embrace.android.embracesdk.internal.worker.Worker
import io.embrace.android.embracesdk.testframework.SdkIntegrationTestRule
import io.embrace.android.embracesdk.testframework.actions.EmbraceSetupInterface
import io.embrace.android.embracesdk.testframework.assertions.assertMatches
import io.embrace.android.embracesdk.testframework.assertions.assertOtelLogReceived
import io.embrace.android.embracesdk.testframework.assertions.getLastLog
import io.embrace.android.embracesdk.testframework.assertions.getLogOfType
import io.opentelemetry.api.logs.Severity
import io.opentelemetry.semconv.ExceptionAttributes
import org.junit.Assert.assertEquals
Expand All @@ -27,20 +25,16 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
internal class FlutterInternalInterfaceTest {

private val instrumentedConfig = FakeInstrumentedConfig(project = FakeProjectConfig(
appId = "abcde",
appFramework = "flutter"
))

private lateinit var executor: BlockingScheduledExecutorService
private val instrumentedConfig = FakeInstrumentedConfig(
project = FakeProjectConfig(
appId = "abcde",
appFramework = "flutter"
)
)

@Rule
@JvmField
val testRule: SdkIntegrationTestRule = SdkIntegrationTestRule {
EmbraceSetupInterface(workerToFake = Worker.Background.LogMessageWorker).also {
executor = it.getFakedWorkerExecutor()
}
}
val testRule: SdkIntegrationTestRule = SdkIntegrationTestRule()

@Test
fun `flutter without values should return defaults`() {
Expand Down Expand Up @@ -169,11 +163,10 @@ internal class FlutterInternalInterfaceTest {
expectedContext,
expectedLibrary,
)
flushLogs()
}
},
assertAction = {
val log = getSingleLogEnvelope().getLastLog()
val log = getSingleLogEnvelope().getLogOfType(EmbType.System.FlutterException)

assertOtelLogReceived(
logReceived = log,
Expand All @@ -186,11 +179,13 @@ internal class FlutterInternalInterfaceTest {
expectedEmbType = "sys.flutter_exception",
expectedState = "foreground",
)
log.attributes?.assertMatches(mapOf(
ExceptionAttributes.EXCEPTION_STACKTRACE.key to expectedStacktrace,
"emb.exception.context" to expectedContext,
"emb.exception.library" to expectedLibrary,
))
log.attributes?.assertMatches(
mapOf(
ExceptionAttributes.EXCEPTION_STACKTRACE.key to expectedStacktrace,
"emb.exception.context" to expectedContext,
"emb.exception.library" to expectedLibrary,
)
)
}
)
}
Expand All @@ -214,11 +209,10 @@ internal class FlutterInternalInterfaceTest {
expectedContext,
expectedLibrary,
)
flushLogs()
}
},
assertAction = {
val log = getSingleLogEnvelope().getLastLog()
val log = getSingleLogEnvelope().getLogOfType(EmbType.System.FlutterException)

assertOtelLogReceived(
logReceived = log,
Expand All @@ -231,17 +225,14 @@ internal class FlutterInternalInterfaceTest {
expectedEmbType = "sys.flutter_exception",
expectedState = "foreground",
)
log.attributes?.assertMatches(mapOf(
ExceptionAttributes.EXCEPTION_STACKTRACE.key to expectedStacktrace,
"emb.exception.context" to expectedContext,
"emb.exception.library" to expectedLibrary,
))
log.attributes?.assertMatches(
mapOf(
ExceptionAttributes.EXCEPTION_STACKTRACE.key to expectedStacktrace,
"emb.exception.context" to expectedContext,
"emb.exception.library" to expectedLibrary,
)
)
}
)
}

private fun flushLogs() {
executor.runCurrentlyBlocked()
testRule.bootstrapper.logModule.logOrchestrator.flush(false)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,15 @@ package io.embrace.android.embracesdk.testcases.features
import androidx.test.ext.junit.runners.AndroidJUnit4
import io.embrace.android.embracesdk.LogExceptionType
import io.embrace.android.embracesdk.Severity
import io.embrace.android.embracesdk.concurrency.BlockingScheduledExecutorService
import io.embrace.android.embracesdk.fakes.config.FakeEnabledFeatureConfig
import io.embrace.android.embracesdk.fakes.config.FakeInstrumentedConfig
import io.embrace.android.embracesdk.internal.arch.schema.EmbType
import io.embrace.android.embracesdk.internal.payload.Envelope
import io.embrace.android.embracesdk.internal.payload.LogPayload
import io.embrace.android.embracesdk.internal.utils.getSafeStackTrace
import io.embrace.android.embracesdk.internal.worker.Worker
import io.embrace.android.embracesdk.testframework.SdkIntegrationTestRule
import io.embrace.android.embracesdk.testframework.actions.EmbraceSetupInterface
import io.embrace.android.embracesdk.testframework.assertions.assertOtelLogReceived
import io.embrace.android.embracesdk.testframework.assertions.getLastLog
import io.embrace.android.embracesdk.testframework.assertions.getLogOfType
import io.embrace.android.embracesdk.testframework.assertions.getOtelSeverity
import org.junit.Rule
import org.junit.Test
Expand All @@ -22,16 +20,15 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
internal class LogFeatureTest {

private val instrumentedConfig = FakeInstrumentedConfig(enabledFeatures = FakeEnabledFeatureConfig(bgActivityCapture = true))
private lateinit var executor: BlockingScheduledExecutorService
private val instrumentedConfig = FakeInstrumentedConfig(
enabledFeatures = FakeEnabledFeatureConfig(
bgActivityCapture = true
)
)

@Rule
@JvmField
val testRule: SdkIntegrationTestRule = SdkIntegrationTestRule {
EmbraceSetupInterface(workerToFake = Worker.Background.LogMessageWorker).also {
executor = it.getFakedWorkerExecutor()
}
}
val testRule: SdkIntegrationTestRule = SdkIntegrationTestRule()

@Test
fun `log info message sent in foreground`() {
Expand All @@ -40,11 +37,11 @@ internal class LogFeatureTest {
testCaseAction = {
recordSession {
embrace.logInfo("test message")
flushLogs()

}
},
assertAction = {
val log = getSingleLogEnvelope().getLastLog()
val log = getSingleLogEnvelope().getLogOfType(EmbType.System.Log)
assertOtelLogReceived(
logReceived = log,
expectedMessage = "test message",
Expand All @@ -62,10 +59,10 @@ internal class LogFeatureTest {
instrumentedConfig = instrumentedConfig,
testCaseAction = {
embrace.logWarning("test message")
flushLogs()
clock.tick(2000L)
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to move time ahead so the batching logic kicks in

},
assertAction = {
val log = getSingleLogEnvelope().getLastLog()
val log = getSingleLogEnvelope().getLogOfType(EmbType.System.Log)
assertOtelLogReceived(
logReceived = log,
expectedMessage = "test message",
Expand All @@ -82,10 +79,11 @@ internal class LogFeatureTest {
instrumentedConfig = instrumentedConfig,
testCaseAction = {
embrace.logError("test message")
flushLogs()
clock.tick(2000L)

},
assertAction = {
val log = getSingleLogEnvelope().getLastLog()
val log = getSingleLogEnvelope().getLogOfType(EmbType.System.Log)
assertOtelLogReceived(
log,
expectedMessage = "test message",
Expand All @@ -105,7 +103,7 @@ internal class LogFeatureTest {
val expectedMessage = "test message ${severity.name}"
embrace.logMessage(expectedMessage, severity)
}
flushLogs()
clock.tick(2000L)
},
assertAction = {
val logs = groupLogsBySeverity(getSingleLogEnvelope())
Expand All @@ -132,7 +130,7 @@ internal class LogFeatureTest {
val expectedMessage = "test message ${severity.name}"
embrace.logMessage(expectedMessage, severity, customProperties)
}
flushLogs()
clock.tick(2000L)
},
assertAction = {
val logs = groupLogsBySeverity(getSingleLogEnvelope())
Expand All @@ -156,10 +154,10 @@ internal class LogFeatureTest {
instrumentedConfig = instrumentedConfig,
testCaseAction = {
embrace.logException(testException)
flushLogs()
clock.tick(2000L)
},
assertAction = {
val log = getSingleLogEnvelope().getLastLog()
val log = getSingleLogEnvelope().getLogOfType(EmbType.System.Exception)
assertOtelLogReceived(
log,
expectedMessage = checkNotNull(testException.message),
Expand All @@ -181,10 +179,10 @@ internal class LogFeatureTest {
instrumentedConfig = instrumentedConfig,
testCaseAction = {
embrace.logException(testException, Severity.INFO)
flushLogs()
clock.tick(2000L)
},
assertAction = {
val log = getSingleLogEnvelope().getLastLog()
val log = getSingleLogEnvelope().getLogOfType(EmbType.System.Exception)
assertOtelLogReceived(
log,
expectedMessage = checkNotNull(testException.message),
Expand All @@ -211,7 +209,7 @@ internal class LogFeatureTest {
customProperties
)
}
flushLogs()
clock.tick(2000L)
},
assertAction = {
val logs = groupLogsBySeverity(getSingleLogEnvelope())
Expand Down Expand Up @@ -243,7 +241,7 @@ internal class LogFeatureTest {
val expectedMessage = "test message ${severity.name}"
embrace.logException(testException, severity, customProperties, expectedMessage)
}
flushLogs()
clock.tick(2000L)
},
assertAction = {
val logs = groupLogsBySeverity(getSingleLogEnvelope())
Expand Down Expand Up @@ -273,10 +271,10 @@ internal class LogFeatureTest {
instrumentedConfig = instrumentedConfig,
testCaseAction = {
embrace.logCustomStacktrace(stacktrace)
flushLogs()
clock.tick(2000L)
},
assertAction = {
val log = getSingleLogEnvelope().getLastLog()
val log = getSingleLogEnvelope().getLogOfType(EmbType.System.Exception)
assertOtelLogReceived(
log,
expectedMessage = "",
Expand All @@ -298,7 +296,7 @@ internal class LogFeatureTest {
Severity.values().forEach { severity ->
embrace.logCustomStacktrace(stacktrace, severity)
}
flushLogs()
clock.tick(2000L)
},
assertAction = {
val logs = groupLogsBySeverity(getSingleLogEnvelope())
Expand Down Expand Up @@ -326,7 +324,7 @@ internal class LogFeatureTest {
Severity.values().forEach { severity ->
embrace.logCustomStacktrace(stacktrace, severity, customProperties)
}
flushLogs()
clock.tick(2000L)
},
assertAction = {
val logs = groupLogsBySeverity(getSingleLogEnvelope())
Expand Down Expand Up @@ -361,7 +359,7 @@ internal class LogFeatureTest {
expectedMessage
)
}
flushLogs()
clock.tick(2000L)
},
assertAction = {
val envelope = getSingleLogEnvelope()
Expand All @@ -384,11 +382,6 @@ internal class LogFeatureTest {
)
}

private fun flushLogs() {
executor.runCurrentlyBlocked()
testRule.bootstrapper.logModule.logOrchestrator.flush(false)
}

private fun getEmbraceSeverity(severityNumber: Int): Severity {
return when (severityNumber) {
io.opentelemetry.api.logs.Severity.INFO.severityNumber -> Severity.INFO
Expand Down
Loading
Loading