Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Populate fields from new payload #557

Merged
merged 1 commit into from
Mar 14, 2024
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 @@ -17,8 +17,8 @@ internal class SessionEnvelopeSource(
return Envelope(
resourceSource.getEnvelopeResource(),
metadataSource.getEnvelopeMetadata(),
null,
null,
"0.1.0",
"session",
sessionPayloadSource.getSessionPayload(endType)
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ internal data class SessionMessage @JvmOverloads internal constructor(
val spans: List<EmbraceSpanData>? = null,

@Json(name = "v")
val version: Int = ApiClient.MESSAGE_VERSION,
val version: Int? = ApiClient.MESSAGE_VERSION,

/*
* Values below this point are copied temporarily from [Envelope]. Eventually we will migrate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ internal sealed class FinalEnvelopeParams(
val endTime: Long,
val lifeEventType: Session.LifeEventType?,
crashId: String?,
val endType: SessionSnapshotType,
val isCacheAttempt: Boolean
) {

Expand All @@ -35,12 +36,14 @@ internal sealed class FinalEnvelopeParams(
initial: Session,
endTime: Long,
lifeEventType: Session.LifeEventType?,
crashId: String? = null
endType: SessionSnapshotType,
crashId: String? = null,
) : FinalEnvelopeParams(
initial,
endTime,
lifeEventType,
crashId,
endType,
lifeEventType == null
) {
override val terminationTime: Long? = null
Expand All @@ -56,13 +59,14 @@ internal sealed class FinalEnvelopeParams(
initial: Session,
endTime: Long,
lifeEventType: Session.LifeEventType?,
endType: SessionSnapshotType,
crashId: String? = null,
val endType: SessionSnapshotType
) : FinalEnvelopeParams(
initial,
endTime,
lifeEventType,
crashId,
endType,
endType == SessionSnapshotType.PERIODIC_CACHE
) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ internal class PayloadFactoryImpl(
FinalEnvelopeParams.BackgroundActivityParams(
initial = initial,
endTime = timestamp - 1,
lifeEventType = LifeEventType.BKGND_STATE
lifeEventType = LifeEventType.BKGND_STATE,
endType = SessionSnapshotType.NORMAL_END
)
)
}
Expand Down Expand Up @@ -147,7 +148,8 @@ internal class PayloadFactoryImpl(
initial = initial,
endTime = timestamp,
lifeEventType = LifeEventType.BKGND_STATE,
crashId = crashId
crashId = crashId,
endType = SessionSnapshotType.JVM_CRASH
)
)
}
Expand All @@ -174,7 +176,8 @@ internal class PayloadFactoryImpl(
FinalEnvelopeParams.BackgroundActivityParams(
initial = initial,
endTime = timestamp,
lifeEventType = null
lifeEventType = null,
endType = SessionSnapshotType.PERIODIC_CACHE
)
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package io.embrace.android.embracesdk.session.message

import io.embrace.android.embracesdk.capture.envelope.SessionEnvelopeSource
import io.embrace.android.embracesdk.payload.Session
import io.embrace.android.embracesdk.payload.SessionMessage
import io.embrace.android.embracesdk.session.orchestrator.SessionSnapshotType

/**
* Generates a V2 payload. This currently calls through to the V1 collator for
* backwards compatibility.
*/
internal class V2PayloadMessageCollator(
private val v1Collator: V1PayloadMessageCollator
private val v1Collator: V1PayloadMessageCollator,
private val sessionEnvelopeSource: SessionEnvelopeSource
) : PayloadMessageCollator {

override fun buildInitialSession(params: InitialEnvelopeParams): Session {
Expand All @@ -17,9 +20,23 @@ internal class V2PayloadMessageCollator(

override fun buildFinalSessionMessage(params: FinalEnvelopeParams.SessionParams): SessionMessage {
return v1Collator.buildFinalSessionMessage(params)
.convertToV2Payload(params.endType)
}

override fun buildFinalBackgroundActivityMessage(params: FinalEnvelopeParams.BackgroundActivityParams): SessionMessage {
return v1Collator.buildFinalBackgroundActivityMessage(params)
.convertToV2Payload(params.endType)
}

private fun SessionMessage.convertToV2Payload(endType: SessionSnapshotType): SessionMessage {
val envelope = sessionEnvelopeSource.getEnvelope(endType)
return copy(
// future work: make legacy fields null here.
resource = envelope.resource,
metadata = envelope.metadata,
data = envelope.data,
newVersion = envelope.version,
type = envelope.type,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import io.embrace.android.embracesdk.fakes.FakeEnvelopeResourceSource
import io.embrace.android.embracesdk.fakes.FakeSessionPayloadSource
import io.embrace.android.embracesdk.session.orchestrator.SessionSnapshotType
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Test

internal class SessionEnvelopeSourceTest {
Expand All @@ -24,9 +23,7 @@ internal class SessionEnvelopeSourceTest {
assertEquals(metadataSource.metadata, payload.metadata)
assertEquals(resourceSource.resource, payload.resource)
assertEquals(sessionPayloadSource.sessionPayload, payload.data)

// future fields that need populating:
assertNull(payload.type)
assertNull(payload.version)
assertEquals("session", payload.type)
assertEquals("0.1.0", payload.version)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ internal class V1PayloadMessageCollatorTest {
startMsg,
15000000000,
LifeEventType.BKGND_STATE,
SessionSnapshotType.NORMAL_END,
"crashId"
)
)
Expand All @@ -128,8 +129,8 @@ internal class V1PayloadMessageCollatorTest {
startMsg,
15000000000,
LifeEventType.STATE,
"crashId",
SessionSnapshotType.NORMAL_END
SessionSnapshotType.NORMAL_END,
"crashId"
)
)
payload.verifyFinalFieldsPopulated(PayloadType.SESSION)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@ package io.embrace.android.embracesdk.session.message

import io.embrace.android.embracesdk.FakeBreadcrumbService
import io.embrace.android.embracesdk.FakeSessionPropertiesService
import io.embrace.android.embracesdk.capture.envelope.SessionEnvelopeSource
import io.embrace.android.embracesdk.fakes.FakeConfigService
import io.embrace.android.embracesdk.fakes.FakeEnvelopeMetadataSource
import io.embrace.android.embracesdk.fakes.FakeEnvelopeResourceSource
import io.embrace.android.embracesdk.fakes.FakeEventService
import io.embrace.android.embracesdk.fakes.FakeInternalErrorService
import io.embrace.android.embracesdk.fakes.FakeLogMessageService
import io.embrace.android.embracesdk.fakes.FakeMetadataService
import io.embrace.android.embracesdk.fakes.FakePerformanceInfoService
import io.embrace.android.embracesdk.fakes.FakePreferenceService
import io.embrace.android.embracesdk.fakes.FakeSessionPayloadSource
import io.embrace.android.embracesdk.fakes.FakeStartupService
import io.embrace.android.embracesdk.fakes.FakeThermalStatusService
import io.embrace.android.embracesdk.fakes.FakeUserService
Expand Down Expand Up @@ -56,7 +60,12 @@ internal class V2PayloadMessageCollatorTest {
sessionPropertiesService = FakeSessionPropertiesService(),
startupService = FakeStartupService()
)
v2collator = V2PayloadMessageCollator(v1collator)
val sessionEnvelopeSource = SessionEnvelopeSource(
metadataSource = FakeEnvelopeMetadataSource(),
resourceSource = FakeEnvelopeResourceSource(),
sessionPayloadSource = FakeSessionPayloadSource()
)
v2collator = V2PayloadMessageCollator(v1collator, sessionEnvelopeSource)
}

@Test
Expand Down Expand Up @@ -101,6 +110,7 @@ internal class V2PayloadMessageCollatorTest {
startMsg,
15000000000,
Session.LifeEventType.BKGND_STATE,
SessionSnapshotType.NORMAL_END,
"crashId"
)
)
Expand All @@ -125,8 +135,8 @@ internal class V2PayloadMessageCollatorTest {
startMsg,
15000000000,
Session.LifeEventType.STATE,
SessionSnapshotType.NORMAL_END,
"crashId",
SessionSnapshotType.NORMAL_END
)
)
payload.verifyFinalFieldsPopulated(PayloadType.SESSION)
Expand All @@ -140,6 +150,11 @@ internal class V2PayloadMessageCollatorTest {
assertNotNull(deviceInfo)
assertNotNull(performanceInfo)
assertNotNull(breadcrumbs)
assertNotNull(resource)
assertNotNull(metadata)
assertNotNull(data)
assertNotNull(newVersion)
assertNotNull(type)
session.verifyInitialFieldsPopulated(payloadType)
session.verifyFinalFieldsPopulated(payloadType)
}
Expand Down