test/jdk/jdk/jfr/event/metadata/TestLookForUntestedEvents.java
author mgronlun
Wed, 30 Oct 2019 19:43:52 +0100
changeset 58863 c16ac7a2eba4
parent 53365 a678ba2556ee
permissions -rw-r--r--
8226511: Implement JFR Event Streaming Reviewed-by: egahlin, mseledtsov, mgronlun Contributed-by: erik.gahlin@oracle.com, mikhailo.seledtsov@oracle.com, markus.gronlund@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52704
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
     1
/*
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
     2
 * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
52704
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
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
    84
    // Experimental events
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
    85
    private static final Set<String> experimentalEvents = new HashSet<>(
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
    86
      Arrays.asList(
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
    87
                    "Flush", "FlushStorage", "FlushStacktrace",
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
    88
                    "FlushStringPool", "FlushMetadata", "FlushTypeSet")
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
    89
    );
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
    90
52704
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
    public static void main(String[] args) throws Exception {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
    93
        for (EventType type : FlightRecorder.getFlightRecorder().getEventTypes()) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
    94
            if (type.getAnnotation(Experimental.class) == null) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
    95
                jfrEventTypes.add(type.getName().replace("jdk.", ""));
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
    96
            }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
    97
        }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
    98
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
    99
        checkEventNamesClass();
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   100
        lookForEventsNotCoveredByTests();
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   101
    }
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
    // 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
   104
    private static void lookForEventsNotCoveredByTests() throws Exception {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   105
        List<Path> paths = Files.walk(jfrTestRoot)
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   106
            .filter(Files::isRegularFile)
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   107
            .filter(path -> isJavaFile(path))
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   108
            .collect(Collectors.toList());
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
        Set<String> eventsNotCoveredByTest = new HashSet<>(jfrEventTypes);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   111
        for (String event : jfrEventTypes) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   112
            for (Path p : paths) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   113
                if (findStringInFile(p, event)) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   114
                    eventsNotCoveredByTest.remove(event);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   115
                    break;
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   116
                }
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
        }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   119
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   120
        // 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
   121
        eventsNotCoveredByTest.removeAll(hardToTestEvents);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   122
        eventsNotCoveredByTest.removeAll(coveredGcEvents);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   123
        eventsNotCoveredByTest.removeAll(knownNotCoveredEvents);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   124
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   125
        if (!eventsNotCoveredByTest.isEmpty()) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   126
            print(MSG_SEPARATOR + " Events not covered by test");
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   127
            for (String event: eventsNotCoveredByTest) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   128
                print(event);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   129
            }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   130
            print(MSG_SEPARATOR);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   131
            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
   132
        }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   133
    }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   134
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   135
    // 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
   136
    private static void checkEventNamesClass() throws Exception {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   137
        // jdk.test.lib.jfr.EventNames
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   138
        Set<String> eventsFromEventNamesClass = new HashSet<>();
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   139
        for (Field f : EventNames.class.getFields()) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   140
            String name = f.getName();
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   141
            if (!name.equals("PREFIX")) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   142
                String eventName = (String) f.get(null);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   143
                eventName = eventName.replace(EventNames.PREFIX, "");
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   144
                eventsFromEventNamesClass.add(eventName);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   145
            }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   146
        }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   147
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
   148
        // remove experimental events from eventsFromEventNamesClass since jfrEventTypes
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
   149
        // excludes experimental events
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
   150
        eventsFromEventNamesClass.removeAll(experimentalEvents);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53365
diff changeset
   151
52704
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   152
        if (!jfrEventTypes.equals(eventsFromEventNamesClass)) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   153
            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
   154
                         "from events returned by FlightRecorder.getEventTypes()";
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   155
            print(MSG_SEPARATOR);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   156
            print(exceptionMsg);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   157
            print("");
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   158
            printSetDiff(jfrEventTypes, eventsFromEventNamesClass,
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   159
                        "jfrEventTypes", "eventsFromEventNamesClass");
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   160
            print("");
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   161
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   162
            print("This could be because:");
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   163
            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
   164
            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
   165
            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
   166
            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
   167
            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
   168
            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
   169
            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
   170
            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
   171
            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
   172
            System.out.println(MSG_SEPARATOR);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   173
            throw new RuntimeException(exceptionMsg);
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
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   177
    // ================ Helper methods
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   178
    private static boolean isJavaFile(Path p) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   179
        String fileName = p.getFileName().toString();
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   180
        int i = fileName.lastIndexOf('.');
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   181
        if ( (i < 0) || (i > fileName.length()) ) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   182
            return false;
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   183
        }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   184
        return "java".equals(fileName.substring(i+1));
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
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   187
    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
   188
        long c = 0;
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   189
        try (Stream<String> stream = Files.lines(p)) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   190
            c = stream
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   191
                .filter(line -> line.contains(searchTerm))
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   192
                .count();
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   193
        }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   194
        return (c != 0);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   195
    }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   196
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   197
    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
   198
        String setAName, String setBName) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   199
        if (a.size() > b.size()) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   200
            a.removeAll(b);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   201
            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
   202
            System.out.println();
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   203
            printSet(a);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   204
        } else {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   205
            b.removeAll(a);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   206
            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
   207
            System.out.println();
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   208
            printSet(b);
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
    }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   211
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   212
    private static void printSet(Set<String> set) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   213
        for (String e : set) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   214
            System.out.println(e);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   215
        }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   216
    }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   217
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   218
    private static void print(String s) {
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   219
        System.out.println(s);
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   220
    }
64413aaea8ed 8213914: [TESTBUG] Several JFR VM events are not covered by tests
mseledtsov
parents:
diff changeset
   221
}