From fd6a520b978ba06cdd53150e863a08e4e83ee8de Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 11 Sep 2024 11:53:19 +0200 Subject: [PATCH 1/3] Add support for `feedback` envelope header item type --- .../main/java/io/sentry/SentryItemType.java | 3 +- .../SentryItemTypeSerializationTest.kt | 74 +++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 sentry/src/test/java/io/sentry/protocol/SentryItemTypeSerializationTest.kt diff --git a/sentry/src/main/java/io/sentry/SentryItemType.java b/sentry/src/main/java/io/sentry/SentryItemType.java index f37b972454..128b0888ba 100644 --- a/sentry/src/main/java/io/sentry/SentryItemType.java +++ b/sentry/src/main/java/io/sentry/SentryItemType.java @@ -21,6 +21,7 @@ public enum SentryItemType implements JsonSerializable { ReplayVideo("replay_video"), CheckIn("check_in"), Statsd("statsd"), + Feedback("feedback"), Unknown("__unknown__"); // DataCategory.Unknown private final String itemType; @@ -62,7 +63,7 @@ public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger writer.value(itemType); } - static final class Deserializer implements JsonDeserializer { + public static final class Deserializer implements JsonDeserializer { @Override public @NotNull SentryItemType deserialize( diff --git a/sentry/src/test/java/io/sentry/protocol/SentryItemTypeSerializationTest.kt b/sentry/src/test/java/io/sentry/protocol/SentryItemTypeSerializationTest.kt new file mode 100644 index 0000000000..c50a12b80d --- /dev/null +++ b/sentry/src/test/java/io/sentry/protocol/SentryItemTypeSerializationTest.kt @@ -0,0 +1,74 @@ +package io.sentry.protocol + +import io.sentry.ILogger +import io.sentry.JsonObjectReader +import io.sentry.JsonObjectWriter +import io.sentry.SentryItemType +import org.junit.Test +import org.mockito.kotlin.mock +import java.io.StringReader +import java.io.StringWriter +import kotlin.test.assertEquals + +class SentryItemTypeSerializationTest { + + class Fixture { + val logger = mock() + } + private val fixture = Fixture() + + @Test + fun serialize() { + assertEquals(serialize(SentryItemType.Session), json("session")) + assertEquals(serialize(SentryItemType.Event), json("event")) + assertEquals(serialize(SentryItemType.UserFeedback), json("user_report")) + assertEquals(serialize(SentryItemType.Attachment), json("attachment")) + assertEquals(serialize(SentryItemType.Transaction), json("transaction")) + assertEquals(serialize(SentryItemType.Profile), json("profile")) + assertEquals(serialize(SentryItemType.ClientReport), json("client_report")) + assertEquals(serialize(SentryItemType.ReplayEvent), json("replay_event")) + assertEquals(serialize(SentryItemType.ReplayRecording), json("replay_recording")) + assertEquals(serialize(SentryItemType.ReplayVideo), json("replay_video")) + assertEquals(serialize(SentryItemType.CheckIn), json("check_in")) + assertEquals(serialize(SentryItemType.Statsd), json("statsd")) + assertEquals(serialize(SentryItemType.Feedback), json("feedback")) + } + + @Test + fun deserialize() { + assertEquals(deserialize(json("session")), SentryItemType.Session) + assertEquals(deserialize(json("event")), SentryItemType.Event) + assertEquals(deserialize(json("user_report")), SentryItemType.UserFeedback) + assertEquals(deserialize(json("attachment")), SentryItemType.Attachment) + assertEquals(deserialize(json("transaction")), SentryItemType.Transaction) + assertEquals(deserialize(json("profile")), SentryItemType.Profile) + assertEquals(deserialize(json("client_report")), SentryItemType.ClientReport) + assertEquals(deserialize(json("replay_event")), SentryItemType.ReplayEvent) + assertEquals(deserialize(json("replay_recording")), SentryItemType.ReplayRecording) + assertEquals(deserialize(json("replay_video")), SentryItemType.ReplayVideo) + assertEquals(deserialize(json("check_in")), SentryItemType.CheckIn) + assertEquals(deserialize(json("statsd")), SentryItemType.Statsd) + assertEquals(deserialize(json("feedback")), SentryItemType.Feedback) + } + + private fun json(type: String): String { + return "{\"type\":\"${type}\"}" + } + + private fun serialize(src: SentryItemType): String { + val wrt = StringWriter() + val jsonWrt = JsonObjectWriter(wrt, 100) + jsonWrt.beginObject() + jsonWrt.name("type") + src.serialize(jsonWrt, fixture.logger) + jsonWrt.endObject() + return wrt.toString() + } + + private fun deserialize(json: String): SentryItemType { + val reader = JsonObjectReader(StringReader(json)) + reader.beginObject() + reader.nextName() + return SentryItemType.Deserializer().deserialize(reader, fixture.logger) + } +} From cc7c10e5ff88861d54fd08051009eba683287a38 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 11 Sep 2024 12:03:50 +0200 Subject: [PATCH 2/3] update api --- sentry/api/sentry.api | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index ceab2fc326..9530fb54ab 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -2247,6 +2247,7 @@ public final class io/sentry/SentryItemType : java/lang/Enum, io/sentry/JsonSeri public static final field CheckIn Lio/sentry/SentryItemType; public static final field ClientReport Lio/sentry/SentryItemType; public static final field Event Lio/sentry/SentryItemType; + public static final field Feedback Lio/sentry/SentryItemType; public static final field Profile Lio/sentry/SentryItemType; public static final field ReplayEvent Lio/sentry/SentryItemType; public static final field ReplayRecording Lio/sentry/SentryItemType; @@ -2264,6 +2265,12 @@ public final class io/sentry/SentryItemType : java/lang/Enum, io/sentry/JsonSeri public static fun values ()[Lio/sentry/SentryItemType; } +public final class io/sentry/SentryItemType$Deserializer : io/sentry/JsonDeserializer { + public fun ()V + public fun deserialize (Lio/sentry/ObjectReader;Lio/sentry/ILogger;)Lio/sentry/SentryItemType; + public synthetic fun deserialize (Lio/sentry/ObjectReader;Lio/sentry/ILogger;)Ljava/lang/Object; +} + public final class io/sentry/SentryLevel : java/lang/Enum, io/sentry/JsonSerializable { public static final field DEBUG Lio/sentry/SentryLevel; public static final field ERROR Lio/sentry/SentryLevel; From b1d2f789c79002f5bc02d093347b83efe1691580 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 11 Sep 2024 12:04:36 +0200 Subject: [PATCH 3/3] add cl entry --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbedaf37f7..dac0b142e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Features + +- Add support for `feedback` envelope header item type ([#3687](https://github.com/getsentry/sentry-java/pull/3687)) + ### Fixes - Avoid stopping appStartProfiler after application creation ([#3630](https://github.com/getsentry/sentry-java/pull/3630))