@@ -17,6 +17,7 @@ import kotlin.test.BeforeTest
1717import kotlin.test.Test
1818import kotlin.test.assertEquals
1919import kotlin.test.assertNull
20+ import kotlin.test.assertTrue
2021import org.apache.kafka.clients.consumer.Consumer
2122import org.apache.kafka.clients.consumer.ConsumerRecord
2223import org.apache.kafka.common.header.internals.RecordHeaders
@@ -86,7 +87,7 @@ class SentryKafkaRecordInterceptorTest {
8687 private fun createRecordWithHeaders (
8788 sentryTrace : String? = null,
8889 baggage : String? = null,
89- enqueuedTime : Long ? = null,
90+ enqueuedTime : String ? = null,
9091 deliveryAttempt : Int? = null,
9192 ): ConsumerRecord <String , String > {
9293 val headers = RecordHeaders ()
@@ -99,7 +100,7 @@ class SentryKafkaRecordInterceptorTest {
99100 enqueuedTime?.let {
100101 headers.add(
101102 SentryProducerInterceptor .SENTRY_ENQUEUED_TIME_HEADER ,
102- it.toString(). toByteArray(StandardCharsets .UTF_8 ),
103+ it.toByteArray(StandardCharsets .UTF_8 ),
103104 )
104105 }
105106 deliveryAttempt?.let {
@@ -165,6 +166,18 @@ class SentryKafkaRecordInterceptorTest {
165166 assertNull(transaction.data?.get(SpanDataConvention .MESSAGING_MESSAGE_RETRY_COUNT ))
166167 }
167168
169+ @Test
170+ fun `sets receive latency from enqueued time in epoch seconds` () {
171+ val interceptor = SentryKafkaRecordInterceptor <String , String >(scopes)
172+ val enqueuedTime = (System .currentTimeMillis() / 1000.0 - 1.0 ).toString()
173+ val record = createRecordWithHeaders(enqueuedTime = enqueuedTime)
174+
175+ withMockSentry { interceptor.intercept(record, consumer) }
176+
177+ val latency = transaction.data?.get(SpanDataConvention .MESSAGING_MESSAGE_RECEIVE_LATENCY )
178+ assertTrue(latency is Long && latency >= 0 )
179+ }
180+
168181 @Test
169182 fun `does not create span when queue tracing is disabled` () {
170183 options.isEnableQueueTracing = false
0 commit comments