aboutsummaryrefslogtreecommitdiff
path: root/test/failure_handler/src/share/classes/jdk/test/failurehandler/jtreg/GatherDiagnosticInfoObserver.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/failure_handler/src/share/classes/jdk/test/failurehandler/jtreg/GatherDiagnosticInfoObserver.java')
-rw-r--r--test/failure_handler/src/share/classes/jdk/test/failurehandler/jtreg/GatherDiagnosticInfoObserver.java152
1 files changed, 152 insertions, 0 deletions
diff --git a/test/failure_handler/src/share/classes/jdk/test/failurehandler/jtreg/GatherDiagnosticInfoObserver.java b/test/failure_handler/src/share/classes/jdk/test/failurehandler/jtreg/GatherDiagnosticInfoObserver.java
new file mode 100644
index 0000000..7a14d37
--- /dev/null
+++ b/test/failure_handler/src/share/classes/jdk/test/failurehandler/jtreg/GatherDiagnosticInfoObserver.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.test.failurehandler.jtreg;
+
+import com.sun.javatest.Harness;
+import com.sun.javatest.Parameters;
+import com.sun.javatest.TestResult;
+import com.sun.javatest.InterviewParameters;
+import jdk.test.failurehandler.*;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * The jtreg test execution observer, which gathers info about
+ * system and dumps it to a file.
+ */
+public class GatherDiagnosticInfoObserver implements Harness.Observer {
+ public static final String LOG_FILENAME = "environment.log";
+ public static final String ENVIRONMENT_OUTPUT = "environment.html";
+
+ private String compileJdk;
+ private String testJdk;
+
+ /*
+ * The harness calls this method after each test.
+ */
+ @Override
+ public void finishedTest(TestResult tr) {
+ if (!tr.getStatus().isError() && !tr.getStatus().isFailed()) {
+ return;
+ }
+
+ String jtrFile = tr.getFile().toString();
+ final Path workDir = Paths.get(
+ jtrFile.substring(0, jtrFile.lastIndexOf('.')));
+ workDir.toFile().mkdir();
+
+ String name = getClass().getName();
+ PrintWriter log;
+ boolean needClose = false;
+ try {
+ log = new PrintWriter(new FileWriter(
+ workDir.resolve(LOG_FILENAME).toFile(), true), true);
+ needClose = true;
+ } catch (IOException e) {
+ log = new PrintWriter(System.out);
+ log.printf("ERROR: %s cannot open log file %s", name,
+ LOG_FILENAME);
+ e.printStackTrace(log);
+ }
+ try {
+ log.printf("%s ---%n", name);
+ GathererFactory gathererFactory = new GathererFactory(
+ OS.current().family, workDir, log,
+ Paths.get(testJdk), Paths.get(compileJdk));
+ gatherEnvInfo(workDir, name, log,
+ gathererFactory.getEnvironmentInfoGatherer());
+ } catch (Throwable e) {
+ log.printf("ERROR: exception in observer %s:", name);
+ e.printStackTrace(log);
+ } finally {
+ log.printf("--- %s%n", name);
+ if (needClose) {
+ log.close();
+ } else {
+ log.flush();
+ }
+ }
+ }
+
+ private void gatherEnvInfo(Path workDir, String name, PrintWriter log,
+ EnvironmentInfoGatherer gatherer) {
+ File output = workDir.resolve(ENVIRONMENT_OUTPUT).toFile();
+ try (HtmlPage html = new HtmlPage(new PrintWriter(
+ new FileWriter(output, true), true))) {
+ try (ElapsedTimePrinter timePrinter
+ = new ElapsedTimePrinter(new Stopwatch(), name, log)) {
+ gatherer.gatherEnvironmentInfo(html.getRootSection());
+ }
+ } catch (Throwable e) {
+ log.printf("ERROR: exception in observer on getting environment "
+ + "information %s:", name);
+ e.printStackTrace(log);
+ }
+ }
+
+ /*
+ * The harness calls this method one time per run, not per test.
+ */
+ @Override
+ public void startingTestRun(Parameters params) {
+ // TODO find a better way to get JDKs
+ InterviewParameters rp = (InterviewParameters) params;
+ Map<?,?> map = new HashMap<>();
+ rp.save(map);
+ compileJdk = (String) map.get("regtest.compilejdk");
+ testJdk = (String) map.get("regtest.testjdk");
+ }
+
+ @Override
+ public void startingTest(TestResult tr) {
+ // no-op
+ }
+
+ @Override
+ public void stoppingTestRun() {
+ // no-op
+ }
+
+ @Override
+ public void finishedTesting() {
+ // no-op
+ }
+
+ @Override
+ public void finishedTestRun(boolean allOK) {
+ // no-op
+ }
+
+ @Override
+ public void error(String msg) {
+ // no-op
+ }
+}