From 57fc9d8388bad892ffdf6cd5e31ee7482125764d Mon Sep 17 00:00:00 2001 From: Kiran Ryali Date: Tue, 12 Feb 2013 15:40:04 -0800 Subject: [PATCH] Ensure messages are non-null Checks 1. error.message() 2. logMessage 3. 'No message' 2nd commit --- cherry.txt | 0 .../java/com/squareup/squash/SquashEntry.java | 19 ++++++++-- .../com/squareup/squash/SquashEntryTest.java | 35 +++++++++++++++++++ test.txt | 3 ++ 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 cherry.txt create mode 100644 test.txt diff --git a/cherry.txt b/cherry.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/squareup/squash/SquashEntry.java b/src/main/java/com/squareup/squash/SquashEntry.java index a7f5ad4..c3ce176 100644 --- a/src/main/java/com/squareup/squash/SquashEntry.java +++ b/src/main/java/com/squareup/squash/SquashEntry.java @@ -53,11 +53,11 @@ public class SquashEntry { final String message; final String log_message; - public SquashEntry(String client, String apiKey, String message, Throwable error, + public SquashEntry(String client, String apiKey, String logMessage, Throwable error, String appVersion, int versionCode, String buildSha, String deviceId, String endpoint, String userId, String environment) { this.client = client; - this.log_message = message; + this.log_message = logMessage; this.version = appVersion; this.revision = buildSha; this.build = "" + versionCode; @@ -68,9 +68,22 @@ public SquashEntry(String client, String apiKey, String message, Throwable error SquashBacktrace.populateNestedExceptions(parent_exceptions, error); this.ivars = SquashBacktrace.getIvars(error); this.class_name = error == null ? null : error.getClass().getName(); - this.message = error == null ? null : error.getMessage(); + this.message = createMessage(error, logMessage); this.api_key = apiKey; this.user_id = userId; this.occurred_at = DATE_FORMAT_THREAD_LOCAL.get().format(new Date()); } + + // Squash requires a non-empty message field. + private static String createMessage(Throwable error, String logMessage) { + String message; + if (error != null && error.getMessage() != null) { + message = error.getMessage(); + } else if (logMessage != null) { + message = logMessage; + } else { + message = "No message"; + } + return message; + } } diff --git a/src/test/java/com/squareup/squash/SquashEntryTest.java b/src/test/java/com/squareup/squash/SquashEntryTest.java index 76c9738..871457a 100644 --- a/src/test/java/com/squareup/squash/SquashEntryTest.java +++ b/src/test/java/com/squareup/squash/SquashEntryTest.java @@ -72,6 +72,41 @@ private SquashEntry serializeAndDeserialize(SquashEntry logEntry) throws IOExcep assertThat(deserialized.class_name).isEqualTo(exception.getClass().getName()); } + @Test public void testExceptionWithNoMessage() throws Exception { + final Throwable exception = mock(Throwable.class); + + StackTraceElement s0 = new StackTraceElement("com.jake", "CantProgram", + "core-android/src/com/jake/Brain.java", 50); + StackTraceElement s1 = new StackTraceElement("com.jake", "IsDrunk", + "core-android/src/com/jake/Status.java", 510); + StackTraceElement[] stackTrace = { s0, s1 }; + + when(exception.getMessage()).thenReturn(null); + when(exception.getStackTrace()).thenReturn(stackTrace); + + String logMessage = "Jake can't program"; + final SquashEntry logEntry = factory.create(logMessage, exception); + SquashEntry deserialized = serializeAndDeserialize(logEntry); + assertThat(deserialized.message).isEqualTo(logMessage); + } + + @Test public void testExceptionWithNoMessageOrLogMessage() throws Exception { + final Throwable exception = mock(Throwable.class); + + StackTraceElement s0 = new StackTraceElement("com.jake", "CantProgram", + "core-android/src/com/jake/Brain.java", 50); + StackTraceElement s1 = new StackTraceElement("com.jake", "IsDrunk", + "core-android/src/com/jake/Status.java", 510); + StackTraceElement[] stackTrace = { s0, s1 }; + + when(exception.getMessage()).thenReturn(null); + when(exception.getStackTrace()).thenReturn(stackTrace); + + final SquashEntry logEntry = factory.create(null, exception); + SquashEntry deserialized = serializeAndDeserialize(logEntry); + assertThat(deserialized.message).isEqualTo("No message"); + } + private void assertBacktracesMatch(StackTraceElement[] myLittleStackTrace, List stackElements) { for (int i = 0, stackElementsSize = stackElements.size(); i < stackElementsSize; i++) { diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..9b5be4b --- /dev/null +++ b/test.txt @@ -0,0 +1,3 @@ +this is our 3rd class on git +git is version control tool +