From f665b102478446d1a8ddc5357151db99f4dbf2a2 Mon Sep 17 00:00:00 2001 From: Tushar Badgu Date: Sat, 30 Jan 2021 13:23:13 +0530 Subject: [PATCH] Add DEFAULT to StackTrace Policy for scenarios when events have stack traces disabled by default Signed-off-by: Tushar Badgu --- .../java/dev/morling/jfrunit/EnableEvent.java | 4 +- .../java/dev/morling/jfrunit/JfrUnitTest.java | 48 +++++++++++++++++-- .../StackTraceDisabledSampleEvent.java | 15 ++++++ 3 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 src/test/java/dev/morling/jfrunit/StackTraceDisabledSampleEvent.java diff --git a/src/main/java/dev/morling/jfrunit/EnableEvent.java b/src/main/java/dev/morling/jfrunit/EnableEvent.java index 0ed0bd6..d4e5eb0 100644 --- a/src/main/java/dev/morling/jfrunit/EnableEvent.java +++ b/src/main/java/dev/morling/jfrunit/EnableEvent.java @@ -33,12 +33,12 @@ */ String value() default ""; - StacktracePolicy stackTrace() default StacktracePolicy.INCLUDED; + StacktracePolicy stackTrace() default StacktracePolicy.DEFAULT; int threshold() default -1; enum StacktracePolicy { - INCLUDED, EXCLUDED + DEFAULT, INCLUDED, EXCLUDED } @Retention(RetentionPolicy.RUNTIME) diff --git a/src/test/java/dev/morling/jfrunit/JfrUnitTest.java b/src/test/java/dev/morling/jfrunit/JfrUnitTest.java index b3aa418..7f05d99 100644 --- a/src/test/java/dev/morling/jfrunit/JfrUnitTest.java +++ b/src/test/java/dev/morling/jfrunit/JfrUnitTest.java @@ -15,6 +15,7 @@ */ package dev.morling.jfrunit; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import java.time.Duration; @@ -31,6 +32,7 @@ public class JfrUnitTest { @Test @EnableEvent("jdk.GarbageCollection") @EnableEvent("jdk.ThreadSleep") + @DisplayName("Should have Gc and Sleep events recorded when explicitly enabled individually with @EnableEvent") public void shouldHaveGcAndSleepEvents() throws Exception { System.gc(); Thread.sleep(1000); @@ -48,6 +50,7 @@ public void shouldHaveGcAndSleepEvents() throws Exception { @Test @EnableConfiguration("profile") + @DisplayName("Should have Gc and Sleep events recorded when enabled with configuration 'profile'") public void shouldHaveGcAndSleepEventsWithDefaultConfiguration() throws Exception { System.gc(); Thread.sleep(1000); @@ -73,7 +76,8 @@ public void shouldHaveGcAndSleepEventsWithDefaultConfiguration() throws Exceptio @Test @EnableEvent("jdk.ThreadSleep") - public void shouldHaveStackTraceCapturedWithNoStackTracePolicyDefined() throws Exception { + @DisplayName("Should have StackTrace captured for StackTrace-Enabled Events by default with StackTrace policy Default") + public void captureTracesWhenEnabledWithPolicyDefault() throws Exception { Thread.sleep(1000); jfrEvents.awaitEvents(); @@ -81,9 +85,22 @@ public void shouldHaveStackTraceCapturedWithNoStackTracePolicyDefined() throws E assertThat(jfrEvents).contains(event("jdk.ThreadSleep").has("stackTrace")); } + @Test + @EnableEvent("jfrunit.test.StackTraceDisabledSampleEvent") + @DisplayName("Should not have StackTrace captured for StackTrace-Disabled Events by default with StackTrace policy Default") + public void doNotCaptureTracesWhenDisabledWithPolicyDefault() { + StackTraceDisabledSampleEvent event = new StackTraceDisabledSampleEvent(); + event.commit(); + + jfrEvents.awaitEvents(); + + assertThat(jfrEvents).contains(event("jfrunit.test.StackTraceDisabledSampleEvent").hasNot("stackTrace")); + } + @Test @EnableEvent(value = "jdk.ThreadSleep", stackTrace = EnableEvent.StacktracePolicy.INCLUDED) - public void shouldHaveStackTraceCapturedWithStackTracePolicyIncluded() throws Exception { + @DisplayName("Should have StackTrace captured irrespective of Event StackTrace Configuration(Enabled) with StackTrace policy Included") + public void captureTraceWhenEnabledWithStackTracePolicyIncluded() throws Exception { Thread.sleep(1000); jfrEvents.awaitEvents(); @@ -91,13 +108,38 @@ public void shouldHaveStackTraceCapturedWithStackTracePolicyIncluded() throws Ex assertThat(jfrEvents).contains(event("jdk.ThreadSleep").has("stackTrace")); } + @Test + @EnableEvent(value = "jfrunit.test.StackTraceDisabledSampleEvent", stackTrace = EnableEvent.StacktracePolicy.INCLUDED) + @DisplayName("Should have StackTrace captured irrespective of Event StackTrace Configuration(Disabled) with StackTrace policy Included") + public void captureTraceWhenDisabledWithStackTracePolicyIncluded() { + StackTraceDisabledSampleEvent event = new StackTraceDisabledSampleEvent(); + event.commit(); + + jfrEvents.awaitEvents(); + + assertThat(jfrEvents).contains(event("jfrunit.test.StackTraceDisabledSampleEvent").has("stackTrace")); + } + @Test @EnableEvent(value = "jdk.ThreadSleep", stackTrace = EnableEvent.StacktracePolicy.EXCLUDED) - public void shouldNotHaveStackTraceCapturedWithStackTracePolicyExcluded() throws Exception { + @DisplayName("Should not have StackTrace captured irrespective of Event StackTrace Configuration(Enabled) with StackTrace policy Excluded") + public void doNotCaptureTraceWhenEnabledWithStackTracePolicyExcluded() throws Exception { Thread.sleep(1000); jfrEvents.awaitEvents(); assertThat(jfrEvents).contains(event("jdk.ThreadSleep").hasNot("stackTrace")); } + + @Test + @EnableEvent(value = "jfrunit.test.StackTraceDisabledSampleEvent", stackTrace = EnableEvent.StacktracePolicy.EXCLUDED) + @DisplayName("Should not have StackTrace captured irrespective of Event StackTrace Configuration(Disabled) with StackTrace policy Excluded") + public void doNotCaptureTraceWhenDisabledWithStackTracePolicyExcluded() { + StackTraceDisabledSampleEvent event = new StackTraceDisabledSampleEvent(); + event.commit(); + + jfrEvents.awaitEvents(); + + assertThat(jfrEvents).contains(event("jfrunit.test.StackTraceDisabledSampleEvent").hasNot("stackTrace")); + } } diff --git a/src/test/java/dev/morling/jfrunit/StackTraceDisabledSampleEvent.java b/src/test/java/dev/morling/jfrunit/StackTraceDisabledSampleEvent.java new file mode 100644 index 0000000..a82d035 --- /dev/null +++ b/src/test/java/dev/morling/jfrunit/StackTraceDisabledSampleEvent.java @@ -0,0 +1,15 @@ +package dev.morling.jfrunit; + +import jdk.jfr.Category; +import jdk.jfr.Event; +import jdk.jfr.Name; +import jdk.jfr.StackTrace; + +@Name(StackTraceDisabledSampleEvent.EVENT_NAME) +@Category("JfrUnit") +@StackTrace(false) +public class StackTraceDisabledSampleEvent extends Event { + + public static final String EVENT_NAME = "jfrunit.test.StackTraceDisabledSampleEvent"; + +}