@@ -6,6 +6,7 @@ import androidx.test.core.app.ApplicationProvider
66import androidx.test.ext.junit.runners.AndroidJUnit4
77import com.nhaarman.mockitokotlin2.any
88import com.nhaarman.mockitokotlin2.argumentCaptor
9+ import com.nhaarman.mockitokotlin2.check
910import com.nhaarman.mockitokotlin2.mock
1011import com.nhaarman.mockitokotlin2.never
1112import com.nhaarman.mockitokotlin2.spy
@@ -16,6 +17,7 @@ import io.sentry.IHub
1617import io.sentry.ILogger
1718import io.sentry.ISentryExecutorService
1819import io.sentry.ProfilingTraceData
20+ import io.sentry.Sentry
1921import io.sentry.SentryLevel
2022import io.sentry.SentryTracer
2123import io.sentry.TransactionContext
@@ -28,7 +30,6 @@ import kotlin.test.Test
2830import kotlin.test.assertEquals
2931import kotlin.test.assertFailsWith
3032import kotlin.test.assertNotNull
31- import kotlin.test.assertNull
3233import kotlin.test.assertTrue
3334
3435@RunWith(AndroidJUnit4 ::class )
@@ -63,6 +64,7 @@ class AndroidTransactionProfilerTest {
6364 transaction1 = SentryTracer (TransactionContext (" " , " " ), hub)
6465 transaction2 = SentryTracer (TransactionContext (" " , " " ), hub)
6566 transaction3 = SentryTracer (TransactionContext (" " , " " ), hub)
67+ Sentry .setCurrentHub(hub)
6668 return AndroidTransactionProfiler (context, options, buildInfoProvider)
6769 }
6870 }
@@ -100,8 +102,13 @@ class AndroidTransactionProfilerTest {
100102 fun `profiler profiles current transaction` () {
101103 val profiler = fixture.getSut(context)
102104 profiler.onTransactionStart(fixture.transaction1)
103- val traceData = profiler.onTransactionFinish(fixture.transaction1)
104- assertEquals(fixture.transaction1.eventId.toString(), traceData!! .transactionId)
105+ profiler.onTransactionFinish(fixture.transaction1)
106+
107+ verify(fixture.hub).captureProfile(
108+ check {
109+ assertEquals(it.transactionId, fixture.transaction1.eventId.toString())
110+ }
111+ )
105112 }
106113
107114 @Test
@@ -111,8 +118,8 @@ class AndroidTransactionProfilerTest {
111118 }
112119 val profiler = fixture.getSut(context, buildInfo)
113120 profiler.onTransactionStart(fixture.transaction1)
114- val traceData = profiler.onTransactionFinish(fixture.transaction1)
115- assertNull(traceData )
121+ profiler.onTransactionFinish(fixture.transaction1)
122+ verify(fixture.hub, never()).captureProfile(any() )
116123 }
117124
118125 @Test
@@ -122,8 +129,8 @@ class AndroidTransactionProfilerTest {
122129 }
123130 val profiler = fixture.getSut(context)
124131 profiler.onTransactionStart(fixture.transaction1)
125- val traceData = profiler.onTransactionFinish(fixture.transaction1)
126- assertNull(traceData )
132+ profiler.onTransactionFinish(fixture.transaction1)
133+ verify(fixture.hub, never()).captureProfile(any() )
127134 }
128135
129136 @Test
@@ -195,8 +202,8 @@ class AndroidTransactionProfilerTest {
195202 }
196203 val profiler = fixture.getSut(context)
197204 profiler.onTransactionStart(fixture.transaction1)
198- val traceData = profiler.onTransactionFinish(fixture.transaction1)
199- assertNull(traceData )
205+ profiler.onTransactionFinish(fixture.transaction1)
206+ verify(fixture.hub, never()).captureProfile(any() )
200207 }
201208
202209 @Test
@@ -206,8 +213,8 @@ class AndroidTransactionProfilerTest {
206213 }
207214 val profiler = fixture.getSut(context)
208215 profiler.onTransactionStart(fixture.transaction1)
209- val traceData = profiler.onTransactionFinish(fixture.transaction1)
210- assertNull(traceData )
216+ profiler.onTransactionFinish(fixture.transaction1)
217+ verify(fixture.hub, never()).captureProfile(any() )
211218 }
212219
213220 @Test
@@ -217,8 +224,8 @@ class AndroidTransactionProfilerTest {
217224 }
218225 val profiler = fixture.getSut(context)
219226 profiler.onTransactionStart(fixture.transaction1)
220- val traceData = profiler.onTransactionFinish(fixture.transaction1)
221- assertNull(traceData )
227+ profiler.onTransactionFinish(fixture.transaction1)
228+ verify(fixture.hub, never()).captureProfile(any() )
222229 }
223230
224231 @Test
@@ -235,34 +242,8 @@ class AndroidTransactionProfilerTest {
235242 @Test
236243 fun `onTransactionFinish works only if previously started` () {
237244 val profiler = fixture.getSut(context)
238- val traceData = profiler.onTransactionFinish(fixture.transaction1)
239- assertNull(traceData)
240- }
241-
242- @Test
243- fun `onTransactionFinish returns timedOutData to the timed out transaction once, even after other transactions` () {
244- val profiler = fixture.getSut(context)
245-
246- val executorService = mock<ISentryExecutorService >()
247- val captor = argumentCaptor<Runnable >()
248- whenever(executorService.schedule(captor.capture(), any())).thenReturn(null )
249- whenever(fixture.options.executorService).thenReturn(executorService)
250- // Start and finish first transaction profiling
251- profiler.onTransactionStart(fixture.transaction1)
252-
253- // Set timed out data by calling the timeout scheduled job
254- captor.firstValue.run ()
255-
256- // Start and finish second transaction. Since profiler returned data, it means no other profiling is running
257- profiler.onTransactionStart(fixture.transaction2)
258- assertEquals(fixture.transaction2.eventId.toString(), profiler.onTransactionFinish(fixture.transaction2)!! .transactionId)
259-
260- // First transaction finishes: timed out data is returned
261- val traceData = profiler.onTransactionFinish(fixture.transaction1)
262- assertEquals(traceData!! .transactionId, fixture.transaction1.eventId.toString())
263-
264- // If first transaction is finished again, nothing is returned
265- assertNull(profiler.onTransactionFinish(fixture.transaction1))
245+ profiler.onTransactionFinish(fixture.transaction1)
246+ verify(fixture.hub, never()).captureProfile(any())
266247 }
267248
268249 @Test
@@ -281,9 +262,13 @@ class AndroidTransactionProfilerTest {
281262 captor.firstValue.run ()
282263
283264 // First transaction finishes: timed out data is returned
284- val traceData = profiler.onTransactionFinish(fixture.transaction1)
285- assertEquals(traceData!! .transactionId, fixture.transaction1.eventId.toString())
286- assertEquals(ProfilingTraceData .TRUNCATION_REASON_TIMEOUT , traceData.truncationReason)
265+ profiler.onTransactionFinish(fixture.transaction1)
266+ verify(fixture.hub).captureProfile(
267+ check {
268+ assertEquals(it.transactionId, fixture.transaction1.eventId.toString())
269+ assertEquals(ProfilingTraceData .TRUNCATION_REASON_TIMEOUT , it.truncationReason)
270+ }
271+ )
287272 }
288273
289274 @Test
@@ -292,11 +277,15 @@ class AndroidTransactionProfilerTest {
292277 profiler.onTransactionStart(fixture.transaction1)
293278 profiler.onTransactionStart(fixture.transaction2)
294279
295- var traceData = profiler.onTransactionFinish(fixture.transaction2)
296- assertNull(traceData )
280+ profiler.onTransactionFinish(fixture.transaction2)
281+ verify(fixture.hub, never()).captureProfile(any() )
297282
298- traceData = profiler.onTransactionFinish(fixture.transaction1)
299- assertEquals(fixture.transaction1.eventId.toString(), traceData!! .transactionId)
283+ profiler.onTransactionFinish(fixture.transaction1)
284+ verify(fixture.hub).captureProfile(
285+ check {
286+ assertEquals(it.transactionId, fixture.transaction1.eventId.toString())
287+ }
288+ )
300289 }
301290
302291 @Test
@@ -305,20 +294,26 @@ class AndroidTransactionProfilerTest {
305294 profiler.onTransactionStart(fixture.transaction1)
306295 profiler.onTransactionStart(fixture.transaction2)
307296
308- var traceData = profiler.onTransactionFinish(fixture.transaction1)
309- assertNull(traceData )
297+ profiler.onTransactionFinish(fixture.transaction1)
298+ verify(fixture.hub, never()).captureProfile(any() )
310299
311300 profiler.onTransactionStart(fixture.transaction3)
312- traceData = profiler.onTransactionFinish(fixture.transaction3)
313- assertNull(traceData)
314- traceData = profiler.onTransactionFinish(fixture.transaction2)
315- assertEquals(fixture.transaction2.eventId.toString(), traceData!! .transactionId)
316- val expectedTransactions = listOf (
317- fixture.transaction1.eventId.toString(),
318- fixture.transaction3.eventId.toString(),
319- fixture.transaction2.eventId.toString()
301+ profiler.onTransactionFinish(fixture.transaction3)
302+ verify(fixture.hub, never()).captureProfile(any())
303+
304+ profiler.onTransactionFinish(fixture.transaction2)
305+ verify(fixture.hub).captureProfile(
306+ check {
307+ val expectedTransactions = listOf (
308+ fixture.transaction1.eventId.toString(),
309+ fixture.transaction3.eventId.toString(),
310+ fixture.transaction2.eventId.toString()
311+ )
312+ assertEquals(it.transactionId, fixture.transaction2.eventId.toString())
313+
314+ assertTrue(it.transactions.map { it.id }.containsAll(expectedTransactions))
315+ assertTrue(expectedTransactions.containsAll(it.transactions.map { it.id }))
316+ }
320317 )
321- assertTrue(traceData.transactions.map { it.id }.containsAll(expectedTransactions))
322- assertTrue(expectedTransactions.containsAll(traceData.transactions.map { it.id }))
323318 }
324319}
0 commit comments