test/jdk/sun/management/jdp/DynamicLauncher.java
author iignatyev
Fri, 07 Sep 2018 14:01:52 -0700
changeset 51675 b487c1e914d0
parent 47216 71c04702a3d5
child 51754 594919232b8f
permissions -rw-r--r--
8210112: remove jdk.testlibrary.ProcessTools Reviewed-by: alanb, sspitsyn, jcbeyler
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21646
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
     1
/*
51675
b487c1e914d0 8210112: remove jdk.testlibrary.ProcessTools
iignatyev
parents: 47216
diff changeset
     2
 * Copyright (c) 2013, 2018, 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
51675
b487c1e914d0 8210112: remove jdk.testlibrary.ProcessTools
iignatyev
parents: 47216
diff changeset
    25
import jdk.test.lib.process.OutputAnalyzer;
b487c1e914d0 8210112: remove jdk.testlibrary.ProcessTools
iignatyev
parents: 47216
diff changeset
    26
import jdk.test.lib.process.ProcessTools;
21646
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();
43534
170933978095 8167337: When jmxremote.port=0, JDP broadcasts "0" instead of assigned port
rraghavan
parents: 27189
diff changeset
    41
    OutputAnalyzer output;
21646
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    42
    int jmxPort;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    43
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    44
    protected void run() throws Exception {
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();
43534
170933978095 8167337: When jmxremote.port=0, JDP broadcasts "0" instead of assigned port
rraghavan
parents: 27189
diff changeset
    51
            output = runVM();
21646
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    52
            try {
43534
170933978095 8167337: When jmxremote.port=0, JDP broadcasts "0" instead of assigned port
rraghavan
parents: 27189
diff changeset
    53
                output.shouldNotContain("Port already in use");
21646
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);
44004
5f1d97ac4595 8174915: Improve error handing for Jdp tests under sun/management/jdp
asapre
parents: 43534
diff changeset
    61
        output.shouldHaveExitValue(0);
5f1d97ac4595 8174915: Improve error handing for Jdp tests under sun/management/jdp
asapre
parents: 43534
diff changeset
    62
        // java.lang.Exception is thrown by JdpTestCase if something goes wrong
5f1d97ac4595 8174915: Improve error handing for Jdp tests under sun/management/jdp
asapre
parents: 43534
diff changeset
    63
        // for instance - see JdpTestCase::shutdown()
5f1d97ac4595 8174915: Improve error handing for Jdp tests under sun/management/jdp
asapre
parents: 43534
diff changeset
    64
        output.shouldNotContain("java.lang.Exception:");
5f1d97ac4595 8174915: Improve error handing for Jdp tests under sun/management/jdp
asapre
parents: 43534
diff changeset
    65
        output.shouldNotContain("Error: Could not find or load main class");
21646
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    66
    }
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    67
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    68
    protected OutputAnalyzer runVM() throws Exception {
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    69
        String[] options = this.options();
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    70
        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(options);
27189
b90845965ee9 8056143: interrupted java/lang/management/MemoryMXBean/LowMemoryTest.java leaves running process
jbachorik
parents: 21646
diff changeset
    71
        OutputAnalyzer out = ProcessTools.executeProcess(pb);
21646
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    72
        System.out.println(out.getStdout());
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    73
        System.err.println(out.getStderr());
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    74
        return out;
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    75
    }
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    76
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    77
    protected abstract String[] options();
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    78
43534
170933978095 8167337: When jmxremote.port=0, JDP broadcasts "0" instead of assigned port
rraghavan
parents: 27189
diff changeset
    79
    protected OutputAnalyzer getProcessOutpoutAnalyzer() {
170933978095 8167337: When jmxremote.port=0, JDP broadcasts "0" instead of assigned port
rraghavan
parents: 27189
diff changeset
    80
        return output;
170933978095 8167337: When jmxremote.port=0, JDP broadcasts "0" instead of assigned port
rraghavan
parents: 27189
diff changeset
    81
    }
21646
38f9ba0664de 8014506: Test of Jdp feature
sla
parents:
diff changeset
    82
}