@@ -5,14 +5,18 @@ import io.sentry.DataCategory
55import io.sentry.DateUtils
66import io.sentry.EventProcessor
77import io.sentry.Hint
8+ import io.sentry.IHub
89import io.sentry.NoOpLogger
10+ import io.sentry.ProfilingTraceData
911import io.sentry.Sentry
1012import io.sentry.SentryEnvelope
1113import io.sentry.SentryEnvelopeHeader
1214import io.sentry.SentryEnvelopeItem
1315import io.sentry.SentryEvent
1416import io.sentry.SentryOptions
17+ import io.sentry.SentryTracer
1518import io.sentry.Session
19+ import io.sentry.TransactionContext
1620import io.sentry.UncaughtExceptionHandlerIntegration.UncaughtExceptionHint
1721import io.sentry.UserFeedback
1822import io.sentry.dsnString
@@ -21,6 +25,9 @@ import io.sentry.protocol.SentryId
2125import io.sentry.protocol.SentryTransaction
2226import io.sentry.protocol.User
2327import io.sentry.util.HintUtils
28+ import org.mockito.kotlin.mock
29+ import org.mockito.kotlin.whenever
30+ import java.io.File
2431import java.time.LocalDateTime
2532import java.time.ZoneId
2633import java.time.temporal.ChronoUnit
@@ -38,6 +45,9 @@ class ClientReportTest {
3845 @Test
3946 fun `lost envelope can be recorded` () {
4047 givenClientReportRecorder()
48+ val hub = mock<IHub >()
49+ whenever(hub.options).thenReturn(opts)
50+ val transaction = SentryTracer (TransactionContext (" name" , " op" ), hub)
4151
4252 val lostClientReport = ClientReport (
4353 DateUtils .getCurrentDateTime(),
@@ -53,20 +63,22 @@ class ClientReportTest {
5363 SentryEnvelopeItem .fromEvent(opts.serializer, SentryEvent ()),
5464 SentryEnvelopeItem .fromSession(opts.serializer, Session (" dis" , User (), " env" , " 0.0.1" )),
5565 SentryEnvelopeItem .fromUserFeedback(opts.serializer, UserFeedback (SentryId (UUID .randomUUID()))),
56- SentryEnvelopeItem .fromAttachment(opts.serializer, NoOpLogger .getInstance(), Attachment (" { \" number\" : 10 }" .toByteArray(), " log.json" ), 1000 )
66+ SentryEnvelopeItem .fromAttachment(opts.serializer, NoOpLogger .getInstance(), Attachment (" { \" number\" : 10 }" .toByteArray(), " log.json" ), 1000 ),
67+ SentryEnvelopeItem .fromProfilingTrace(ProfilingTraceData (File (" " ), transaction), 1000 , opts.serializer)
5768 )
5869
5970 clientReportRecorder.recordLostEnvelope(DiscardReason .NETWORK_ERROR , envelope)
6071
6172 val clientReportAtEnd = clientReportRecorder.resetCountsAndGenerateClientReport()
62- testHelper.assertTotalCount(10 , clientReportAtEnd)
73+ testHelper.assertTotalCount(11 , clientReportAtEnd)
6374 testHelper.assertCountFor(DiscardReason .SAMPLE_RATE , DataCategory .Error , 3 , clientReportAtEnd)
6475 testHelper.assertCountFor(DiscardReason .BEFORE_SEND , DataCategory .Error , 2 , clientReportAtEnd)
6576 testHelper.assertCountFor(DiscardReason .QUEUE_OVERFLOW , DataCategory .Transaction , 1 , clientReportAtEnd)
6677 testHelper.assertCountFor(DiscardReason .NETWORK_ERROR , DataCategory .Error , 1 , clientReportAtEnd)
6778 testHelper.assertCountFor(DiscardReason .NETWORK_ERROR , DataCategory .UserReport , 1 , clientReportAtEnd)
6879 testHelper.assertCountFor(DiscardReason .NETWORK_ERROR , DataCategory .Session , 1 , clientReportAtEnd)
6980 testHelper.assertCountFor(DiscardReason .NETWORK_ERROR , DataCategory .Attachment , 1 , clientReportAtEnd)
81+ testHelper.assertCountFor(DiscardReason .NETWORK_ERROR , DataCategory .Profile , 1 , clientReportAtEnd)
7082 }
7183
7284 @Test
@@ -89,7 +101,8 @@ class ClientReportTest {
89101 listOf (
90102 DiscardedEvent (DiscardReason .SAMPLE_RATE .reason, DataCategory .Error .category, 3 ),
91103 DiscardedEvent (DiscardReason .BEFORE_SEND .reason, DataCategory .Error .category, 2 ),
92- DiscardedEvent (DiscardReason .QUEUE_OVERFLOW .reason, DataCategory .Transaction .category, 1 )
104+ DiscardedEvent (DiscardReason .QUEUE_OVERFLOW .reason, DataCategory .Transaction .category, 1 ),
105+ DiscardedEvent (DiscardReason .SAMPLE_RATE .reason, DataCategory .Profile .category, 2 )
93106 )
94107 )
95108
@@ -98,10 +111,11 @@ class ClientReportTest {
98111 clientReportRecorder.recordLostEnvelopeItem(DiscardReason .NETWORK_ERROR , envelopeItem)
99112
100113 val clientReportAtEnd = clientReportRecorder.resetCountsAndGenerateClientReport()
101- testHelper.assertTotalCount(6 , clientReportAtEnd)
114+ testHelper.assertTotalCount(8 , clientReportAtEnd)
102115 testHelper.assertCountFor(DiscardReason .SAMPLE_RATE , DataCategory .Error , 3 , clientReportAtEnd)
103116 testHelper.assertCountFor(DiscardReason .BEFORE_SEND , DataCategory .Error , 2 , clientReportAtEnd)
104117 testHelper.assertCountFor(DiscardReason .QUEUE_OVERFLOW , DataCategory .Transaction , 1 , clientReportAtEnd)
118+ testHelper.assertCountFor(DiscardReason .SAMPLE_RATE , DataCategory .Profile , 2 , clientReportAtEnd)
105119 }
106120
107121 @Test
@@ -112,16 +126,18 @@ class ClientReportTest {
112126 clientReportRecorder.recordLostEvent(DiscardReason .CACHE_OVERFLOW , DataCategory .Attachment )
113127 clientReportRecorder.recordLostEvent(DiscardReason .RATELIMIT_BACKOFF , DataCategory .Error )
114128 clientReportRecorder.recordLostEvent(DiscardReason .QUEUE_OVERFLOW , DataCategory .Error )
129+ clientReportRecorder.recordLostEvent(DiscardReason .BEFORE_SEND , DataCategory .Profile )
115130
116131 val envelope = clientReportRecorder.attachReportToEnvelope(testHelper.newEnvelope())
117132
118133 testHelper.assertTotalCount(0 , clientReportRecorder.resetCountsAndGenerateClientReport())
119134
120135 val envelopeReport = envelope.items.first().getClientReport(opts.serializer)!!
121- assertEquals(3 , envelopeReport.discardedEvents.size)
136+ assertEquals(4 , envelopeReport.discardedEvents.size)
122137 assertEquals(2 , envelopeReport.discardedEvents.first { it.reason == DiscardReason .CACHE_OVERFLOW .reason && it.category == DataCategory .Attachment .category }.quantity)
123138 assertEquals(1 , envelopeReport.discardedEvents.first { it.reason == DiscardReason .RATELIMIT_BACKOFF .reason && it.category == DataCategory .Error .category }.quantity)
124139 assertEquals(1 , envelopeReport.discardedEvents.first { it.reason == DiscardReason .QUEUE_OVERFLOW .reason && it.category == DataCategory .Error .category }.quantity)
140+ assertEquals(1 , envelopeReport.discardedEvents.first { it.reason == DiscardReason .BEFORE_SEND .reason && it.category == DataCategory .Profile .category }.quantity)
125141 assertTrue(
126142 ChronoUnit .MILLIS .between(
127143 LocalDateTime .now(),
0 commit comments