2626package com .oracle .svm .test .jfr ;
2727
2828import static org .junit .Assert .assertEquals ;
29+ import static org .junit .Assert .assertFalse ;
30+ import static org .junit .Assert .assertNotNull ;
31+ import static org .junit .Assert .assertTrue ;
2932
33+ import java .util .HashSet ;
3034import java .util .List ;
35+ import java .util .Set ;
3136
37+ import jdk .jfr .consumer .RecordedThread ;
38+ import org .junit .Assert ;
3239import org .junit .Test ;
3340
3441import com .oracle .svm .test .jfr .events .StackTraceEvent ;
3542
3643import jdk .jfr .Recording ;
3744import jdk .jfr .consumer .RecordedEvent ;
45+ import jdk .jfr .consumer .RecordedFrame ;
46+ import jdk .jfr .consumer .RecordedMethod ;
47+ import jdk .jfr .consumer .RecordedStackTrace ;
3848
3949/**
4050 * Test if event ({@link StackTraceEvent}) with stacktrace payload is working.
4151 */
4252public class TestStackTraceEvent extends JfrRecordingTest {
53+
54+ private static final JfrSeenMethod junitTest = new JfrSeenMethod ("test" , "()V" , 1 );
55+ private static final JfrSeenMethod svmJunitMain = new JfrSeenMethod ("main" , "([Ljava/lang/String;)V" , 9 );
56+ private static final JfrSeenMethod javaMainRun = new JfrSeenMethod ("doRun" , "(ILorg/graalvm/nativeimage/c/type/CCharPointerPointer;)I" , 10 );
57+
4358 @ Test
4459 public void test () throws Throwable {
4560 String [] events = new String []{StackTraceEvent .class .getName ()};
@@ -57,5 +72,42 @@ public void test() throws Throwable {
5772
5873 private static void validateEvents (List <RecordedEvent > events ) {
5974 assertEquals (1 , events .size ());
75+ RecordedEvent event = events .getFirst ();
76+
77+ long sampledThreadId = event .<RecordedThread > getValue ("eventThread" ).getJavaThreadId ();
78+ assertTrue (sampledThreadId > 0 );
79+
80+ RecordedStackTrace stackTrace = event .getStackTrace ();
81+ assertNotNull (stackTrace );
82+
83+ List <RecordedFrame > frames = stackTrace .getFrames ();
84+ assertFalse (frames .isEmpty ());
85+
86+ Set <JfrSeenMethod > seenMethod = new HashSet <>();
87+ for (RecordedFrame frame : frames ) {
88+ RecordedMethod method = frame .getMethod ();
89+ assertNotNull (method );
90+
91+ String methodName = method .getName ();
92+ assertNotNull (methodName );
93+ assertFalse (methodName .isEmpty ());
94+
95+ String methodDescriptor = method .getDescriptor ();
96+ assertNotNull (methodDescriptor );
97+ assertFalse (methodDescriptor .isEmpty ());
98+
99+ int methodModifiers = method .getModifiers ();
100+ assertTrue (methodModifiers >= 0 );
101+
102+ seenMethod .add (new JfrSeenMethod (methodName , methodDescriptor , methodModifiers ));
103+ }
104+
105+ Assert .assertTrue (seenMethod .contains (junitTest ));
106+ Assert .assertTrue (seenMethod .contains (javaMainRun ));
107+ Assert .assertTrue (seenMethod .contains (svmJunitMain ));
108+ }
109+
110+ private record JfrSeenMethod (String name , String descriptor , int modifier ) {
111+
60112 }
61113}
0 commit comments