Skip to content

Commit 03b720e

Browse files
Copilottrask
andcommitted
Fix exception message handling to prevent empty message field
Co-authored-by: trask <[email protected]>
1 parent 38f3fff commit 03b720e

File tree

4 files changed

+95
-68
lines changed

4 files changed

+95
-68
lines changed

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/classicsdk/TelemetryUtil.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ private static ExceptionDetailBuilder createWithStackInfo(
6161
if (Strings.isNullOrEmpty(exceptionMessage)) {
6262
exceptionMessage = exception.getClass().getName();
6363
}
64+
65+
// Defensive check to ensure the message is never null or empty
66+
if (Strings.isNullOrEmpty(exceptionMessage)) {
67+
exceptionMessage = "Unknown Exception";
68+
}
69+
6470
exceptionDetails.setMessage(exceptionMessage);
6571

6672
if (parentExceptionDetails != null) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.microsoft.applicationinsights.agent.internal.classicsdk;
5+
6+
import com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.Strings;
7+
import org.junit.jupiter.api.Test;
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
public class ExceptionMessageBehaviorTest {
11+
12+
@Test
13+
public void testNullPointerExceptionMessageBehavior() {
14+
// Test the exact scenario from the problem statement
15+
NullPointerException exception = new NullPointerException();
16+
17+
// Check the message
18+
String message = exception.getMessage();
19+
assertThat(message).isNull();
20+
21+
// Apply the TelemetryUtil logic
22+
String exceptionMessage = message;
23+
if (Strings.isNullOrEmpty(exceptionMessage)) {
24+
exceptionMessage = exception.getClass().getName();
25+
}
26+
27+
// The final message should be the class name
28+
assertThat(exceptionMessage).isEqualTo("java.lang.NullPointerException");
29+
assertThat(exceptionMessage).isNotEmpty();
30+
assertThat(exceptionMessage).isNotNull();
31+
}
32+
33+
@Test
34+
public void testNullPointerExceptionWithEmptyMessage() {
35+
// Test the scenario with empty string
36+
NullPointerException exception = new NullPointerException("");
37+
38+
// Check the message
39+
String message = exception.getMessage();
40+
assertThat(message).isEqualTo("");
41+
42+
// Apply the TelemetryUtil logic
43+
String exceptionMessage = message;
44+
if (Strings.isNullOrEmpty(exceptionMessage)) {
45+
exceptionMessage = exception.getClass().getName();
46+
}
47+
48+
// The final message should be the class name
49+
assertThat(exceptionMessage).isEqualTo("java.lang.NullPointerException");
50+
assertThat(exceptionMessage).isNotEmpty();
51+
assertThat(exceptionMessage).isNotNull();
52+
}
53+
54+
@Test
55+
public void testRuntimeExceptionMessageBehavior() {
56+
// Test with RuntimeException
57+
RuntimeException exception = new RuntimeException();
58+
59+
// Check the message
60+
String message = exception.getMessage();
61+
assertThat(message).isNull();
62+
63+
// Apply the TelemetryUtil logic
64+
String exceptionMessage = message;
65+
if (Strings.isNullOrEmpty(exceptionMessage)) {
66+
exceptionMessage = exception.getClass().getName();
67+
}
68+
69+
// The final message should be the class name
70+
assertThat(exceptionMessage).isEqualTo("java.lang.RuntimeException");
71+
assertThat(exceptionMessage).isNotEmpty();
72+
assertThat(exceptionMessage).isNotNull();
73+
}
74+
75+
@Test
76+
public void testStringIsNullOrEmptyBehavior() {
77+
// Test the Strings.isNullOrEmpty behavior with various inputs
78+
assertThat(Strings.isNullOrEmpty(null)).isTrue();
79+
assertThat(Strings.isNullOrEmpty("")).isTrue();
80+
assertThat(Strings.isNullOrEmpty(" ")).isFalse(); // Whitespace is not empty
81+
assertThat(Strings.isNullOrEmpty("test")).isFalse();
82+
}
83+
}

agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/classicsdk/ExceptionTelemetryBuilderTest.java

Lines changed: 0 additions & 67 deletions
This file was deleted.

agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/classicsdk/TelemetryUtilTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,17 @@ public void testExceptionMessageHandling() {
5757
String testMessage = testMessages[i];
5858
String expectedResult = expectedResults[i];
5959

60-
// Simulate TelemetryUtil logic
60+
// Simulate TelemetryUtil logic with defensive check
6161
String exceptionMessage = testMessage;
6262
if (Strings.isNullOrEmpty(exceptionMessage)) {
6363
exceptionMessage = "java.lang.NullPointerException";
6464
}
6565

66+
// Defensive check to ensure the message is never null or empty
67+
if (Strings.isNullOrEmpty(exceptionMessage)) {
68+
exceptionMessage = "Unknown Exception";
69+
}
70+
6671
assertThat(exceptionMessage).isEqualTo(expectedResult);
6772
}
6873
}

0 commit comments

Comments
 (0)