1 /* 2 * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package jdk.jfr.jmx; 27 28 import java.util.ArrayList; 29 import java.util.List; 30 31 import jdk.management.jfr.RecordingInfo; 32 import jdk.test.lib.Asserts; 33 34 /* 35 * @test 36 * @key jfr 37 * @library /test/lib /test/jdk 38 * @run main/othervm jdk.jfr.jmx.TestGetRecordingsMultiple 39 */ 40 public class TestGetRecordingsMultiple { 41 42 private static class TestRecording { 43 long id; 44 boolean isClosed; 45 public TestRecording(long id) { 46 this.id = id; 47 isClosed = false; 48 } 49 } 50 51 public static void main(String[] args) throws Throwable { 52 List<TestRecording> testRecordings = new ArrayList<>(); 53 for (int i = 0; i < 5; ++i) { 54 verifyExistingRecordings(testRecordings); 55 testRecordings.add(createRecording()); 56 if (i >= 1) { 57 startRecording(testRecordings.get(i-1)); 58 } 59 if (i >= 2) { 60 stopRecording(testRecordings.get(i-2)); 61 } 62 if (i >= 3) { 63 closeRecording(testRecordings.get(i-3)); 64 } 65 } 66 verifyExistingRecordings(testRecordings); 67 68 for (TestRecording r : testRecordings) { 69 if (!r.isClosed) { 70 closeRecording(r); 71 } 72 } 73 verifyExistingRecordings(testRecordings); 74 } 75 76 // Verify that all active recordings are found, but no closed recordings. 77 private static void verifyExistingRecordings(List<TestRecording> testRecordings) { 78 for (TestRecording testRecording : testRecordings) { 79 RecordingInfo r = findRecording(testRecording); 80 if (r != null) { 81 Asserts.assertFalse(testRecording.isClosed, "Found closed recording with id " + testRecording.id); 82 System.out.printf("Recording %d: %s%n", r.getId(), r.getState()); 83 } else { 84 Asserts.assertTrue(testRecording.isClosed, "Missing recording with id " + testRecording.id); 85 System.out.printf("Recording %d: CLOSED%n", testRecording.id); 86 } 87 } 88 } 89 90 private static RecordingInfo findRecording(TestRecording testRecording) { 91 for (RecordingInfo r : JmxHelper.getFlighteRecorderMXBean().getRecordings()) { 92 if (r.getId() == testRecording.id) { 93 return r; 94 } 95 } 96 return null; 97 } 98 99 private static TestRecording createRecording() { 100 long id = JmxHelper.getFlighteRecorderMXBean().newRecording(); 101 System.out.println("created recording " + id); 102 return new TestRecording(id); 103 } 104 105 private static void startRecording(TestRecording rec) { 106 System.out.println("starting recording " + rec.id); 107 JmxHelper.getFlighteRecorderMXBean().startRecording(rec.id); 108 } 109 110 private static void stopRecording(TestRecording rec) { 111 System.out.println("stopping recording " + rec.id); 112 JmxHelper.getFlighteRecorderMXBean().stopRecording(rec.id); 113 } 114 115 private static void closeRecording(TestRecording rec) throws Exception { 116 System.out.println("closing recording " + rec.id); 117 JmxHelper.getFlighteRecorderMXBean().closeRecording(rec.id); 118 rec.isClosed = true; 119 120 } 121 }