@@ -12,12 +12,12 @@ import io.sentry.NoOpLogger
1212import io.sentry.ProfileChunk
1313import io.sentry.ProfilingTraceData
1414import io.sentry.ReplayRecording
15+ import io.sentry.EnvelopeReader
16+ import io.sentry.JsonSerializer
1517import io.sentry.SentryEnvelope
1618import io.sentry.SentryEnvelopeHeader
1719import io.sentry.SentryEnvelopeItem
18- import io.sentry.SentryEnvelopeItemHeader
1920import io.sentry.SentryEvent
20- import io.sentry.SentryItemType
2121import io.sentry.SentryLogEvent
2222import io.sentry.SentryLogEvents
2323import io.sentry.SentryLogLevel
@@ -540,32 +540,22 @@ class RateLimiterTest {
540540 fun `drop span items as lost` () {
541541 val rateLimiter = fixture.getSUT()
542542
543- // There is no span API yet so we'll create the envelope manually
544- val spanItemHeader =
545- SentryEnvelopeItemHeader (
546- SentryItemType .Span ,
547- 10 ,
548- " application/vnd.sentry.items.span.v2+json" ,
549- null ,
550- null ,
551- null ,
552- 1 ,
553- )
554- val spanItem = SentryEnvelopeItem (spanItemHeader, ByteArray (10 ))
555- val attachmentItem =
556- SentryEnvelopeItem .fromAttachment(
557- fixture.serializer,
558- NoOpLogger .getInstance(),
559- Attachment (" { \" number\" : 10 }" .toByteArray(), " log.json" ),
560- 1000 ,
561- )
562- val envelope = SentryEnvelope (SentryEnvelopeHeader (), arrayListOf (spanItem, attachmentItem))
543+ // There is no span API yet so we'll create the envelope manually using EnvelopeReader
544+ // This mimics how hybrid SDKs would send span v2 envelope items
545+ val spanPayload = """ {"items":[]}"""
546+ val spanItemHeader = """ {"type":"span","length":${spanPayload.length} ,"content_type":"application/vnd.sentry.items.span.v2+json","item_count":1}"""
547+ val envelopeHeader = """ {}"""
548+ val rawEnvelope = " $envelopeHeader \n $spanItemHeader \n $spanPayload "
549+
550+ val options = SentryOptions ()
551+ val envelopeReader = EnvelopeReader (JsonSerializer (options))
552+ val spanEnvelope = envelopeReader.read(rawEnvelope.byteInputStream())!!
553+ val spanItem = spanEnvelope.items.first()
563554
564555 rateLimiter.updateRetryAfterLimits(" 60:span:key" , null , 1 )
565- val result = rateLimiter.filter(envelope , Hint ())
556+ val result = rateLimiter.filter(spanEnvelope , Hint ())
566557
567- assertNotNull(result)
568- assertEquals(1 , result.items.toList().size)
558+ assertNull(result)
569559
570560 verify(fixture.clientReportRecorder, times(1 ))
571561 .recordLostEnvelopeItem(eq(DiscardReason .RATELIMIT_BACKOFF ), same(spanItem))
0 commit comments