@@ -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,33 @@ 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 = clientReport!! .discardedEvents!! .first { it.category == DataCategory .LogItem .category }
378+ assertEquals(2 , logItem.quantity)
379+ }
380+
350381 private fun givenClientReportRecorder (
351382 callback : Sentry .OptionsConfiguration <SentryOptions >? = null
352383 ) {
0 commit comments