@@ -16,6 +16,10 @@ import io.sentry.SentryEnvelope
1616import io.sentry.SentryEnvelopeHeader
1717import io.sentry.SentryEnvelopeItem
1818import io.sentry.SentryEvent
19+ import io.sentry.SentryLogEvent
20+ import io.sentry.SentryLogEvents
21+ import io.sentry.SentryLogLevel
22+ import io.sentry.SentryLongDate
1923import io.sentry.SentryOptions
2024import io.sentry.SentryReplayEvent
2125import io.sentry.SentryTracer
@@ -347,6 +351,34 @@ class ClientReportTest {
347351 verify(onDiscardMock, times(1 )).execute(DiscardReason .BEFORE_SEND , DataCategory .Profile , 1 )
348352 }
349353
354+ @Test
355+ fun `recording lost client report counts log entries` () {
356+ val onDiscardMock = mock<SentryOptions .OnDiscardCallback >()
357+ givenClientReportRecorder { options -> options.onDiscard = onDiscardMock }
358+
359+ val envelope =
360+ testHelper.newEnvelope(
361+ SentryEnvelopeItem .fromLogs(
362+ opts.serializer,
363+ SentryLogEvents (
364+ listOf (
365+ SentryLogEvent (SentryId (), SentryLongDate (1 ), " log message 1" , SentryLogLevel .ERROR ),
366+ SentryLogEvent (SentryId (), SentryLongDate (2 ), " log message 2" , SentryLogLevel .WARN ),
367+ )
368+ ),
369+ )
370+ )
371+
372+ clientReportRecorder.recordLostEnvelopeItem(DiscardReason .NETWORK_ERROR , envelope.items.first())
373+
374+ verify(onDiscardMock, times(1 )).execute(DiscardReason .NETWORK_ERROR , DataCategory .LogItem , 2 )
375+
376+ val clientReport = clientReportRecorder.resetCountsAndGenerateClientReport()
377+ val logItem =
378+ clientReport!! .discardedEvents!! .first { it.category == DataCategory .LogItem .category }
379+ assertEquals(2 , logItem.quantity)
380+ }
381+
350382 private fun givenClientReportRecorder (
351383 callback : Sentry .OptionsConfiguration <SentryOptions >? = null
352384 ) {
0 commit comments