Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions sentry/src/main/java/io/sentry/MainEventProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import java.io.Closeable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.ApiStatus;
Expand Down Expand Up @@ -191,7 +190,7 @@ private void setSdk(final @NotNull SentryBaseEvent event) {

private void setTags(final @NotNull SentryBaseEvent event) {
if (event.getTags() == null) {
event.setTags(new HashMap<>(options.getTags()));
event.setTags(options.getTags());
} else {
for (Map.Entry<String, String> item : options.getTags().entrySet()) {
if (!event.getTags().containsKey(item.getKey())) {
Expand Down
9 changes: 4 additions & 5 deletions sentry/src/main/java/io/sentry/SentryClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.ApiStatus;
Expand Down Expand Up @@ -1423,7 +1422,7 @@ public void captureBatchedMetricsEvents(final @NotNull SentryMetricsEvents metri
event.setUser(scope.getUser());
}
if (event.getTags() == null) {
event.setTags(new HashMap<>(scope.getTags()));
event.setTags(scope.getTags());
} else {
for (Map.Entry<String, String> item : scope.getTags().entrySet()) {
if (!event.getTags().containsKey(item.getKey())) {
Expand Down Expand Up @@ -1481,7 +1480,7 @@ public void captureBatchedMetricsEvents(final @NotNull SentryMetricsEvents metri
replayEvent.setUser(scope.getUser());
}
if (replayEvent.getTags() == null) {
replayEvent.setTags(new HashMap<>(scope.getTags()));
replayEvent.setTags(scope.getTags());
} else {
for (Map.Entry<String, String> item : scope.getTags().entrySet()) {
if (!replayEvent.getTags().containsKey(item.getKey())) {
Expand Down Expand Up @@ -1521,7 +1520,7 @@ public void captureBatchedMetricsEvents(final @NotNull SentryMetricsEvents metri
sentryBaseEvent.setUser(scope.getUser());
}
if (sentryBaseEvent.getTags() == null) {
sentryBaseEvent.setTags(new HashMap<>(scope.getTags()));
sentryBaseEvent.setTags(scope.getTags());
} else {
for (Map.Entry<String, String> item : scope.getTags().entrySet()) {
if (!sentryBaseEvent.getTags().containsKey(item.getKey())) {
Expand All @@ -1535,7 +1534,7 @@ public void captureBatchedMetricsEvents(final @NotNull SentryMetricsEvents metri
sortBreadcrumbsByDate(sentryBaseEvent, scope.getBreadcrumbs());
}
if (sentryBaseEvent.getExtras() == null) {
sentryBaseEvent.setExtras(new HashMap<>(scope.getExtras()));
sentryBaseEvent.setExtras(scope.getExtras());
} else {
for (Map.Entry<String, Object> item : scope.getExtras().entrySet()) {
if (!sentryBaseEvent.getExtras().containsKey(item.getKey())) {
Expand Down
13 changes: 13 additions & 0 deletions sentry/src/test/java/io/sentry/MainEventProcessorTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,19 @@ class MainEventProcessorTest {
}
}

@Test
fun `options tags are copied when applied to event`() {
val sut = fixture.getSut(tags = mapOf("tag1" to "value1"))
val event = SentryEvent()

sut.process(event, Hint())
val eventTags = event.tags!!

fixture.sentryOptions.setTag("tag2", "value2")

assertFalse(eventTags.containsKey("tag2"))
}

@Test
fun `when event has a tag set with the same name as SentryOptions tags, the tag value from the event is retained`() {
val sut = fixture.getSut(tags = mapOf("tag1" to "value1", "tag2" to "value2"))
Expand Down
18 changes: 18 additions & 0 deletions sentry/src/test/java/io/sentry/SentryClientTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,24 @@ class SentryClientTest {
assertNotNull(event.request) { assertEquals("post", it.method) }
}

@Test
fun `when captureEvent applies scope tags and extras, event map containers are copied`() {
val event = SentryEvent()
val scope = createScope()

val sut = fixture.getSut()

sut.captureEvent(event, scope)
val eventTags = event.tags!!
val eventExtras = event.extras!!

scope.setTag("newTag", "newValue")
scope.setExtra("newExtra", "newValue")

assertFalse(eventTags.containsKey("newTag"))
assertFalse(eventExtras.containsKey("newExtra"))
}

@Test
fun `when breadcrumbs are not empty, sort them out by date`() {
val b1 = Breadcrumb(DateUtils.getDateTime("2020-03-27T08:52:58.001Z"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import io.sentry.SentryBaseEvent
import io.sentry.SentryIntegrationPackageStorage
import io.sentry.vendor.gson.stream.JsonToken
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import org.junit.After
import org.junit.Before
import org.junit.Test
Expand Down Expand Up @@ -102,4 +103,26 @@ class SentryBaseEventSerializationTest {

assertEquals(expectedJson, actualJson)
}

@Test
fun `setTags copies source map`() {
val source = mutableMapOf("a" to "1")
val sut = Sut()

sut.tags = source
source["b"] = "2"

assertFalse(sut.tags!!.containsKey("b"))
}

@Test
fun `setExtras copies source map`() {
val source = mutableMapOf<String, Any>("a" to "1")
val sut = Sut()

sut.setExtras(source)
source["b"] = "2"

assertFalse(sut.extras!!.containsKey("b"))
}
}
Loading