author | mseledtsov |
Wed, 16 Jan 2019 17:37:05 -0800 | |
changeset 53365 | a678ba2556ee |
parent 52911 | e0ce50c5e220 |
child 58239 | bb89bc4d6689 |
permissions | -rw-r--r-- |
52704
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
1 |
/* |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
2 |
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
4 |
* |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. Oracle designates this |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
8 |
* particular file as subject to the "Classpath" exception as provided |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
9 |
* by Oracle in the LICENSE file that accompanied this code. |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
10 |
* |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
15 |
* accompanied this code). |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
16 |
* |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
17 |
* You should have received a copy of the GNU General Public License version |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
20 |
* |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
22 |
* or visit www.oracle.com if you need additional information or have any |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
23 |
* questions. |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
24 |
*/ |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
25 |
package jdk.jfr.event.metadata; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
26 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
27 |
import java.io.IOException; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
28 |
import java.lang.reflect.Field; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
29 |
import java.nio.file.Files; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
30 |
import java.nio.file.Path; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
31 |
import java.nio.file.Paths; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
32 |
import java.util.Arrays; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
33 |
import java.util.HashSet; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
34 |
import java.util.List; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
35 |
import java.util.Set; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
36 |
import java.util.stream.Collectors; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
37 |
import java.util.stream.Stream; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
38 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
39 |
import jdk.jfr.EventType; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
40 |
import jdk.jfr.Experimental; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
41 |
import jdk.jfr.FlightRecorder; |
52911
e0ce50c5e220
8213966: The ZGC JFR events should be marked as experimental
egahlin
parents:
52704
diff
changeset
|
42 |
import jdk.test.lib.Utils; |
52704
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
43 |
import jdk.test.lib.jfr.EventNames; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
44 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
45 |
/** |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
46 |
* @test Check for JFR events not covered by tests |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
47 |
* @key jfr |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
48 |
* @requires vm.hasJFR |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
49 |
* @library /test/lib /test/jdk |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
50 |
* @run main jdk.jfr.event.metadata.TestLookForUntestedEvents |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
51 |
*/ |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
52 |
public class TestLookForUntestedEvents { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
53 |
private static final Path jfrTestRoot = Paths.get(Utils.TEST_SRC).getParent().getParent(); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
54 |
private static final String MSG_SEPARATOR = "=========================="; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
55 |
private static Set<String> jfrEventTypes = new HashSet<>(); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
56 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
57 |
private static final Set<String> hardToTestEvents = new HashSet<>( |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
58 |
Arrays.asList( |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
59 |
"DataLoss", "IntFlag", "ReservedStackActivation", |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
60 |
"DoubleFlag", "UnsignedLongFlagChanged", "IntFlagChanged", |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
61 |
"UnsignedIntFlag", "UnsignedIntFlagChanged", "DoubleFlagChanged") |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
62 |
); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
63 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
64 |
// GC uses specific framework to test the events, instead of using event names literally. |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
65 |
// GC tests were inspected, as well as runtime output of GC tests. |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
66 |
// The following events below are know to be covered based on that inspection. |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
67 |
private static final Set<String> coveredGcEvents = new HashSet<>( |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
68 |
Arrays.asList( |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
69 |
"MetaspaceGCThreshold", "MetaspaceAllocationFailure", "MetaspaceOOM", |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
70 |
"MetaspaceChunkFreeListSummary", "G1HeapSummary", "ParallelOldGarbageCollection", |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
71 |
"OldGarbageCollection", "G1GarbageCollection", "GCPhasePause", |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
72 |
"GCPhasePauseLevel1", "GCPhasePauseLevel2", "GCPhasePauseLevel3", |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
73 |
"GCPhasePauseLevel4", "GCPhaseConcurrent") |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
74 |
); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
75 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
76 |
// This is a "known failure list" for this test. |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
77 |
// NOTE: if the event is not covered, a bug should be open, and bug number |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
78 |
// noted in the comments for this set. |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
79 |
private static final Set<String> knownNotCoveredEvents = new HashSet<>( |
53365
a678ba2556ee
8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
52911
diff
changeset
|
80 |
// DumpReason: JDK-8213918 |
a678ba2556ee
8213917: [TESTBUG] Shutdown JFR event is not covered by test
mseledtsov
parents:
52911
diff
changeset
|
81 |
Arrays.asList("DumpReason") |
52704
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
82 |
); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
83 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
84 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
85 |
public static void main(String[] args) throws Exception { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
86 |
for (EventType type : FlightRecorder.getFlightRecorder().getEventTypes()) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
87 |
if (type.getAnnotation(Experimental.class) == null) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
88 |
jfrEventTypes.add(type.getName().replace("jdk.", "")); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
89 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
90 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
91 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
92 |
checkEventNamesClass(); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
93 |
lookForEventsNotCoveredByTests(); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
94 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
95 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
96 |
// Look thru JFR tests to make sure JFR events are referenced in the tests |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
97 |
private static void lookForEventsNotCoveredByTests() throws Exception { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
98 |
List<Path> paths = Files.walk(jfrTestRoot) |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
99 |
.filter(Files::isRegularFile) |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
100 |
.filter(path -> isJavaFile(path)) |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
101 |
.collect(Collectors.toList()); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
102 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
103 |
Set<String> eventsNotCoveredByTest = new HashSet<>(jfrEventTypes); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
104 |
for (String event : jfrEventTypes) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
105 |
for (Path p : paths) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
106 |
if (findStringInFile(p, event)) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
107 |
eventsNotCoveredByTest.remove(event); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
108 |
break; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
109 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
110 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
111 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
112 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
113 |
// Account for hard-to-test, experimental and GC tested events |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
114 |
eventsNotCoveredByTest.removeAll(hardToTestEvents); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
115 |
eventsNotCoveredByTest.removeAll(coveredGcEvents); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
116 |
eventsNotCoveredByTest.removeAll(knownNotCoveredEvents); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
117 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
118 |
if (!eventsNotCoveredByTest.isEmpty()) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
119 |
print(MSG_SEPARATOR + " Events not covered by test"); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
120 |
for (String event: eventsNotCoveredByTest) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
121 |
print(event); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
122 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
123 |
print(MSG_SEPARATOR); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
124 |
throw new RuntimeException("Found JFR events not covered by tests"); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
125 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
126 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
127 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
128 |
// Make sure all the JFR events are accounted for in jdk.test.lib.jfr.EventNames |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
129 |
private static void checkEventNamesClass() throws Exception { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
130 |
// jdk.test.lib.jfr.EventNames |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
131 |
Set<String> eventsFromEventNamesClass = new HashSet<>(); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
132 |
for (Field f : EventNames.class.getFields()) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
133 |
String name = f.getName(); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
134 |
if (!name.equals("PREFIX")) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
135 |
String eventName = (String) f.get(null); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
136 |
eventName = eventName.replace(EventNames.PREFIX, ""); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
137 |
eventsFromEventNamesClass.add(eventName); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
138 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
139 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
140 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
141 |
if (!jfrEventTypes.equals(eventsFromEventNamesClass)) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
142 |
String exceptionMsg = "Events declared in jdk.test.lib.jfr.EventNames differ " + |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
143 |
"from events returned by FlightRecorder.getEventTypes()"; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
144 |
print(MSG_SEPARATOR); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
145 |
print(exceptionMsg); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
146 |
print(""); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
147 |
printSetDiff(jfrEventTypes, eventsFromEventNamesClass, |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
148 |
"jfrEventTypes", "eventsFromEventNamesClass"); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
149 |
print(""); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
150 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
151 |
print("This could be because:"); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
152 |
print("1) You forgot to write a unit test. Please do so in test/jdk/jdk/jfr/event/"); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
153 |
print("2) You wrote a unit test, but you didn't reference the event in"); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
154 |
print(" test/lib/jdk/test/lib/jfr/EventNames.java. "); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
155 |
print("3) It is not feasible to test the event, not even a sanity test. "); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
156 |
print(" Add the event name to test/lib/jdk/test/lib/jfr/EventNames.java "); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
157 |
print(" and a short comment why it can't be tested"); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
158 |
print("4) The event is experimental. Please add 'experimental=\"true\"' to <Event> "); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
159 |
print(" element in metadata.xml if it is a native event, or @Experimental if it is a "); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
160 |
print(" Java event. The event will now not show up in JMC"); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
161 |
System.out.println(MSG_SEPARATOR); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
162 |
throw new RuntimeException(exceptionMsg); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
163 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
164 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
165 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
166 |
// ================ Helper methods |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
167 |
private static boolean isJavaFile(Path p) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
168 |
String fileName = p.getFileName().toString(); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
169 |
int i = fileName.lastIndexOf('.'); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
170 |
if ( (i < 0) || (i > fileName.length()) ) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
171 |
return false; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
172 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
173 |
return "java".equals(fileName.substring(i+1)); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
174 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
175 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
176 |
private static boolean findStringInFile(Path p, String searchTerm) throws IOException { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
177 |
long c = 0; |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
178 |
try (Stream<String> stream = Files.lines(p)) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
179 |
c = stream |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
180 |
.filter(line -> line.contains(searchTerm)) |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
181 |
.count(); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
182 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
183 |
return (c != 0); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
184 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
185 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
186 |
private static void printSetDiff(Set<String> a, Set<String> b, |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
187 |
String setAName, String setBName) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
188 |
if (a.size() > b.size()) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
189 |
a.removeAll(b); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
190 |
System.out.printf("Set %s has more elements than set %s:", setAName, setBName); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
191 |
System.out.println(); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
192 |
printSet(a); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
193 |
} else { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
194 |
b.removeAll(a); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
195 |
System.out.printf("Set %s has more elements than set %s:", setBName, setAName); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
196 |
System.out.println(); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
197 |
printSet(b); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
198 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
199 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
200 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
201 |
private static void printSet(Set<String> set) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
202 |
for (String e : set) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
203 |
System.out.println(e); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
204 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
205 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
206 |
|
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
207 |
private static void print(String s) { |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
208 |
System.out.println(s); |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
209 |
} |
64413aaea8ed
8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff
changeset
|
210 |
} |