< prev index next >

test/jtreg-ext/requires/VMProps.java

Print this page
rev 2714 : 8183534: [TEST] Make detection of compilation mode more robust
Reviewed-by: clanger, stuefe

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, 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.

@@ -74,10 +74,23 @@
         VMProps.dump(map);
         return map;
     }
 
     /**
+     * Prints a stack trace before returning null.
+     * Used by the various helper functions which parse information from
+     * VM properties in the case where they don't find an expected property
+     * or a propoerty doesn't conform to an expected format.
+     *
+     * @return null
+     */
+    private String nullWithException(String message) {
+        new Exception(message).printStackTrace();
+        return null;
+    }
+
+    /**
      * @return vm.simpleArch value of "os.simpleArch" property of tested JDK.
      */
     protected String vmArch() {
         String arch = System.getProperty("os.arch");
         if (arch.equals("x86_64") || arch.equals("amd64")) {

@@ -97,48 +110,51 @@
      */
     protected String vmFlavor() {
         // E.g. "Java HotSpot(TM) 64-Bit Server VM"
         String vmName = System.getProperty("java.vm.name");
         if (vmName == null) {
-            return null;
+            return nullWithException("Can't get 'java.vm.name' property");
         }
 
         Pattern startP = Pattern.compile(".* (\\S+) VM");
         Matcher m = startP.matcher(vmName);
         if (m.matches()) {
             return m.group(1).toLowerCase();
         }
-        return null;
+        return nullWithException("Can't get VM flavor from 'java.vm.name'");
     }
 
     /**
      * @return VM compilation mode extracted from the "java.vm.info" property.
      */
     protected String vmCompMode() {
         // E.g. "mixed mode"
         String vmInfo = System.getProperty("java.vm.info");
         if (vmInfo == null) {
-            return null;
-        }
-        int k = vmInfo.toLowerCase().indexOf(" mode");
-        if (k < 0) {
-            return null;
+            return nullWithException("Can't get 'java.vm.info' property");
         }
-        vmInfo = vmInfo.substring(0, k);
-        switch (vmInfo) {
-            case "mixed" : return "Xmixed";
-            case "compiled" : return "Xcomp";
-            case "interpreted" : return "Xint";
-            default: return null;
+        if (vmInfo.toLowerCase().indexOf("mixed mode") != -1) {
+            return "Xmixed";
+        } else if (vmInfo.toLowerCase().indexOf("compiled mode") != -1) {
+            return "Xcomp";
+        } else if (vmInfo.toLowerCase().indexOf("interpreted mode") != -1) {
+            return "Xint";
+        } else {
+            return nullWithException("Can't get compilation mode from 'java.vm.info'");
         }
     }
 
     /**
      * @return VM bitness, the value of the "sun.arch.data.model" property.
      */
     protected String vmBits() {
-        return System.getProperty("sun.arch.data.model");
+        String dataModel = System.getProperty("sun.arch.data.model");
+        if (dataModel != null) {
+            return dataModel;
+        } else {
+            return nullWithException("Can't get 'sun.arch.data.model' property");
+        }
     }
 
     /**
      * @return "true" if Flight Recorder is enabled, "false" if is disabled.
      */

@@ -159,11 +175,16 @@
 
     /**
      * @return debug level value extracted from the "jdk.debug" property.
      */
     protected String vmDebug() {
-        return "" + System.getProperty("jdk.debug").contains("debug");
+        String debug = System.getProperty("jdk.debug");
+        if (debug != null) {
+            return "" + debug.contains("debug");
+        } else {
+            return nullWithException("Can't get 'jdk.debug' property");
+        }
     }
 
     /**
      * @return true if VM supports JVMCI and false otherwise
      */
< prev index next >