Skip to content

Commit

Permalink
Add tests for main hub cloning
Browse files Browse the repository at this point in the history
  • Loading branch information
adinauer committed Mar 1, 2023
1 parent ea3be7d commit e132c76
Showing 1 changed file with 103 additions and 0 deletions.
103 changes: 103 additions & 0 deletions sentry/src/test/java/io/sentry/SentryTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertNotNull
import kotlin.test.assertNull
import kotlin.test.assertTrue

class SentryTest {
Expand Down Expand Up @@ -241,6 +242,108 @@ class SentryTest {
assertFalse(hub is NoOpHub)
}

@Test
fun `main hub can be cloned and does not share scope with current hub`() {
// noop as not yet initialized, caches NoOpHub in ThreadLocal
Sentry.addBreadcrumb("breadcrumbNoOp")
Sentry.captureMessage("messageNoOp")

assertTrue(Sentry.getCurrentHub() is NoOpHub)

val capturedEvents = mutableListOf<SentryEvent>()

// init Sentry in another thread
val thread = Thread() {
Sentry.init {
it.dsn = dsn
it.isDebug = true
it.beforeSend = SentryOptions.BeforeSendCallback { event, hint ->
capturedEvents.add(event)
event
}
}
}
thread.start()
thread.join()

Sentry.addBreadcrumb("breadcrumbCurrent")

val hub = Sentry.getCurrentHub()
assertNotNull(hub)
assertFalse(hub is NoOpHub)

val newMainHubClone = Sentry.cloneMainHub()
newMainHubClone.addBreadcrumb("breadcrumbMainClone")

hub.captureMessage("messageCurrent")
newMainHubClone.captureMessage("messageMainClone")

assertEquals(2, capturedEvents.size)
val mainCloneEvent = capturedEvents.firstOrNull { it.message?.formatted == "messageMainClone" }
val currentHubEvent = capturedEvents.firstOrNull { it.message?.formatted == "messageCurrent" }

assertNotNull(mainCloneEvent)
assertNotNull(mainCloneEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbMainClone" })
assertNull(mainCloneEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbCurrent" })
assertNull(mainCloneEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbNoOp" })

assertNotNull(currentHubEvent)
assertNull(currentHubEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbMainClone" })
assertNotNull(currentHubEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbCurrent" })
assertNull(currentHubEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbNoOp" })
}

@Test
fun `main hub is not cloned in global hub mode and shares scope with current hub`() {
// noop as not yet initialized, caches NoOpHub in ThreadLocal
Sentry.addBreadcrumb("breadcrumbNoOp")
Sentry.captureMessage("messageNoOp")

assertTrue(Sentry.getCurrentHub() is NoOpHub)

val capturedEvents = mutableListOf<SentryEvent>()

// init Sentry in another thread
val thread = Thread() {
Sentry.init({
it.dsn = dsn
it.isDebug = true
it.beforeSend = SentryOptions.BeforeSendCallback { event, hint ->
capturedEvents.add(event)
event
}
}, true)
}
thread.start()
thread.join()

Sentry.addBreadcrumb("breadcrumbCurrent")

val hub = Sentry.getCurrentHub()
assertNotNull(hub)
assertFalse(hub is NoOpHub)

val newMainHubClone = Sentry.cloneMainHub()
newMainHubClone.addBreadcrumb("breadcrumbMainClone")

hub.captureMessage("messageCurrent")
newMainHubClone.captureMessage("messageMainClone")

assertEquals(2, capturedEvents.size)
val mainCloneEvent = capturedEvents.firstOrNull { it.message?.formatted == "messageMainClone" }
val currentHubEvent = capturedEvents.firstOrNull { it.message?.formatted == "messageCurrent" }

assertNotNull(mainCloneEvent)
assertNotNull(mainCloneEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbMainClone" })
assertNotNull(mainCloneEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbCurrent" })
assertNull(mainCloneEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbNoOp" })

assertNotNull(currentHubEvent)
assertNotNull(currentHubEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbMainClone" })
assertNotNull(currentHubEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbCurrent" })
assertNull(currentHubEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbNoOp" })
}

@Test
fun `when init is called and configure throws an exception then an error is logged`() {
val logger = mock<ILogger>()
Expand Down

0 comments on commit e132c76

Please sign in to comment.