hotspot/test/gc/TestGCLogRotationViaJcmd.java
changeset 35081 070c4f5b3569
parent 34678 329bff8000d4
parent 35080 b9dd459157f0
child 35082 48c95c24f175
child 35142 11e71310edae
child 35226 4aee3c29fc2d
equal deleted inserted replaced
34678:329bff8000d4 35081:070c4f5b3569
     1 /*
       
     2  * Copyright (c) 2014, 2015, 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.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  */
       
    23 
       
    24 /*
       
    25  * @test TestGCLogRotationViaJcmd.java
       
    26  * @bug 7090324
       
    27  * @summary test for gc log rotation via jcmd
       
    28  * @library /testlibrary
       
    29  * @modules java.base/sun.misc
       
    30  *          java.management
       
    31  * @run main/othervm -Xloggc:test.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=3 TestGCLogRotationViaJcmd
       
    32  *
       
    33  */
       
    34 import jdk.test.lib.*;
       
    35 import java.io.File;
       
    36 import java.io.FilenameFilter;
       
    37 
       
    38 public class TestGCLogRotationViaJcmd {
       
    39 
       
    40     static final File currentDirectory = new File(".");
       
    41     static final String LOG_FILE_NAME = "test.log";
       
    42     static final int NUM_LOGS = 3;
       
    43 
       
    44     static FilenameFilter logFilter = new FilenameFilter() {
       
    45         @Override
       
    46         public boolean accept(File dir, String name) {
       
    47             return name.startsWith(LOG_FILE_NAME);
       
    48         }
       
    49     };
       
    50 
       
    51     public static void main(String[] args) throws Exception {
       
    52         // Grab the pid from the current java process
       
    53         String pid = Integer.toString(ProcessTools.getProcessId());
       
    54 
       
    55         // Create a JDKToolLauncher
       
    56         JDKToolLauncher jcmd = JDKToolLauncher.create("jcmd")
       
    57                                               .addToolArg(pid)
       
    58                                               .addToolArg("GC.rotate_log");
       
    59 
       
    60         for (int times = 1; times < NUM_LOGS; times++) {
       
    61             // Run jcmd <pid> GC.rotate_log
       
    62             ProcessBuilder pb = new ProcessBuilder(jcmd.getCommand());
       
    63 
       
    64             // Make sure we didn't crash
       
    65             OutputAnalyzer output = new OutputAnalyzer(pb.start());
       
    66             output.shouldHaveExitValue(0);
       
    67         }
       
    68 
       
    69         // GC log check
       
    70         File[] logs = currentDirectory.listFiles(logFilter);
       
    71         if (logs.length != NUM_LOGS) {
       
    72             throw new Error("There are only " + logs.length
       
    73                                               + " logs instead " + NUM_LOGS);
       
    74         }
       
    75 
       
    76     }
       
    77 
       
    78 }
       
    79