Skip to content

Commit 6874067

Browse files
authored
fix: SentryClient overrides event with default data (#751)
Resolves #736
1 parent 2a3267e commit 6874067

File tree

2 files changed

+147
-7
lines changed

2 files changed

+147
-7
lines changed

sentry/src/main/java/io/sentry/SentryClient.java

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,32 +148,53 @@ public void sendEvent(Event event) {
148148
* @param eventBuilder {@link EventBuilder} to send to Sentry.
149149
*/
150150
public void sendEvent(EventBuilder eventBuilder) {
151-
if (!Util.isNullOrEmpty(release)) {
151+
Event event = buildEvent(eventBuilder);
152+
sendEvent(event);
153+
}
154+
155+
/**
156+
* Adds the SentryClient data into the builder without overriding existent data and builds the event.
157+
* @param eventBuilder The event builder to potentially modify and to build the event.
158+
* @return The event.
159+
*/
160+
Event buildEvent(EventBuilder eventBuilder) {
161+
Event workingEvent = eventBuilder.getEvent();
162+
163+
if (!Util.isNullOrEmpty(release) && workingEvent.getRelease() == null) {
152164
eventBuilder.withRelease(release.trim());
153165
if (!Util.isNullOrEmpty(dist)) {
154166
eventBuilder.withDist(dist.trim());
155167
}
156168
}
157169

158-
if (!Util.isNullOrEmpty(environment)) {
170+
if (!Util.isNullOrEmpty(environment) && workingEvent.getEnvironment() == null) {
159171
eventBuilder.withEnvironment(environment.trim());
160172
}
161173

162-
if (!Util.isNullOrEmpty(serverName)) {
174+
if (!Util.isNullOrEmpty(serverName) && workingEvent.getServerName() == null) {
163175
eventBuilder.withServerName(serverName.trim());
164176
}
165177

166178
for (Map.Entry<String, String> tagEntry : tags.entrySet()) {
167-
eventBuilder.withTag(tagEntry.getKey(), tagEntry.getValue());
179+
Map<String, String> workingTags = workingEvent.getTags();
180+
String currentValue = workingTags.put(tagEntry.getKey(), tagEntry.getValue());
181+
// Default tags should not override event-specific tags:
182+
if (currentValue != null) {
183+
workingTags.put(tagEntry.getKey(), currentValue);
184+
}
168185
}
169186

170187
for (Map.Entry<String, Object> extraEntry : extra.entrySet()) {
171-
eventBuilder.withExtra(extraEntry.getKey(), extraEntry.getValue());
188+
Map<String, Object> workingExtra = workingEvent.getExtra();
189+
Object currentValue = workingExtra.put(extraEntry.getKey(), extraEntry.getValue());
190+
// Default extra should not override event-specific extra:
191+
if (currentValue != null) {
192+
workingExtra.put(extraEntry.getKey(), currentValue);
193+
}
172194
}
173195

174196
runBuilderHelpers(eventBuilder);
175-
Event event = eventBuilder.build();
176-
sendEvent(event);
197+
return eventBuilder.build();
177198
}
178199

179200
/**

sentry/src/test/java/io/sentry/SentryClientTest.java

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,4 +233,123 @@ public boolean shouldSend(Event event) {
233233
assertThat(called.get(), is(true));
234234
}};
235235
}
236+
237+
@Test
238+
public void testDefaultTagDoesntOverrideEvent() {
239+
final String key = "key";
240+
final String expectedValue = "expected";
241+
sentryClient.addTag(key, "default");
242+
EventBuilder eventBuilder = new EventBuilder();
243+
eventBuilder.withTag(key, expectedValue);
244+
245+
Event event = sentryClient.buildEvent(eventBuilder);
246+
247+
assertThat(event.getTags().get(key), equalTo(expectedValue));
248+
}
249+
250+
@Test
251+
public void testDefaultTagSetToEvent() {
252+
final String key = "key";
253+
final String expectedValue = "expected";
254+
sentryClient.addTag(key, expectedValue);
255+
EventBuilder eventBuilder = new EventBuilder();
256+
257+
Event event = sentryClient.buildEvent(eventBuilder);
258+
259+
assertThat(event.getTags().get(key), equalTo(expectedValue));
260+
}
261+
262+
@Test
263+
public void testDefaultExtraDoesntOverrideEvent() {
264+
final String key = "key";
265+
final Object expectedValue = "expected";
266+
sentryClient.addExtra(key, (Object)"default");
267+
EventBuilder eventBuilder = new EventBuilder();
268+
eventBuilder.withExtra(key, expectedValue);
269+
270+
Event event = sentryClient.buildEvent(eventBuilder);
271+
272+
assertThat(event.getExtra().get(key), equalTo(expectedValue));
273+
}
274+
275+
@Test
276+
public void testDefaultExtraSetToEvent() {
277+
final String key = "key";
278+
final Object expectedValue = "expected";
279+
sentryClient.addExtra(key, expectedValue);
280+
EventBuilder eventBuilder = new EventBuilder();
281+
282+
Event event = sentryClient.buildEvent(eventBuilder);
283+
284+
assertThat(event.getExtra().get(key), equalTo(expectedValue));
285+
}
286+
287+
@Test
288+
public void testDefaultReleaseDoesntOverrideEvent() {
289+
final String expectedValue = "release";
290+
sentryClient.setRelease("default");
291+
EventBuilder eventBuilder = new EventBuilder();
292+
eventBuilder.withRelease(expectedValue);
293+
294+
Event event = sentryClient.buildEvent(eventBuilder);
295+
296+
assertThat(event.getRelease(), equalTo(expectedValue));
297+
}
298+
299+
@Test
300+
public void testDefaultReleaseSetToEvent() {
301+
final String expectedValue = "release";
302+
sentryClient.setRelease(expectedValue);
303+
EventBuilder eventBuilder = new EventBuilder();
304+
305+
Event event = sentryClient.buildEvent(eventBuilder);
306+
307+
assertThat(event.getRelease(), equalTo(expectedValue));
308+
}
309+
310+
@Test
311+
public void testDefaultEnvironmentDoesntOverrideEvent() {
312+
final String expectedValue = "env";
313+
sentryClient.setEnvironment("default");
314+
EventBuilder eventBuilder = new EventBuilder();
315+
eventBuilder.withEnvironment(expectedValue);
316+
317+
Event event = sentryClient.buildEvent(eventBuilder);
318+
319+
assertThat(event.getEnvironment(), equalTo(expectedValue));
320+
}
321+
322+
@Test
323+
public void testDefaultEnvironmentSetToEvent() {
324+
final String expectedValue = "env";
325+
sentryClient.setEnvironment(expectedValue);
326+
EventBuilder eventBuilder = new EventBuilder();
327+
328+
Event event = sentryClient.buildEvent(eventBuilder);
329+
330+
assertThat(event.getEnvironment(), equalTo(expectedValue));
331+
}
332+
333+
@Test
334+
public void testDefaultServerNameDoesntOverrideEvent() {
335+
final String expectedValue = "srv";
336+
sentryClient.setServerName("default");
337+
EventBuilder eventBuilder = new EventBuilder();
338+
eventBuilder.withServerName(expectedValue);
339+
340+
Event event = sentryClient.buildEvent(eventBuilder);
341+
342+
assertThat(event.getServerName(), equalTo(expectedValue));
343+
}
344+
345+
@Test
346+
public void testDefaultServerNameSetToEvent() {
347+
final String expectedValue = "srv";
348+
sentryClient.setServerName(expectedValue);
349+
EventBuilder eventBuilder = new EventBuilder();
350+
351+
Event event = sentryClient.buildEvent(eventBuilder);
352+
353+
assertThat(event.getServerName(), equalTo(expectedValue));
354+
}
236355
}

0 commit comments

Comments
 (0)