jdk/test/sun/management/jdp/DynamicLauncher.java
author amurillo
Thu, 21 Jul 2016 17:13:23 +0000
changeset 39764 4c2a4f338444
parent 27189 b90845965ee9
child 43534 170933978095
permissions -rw-r--r--
Merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21646
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
     1
/*
27189
b90845965ee9 8056143: interrupted java/lang/management/MemoryMXBean/LowMemoryTest.java leaves running process
jbachorik
parents: 21646
diff changeset
     2
 * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
21646
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
     4
 *
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
     7
 * published by the Free Software Foundation.
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
     8
 *
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    13
 * accompanied this code).
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    14
 *
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    18
 *
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    21
 * questions.
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    22
 */
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    23
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    24
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    25
import jdk.testlibrary.OutputAnalyzer;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    26
import jdk.testlibrary.ProcessTools;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    27
import jdk.testlibrary.Utils;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    28
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    29
import java.util.UUID;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    30
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    31
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    32
/**
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    33
 * This class will try to find an unused port and run a JdpTestCase using it.
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    34
 * The unused port is needed for jmxremote.port.
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    35
 * The problem with busy ports arises when running many automated tests on the same host.
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    36
 * Note that jdp.port is a multicast port and thus it can be binded by different processes at the same time.
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    37
 */
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    38
public abstract class DynamicLauncher {
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    39
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    40
    final String jdpName = UUID.randomUUID().toString();
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    41
    int jmxPort;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    42
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    43
    protected void run() throws Exception {
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    44
        OutputAnalyzer out;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    45
        int retries = 1;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    46
        boolean tryAgain;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    47
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    48
        do {
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    49
            tryAgain = false;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    50
            jmxPort = Utils.getFreePort();
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    51
            out = runVM();
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    52
            try {
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    53
                out.shouldNotContain("Port already in use");
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    54
            } catch (RuntimeException e) {
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    55
                if (retries < 3) {
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    56
                    retries++;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    57
                    tryAgain = true;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    58
                }
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    59
            }
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    60
        } while (tryAgain);
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    61
    }
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    62
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    63
    protected OutputAnalyzer runVM() throws Exception {
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    64
        String[] options = this.options();
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    65
        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(options);
27189
b90845965ee9 8056143: interrupted java/lang/management/MemoryMXBean/LowMemoryTest.java leaves running process
jbachorik
parents: 21646
diff changeset
    66
        OutputAnalyzer out = ProcessTools.executeProcess(pb);
21646
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    67
        System.out.println(out.getStdout());
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    68
        System.err.println(out.getStderr());
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    69
        return out;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    70
    }
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    71
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    72
    protected abstract String[] options();
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    73
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    74
}