From f6e3fa02354e6f29a8eb96d1ef73943a63ffe5d6 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Tue, 20 Jul 2021 11:13:15 +0200 Subject: [PATCH 1/2] Fix: Ser/Deser of the UserFeedback from cached envelope --- CHANGELOG.md | 1 + .../SentryEnvelopeItemHeaderAdapter.java | 16 +++++++++-- .../test/java/io/sentry/SentryEnvelopeTest.kt | 27 ++++++++++++++++--- .../src/test/resources/envelope-feedback.txt | 3 +++ 4 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 sentry/src/test/resources/envelope-feedback.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 7db5ce902b..4b1461b423 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased * Fix: set min sdk version of sentry-android-fragment to API 14 (#1608) +* Fix: Ser/Deser of the UserFeedback from cached envelope ## 5.1.0-beta.5 diff --git a/sentry/src/main/java/io/sentry/SentryEnvelopeItemHeaderAdapter.java b/sentry/src/main/java/io/sentry/SentryEnvelopeItemHeaderAdapter.java index 89d1e28727..32518b494a 100644 --- a/sentry/src/main/java/io/sentry/SentryEnvelopeItemHeaderAdapter.java +++ b/sentry/src/main/java/io/sentry/SentryEnvelopeItemHeaderAdapter.java @@ -70,9 +70,21 @@ public void write(JsonWriter writer, SentryEnvelopeItemHeader value) throws IOEx break; case "type": try { - final String nextString = StringUtils.capitalize(reader.nextString()); + String nextString = reader.nextString(); + if (nextString != null) { - type = SentryItemType.valueOf(nextString); + // special case the String 'user_report since the enum is called UserFeedback + // instead of UserReport, this is gonna be fixed when we move away from reflection. + if (nextString.equalsIgnoreCase("user_report")) { + type = SentryItemType.valueOf("UserFeedback"); + } else { + final String capitalizedString = StringUtils.capitalize(nextString); + + // NPE check because of uber:nullaway + if (capitalizedString != null) { + type = SentryItemType.valueOf(capitalizedString); + } + } } } catch (IllegalArgumentException ignored) { // invalid type diff --git a/sentry/src/test/java/io/sentry/SentryEnvelopeTest.kt b/sentry/src/test/java/io/sentry/SentryEnvelopeTest.kt index 350286c0f1..9573e20574 100644 --- a/sentry/src/test/java/io/sentry/SentryEnvelopeTest.kt +++ b/sentry/src/test/java/io/sentry/SentryEnvelopeTest.kt @@ -14,10 +14,8 @@ class SentryEnvelopeTest { @Test fun `deserialize sample envelope with event and two attachments`() { - val envelopeReader = EnvelopeReader() - val testFile = this::class.java.classLoader.getResource("envelope-event-attachment.txt") - val stream = testFile!!.openStream() - val envelope = envelopeReader.read(stream) + val envelope = readEnvelope("envelope-event-attachment.txt") + assertNotNull(envelope) assertEquals("9ec79c33ec9942ab8353589fcb2e04dc", envelope.header.eventId.toString()) assertEquals(3, envelope.items.count()) @@ -137,4 +135,25 @@ abcdefghij""".toInputStream() assertEquals(10, secondItem.header.length) assertEquals(10, secondItem.data.size) } + + @Test + fun `deserializes an user feedback`() { + val envelope = readEnvelope("envelope-feedback.txt") + + assertNotNull(envelope) + assertEquals("bdd63725a2b84c1eabd761106e17d390", envelope.header.eventId.toString()) + assertEquals(1, envelope.items.count()) + val firstItem = envelope.items.elementAt(0) + assertEquals(SentryItemType.UserFeedback, firstItem.header.type) + assertEquals("application/json", firstItem.header.contentType) + assertEquals(103, firstItem.header.length) + assertEquals(103, firstItem.data.size) + } + + private fun readEnvelope(fileName: String): SentryEnvelope? { + val envelopeReader = EnvelopeReader() + val testFile = this::class.java.classLoader.getResource(fileName) + val stream = testFile!!.openStream() + return envelopeReader.read(stream) + } } diff --git a/sentry/src/test/resources/envelope-feedback.txt b/sentry/src/test/resources/envelope-feedback.txt new file mode 100644 index 0000000000..2120266986 --- /dev/null +++ b/sentry/src/test/resources/envelope-feedback.txt @@ -0,0 +1,3 @@ +{"event_id":"bdd63725a2b84c1eabd761106e17d390","sdk":{"name":"sentry.dart.flutter","version":"6.0.0-beta.3","packages":[{"name":"pub:sentry","version":"6.0.0-beta.3"},{"name":"pub:sentry_flutter","version":"6.0.0-beta.3"}],"integrations":["isolateErrorIntegration","runZonedGuardedIntegration","widgetsFlutterBindingIntegration","flutterErrorIntegration","widgetsBindingIntegration","nativeSdkIntegration","loadAndroidImageListIntegration","loadReleaseIntegration"]}} +{"content_type":"application/json","type":"user_report","length":103} +{"event_id":"bdd63725a2b84c1eabd761106e17d390","name":"jonas","email":"a@b.com","comments":"bad stuff"} From 438cdc2e0f8b665b81280328d0ee961c465cd2b9 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto <5731772+marandaneto@users.noreply.github.com> Date: Tue, 20 Jul 2021 11:14:00 +0200 Subject: [PATCH 2/2] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b1461b423..1a6641e126 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased * Fix: set min sdk version of sentry-android-fragment to API 14 (#1608) -* Fix: Ser/Deser of the UserFeedback from cached envelope +* Fix: Ser/Deser of the UserFeedback from cached envelope (#1611) ## 5.1.0-beta.5