test/hotspot/jtreg/runtime/ErrorHandling/ErrorFileRedirectTest.java
author jiefu
Wed, 28 Aug 2019 08:47:40 +0800
changeset 57918 edc00278955d
parent 54322 cf75ea6af695
permissions -rw-r--r--
8230228: [TESTBUG] Several runtime/ErrorHandling tests may fail on some platforms Reviewed-by: coleenp, stuefe, mseledtsov
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54322
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
     1
/*
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
     3
 * Copyright (c) 2019, SAP. All rights reserved.
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
     5
 *
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
     8
 * published by the Free Software Foundation.
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
     9
 *
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    14
 * accompanied this code).
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    15
 *
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    19
 *
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    22
 * questions.
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    23
 */
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    24
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    25
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    26
/*
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    27
 * @test
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    28
 * @bug 8220786
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    29
 * @summary Test ErrorFileToStderr and ErrorFileToStdout
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    30
 * @library /test/lib
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    31
 * @modules java.base/jdk.internal.misc
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    32
 * @requires (vm.debug == true)
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    33
 */
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    34
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    35
import jdk.test.lib.process.OutputAnalyzer;
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    36
import jdk.test.lib.process.ProcessTools;
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    37
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    38
import java.io.BufferedReader;
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    39
import java.io.File;
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    40
import java.io.FileInputStream;
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    41
import java.io.InputStreamReader;
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    42
import java.util.Map;
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    43
import java.util.regex.Pattern;
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    44
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    45
public class ErrorFileRedirectTest {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    46
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    47
  public static void do_test(boolean redirectStdout, boolean redirectStderr) throws Exception {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    48
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    49
    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    50
            "-Xmx64M",
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    51
            "-XX:-CreateCoredumpOnCrash",
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    52
            "-XX:ErrorHandlerTest=14",
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    53
            "-XX:" + (redirectStdout ? "+" : "-") + "ErrorFileToStdout",
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    54
            "-XX:" + (redirectStderr ? "+" : "-") + "ErrorFileToStderr",
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    55
            "-version");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    56
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    57
    OutputAnalyzer output_detail = new OutputAnalyzer(pb.start());
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    58
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    59
    // we should have crashed with a SIGSEGV
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    60
    output_detail.shouldMatch("# A fatal error has been detected by the Java Runtime Environment:.*");
57918
edc00278955d 8230228: [TESTBUG] Several runtime/ErrorHandling tests may fail on some platforms
jiefu
parents: 54322
diff changeset
    61
    output_detail.shouldMatch("# +(?:SIGSEGV|SIGBUS|EXCEPTION_ACCESS_VIOLATION).*");
54322
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    62
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    63
    // If no redirection happened, we should find a mention of the file in the output.
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    64
    String hs_err_file = output_detail.firstMatch("# *(\\S*hs_err_pid\\d+\\.log)", 1);
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    65
    if (redirectStdout == false && redirectStderr == false) {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    66
      if (hs_err_file == null) {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    67
        throw new RuntimeException("Expected hs-err file but none found.");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    68
      } else {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    69
        System.out.println("Found hs error file mentioned as expected: " + hs_err_file);
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    70
      }
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    71
    } else {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    72
      if (hs_err_file != null) {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    73
        throw new RuntimeException("Found unexpected mention of hs-err file (we did redirect the output so no file should have been written).");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    74
      } else {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    75
        System.out.println("No mention of an hs-err file - ok! ");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    76
      }
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    77
    }
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    78
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    79
    // Check the output. Note that since stderr was specified last it has preference if both are set.
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    80
    if (redirectStdout == true && redirectStderr == false) {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    81
      output_detail.stdoutShouldContain("---------------  S U M M A R Y ------------");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    82
      output_detail.stderrShouldNotContain("---------------  S U M M A R Y ------------");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    83
      System.out.println("Found report on stderr - ok! ");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    84
    } else if (redirectStderr == true) {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    85
      output_detail.stderrShouldContain("---------------  S U M M A R Y ------------");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    86
      output_detail.stdoutShouldNotContain("---------------  S U M M A R Y ------------");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    87
      System.out.println("Found report on stdout - ok! ");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    88
    }
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    89
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    90
    System.out.println("OK.");
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    91
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    92
  }
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    93
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    94
  public static void main(String[] args) throws Exception {
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    95
    do_test(false, false);
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    96
    do_test(false, true);
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    97
    do_test(true, false);
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    98
    do_test(true, true);
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
    99
  }
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
   100
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
   101
}
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
   102
cf75ea6af695 8220786: Create new switch to redirect error reporting output to stdout or stderr
stuefe
parents:
diff changeset
   103