test/jtreg-ext/requires/VMProps.java
changeset 46237 3aeb6cbc0ccc
parent 46225 f99654379e9c
parent 45823 f3cf2ee05985
child 46239 bd5621d3ebc1
--- a/test/jtreg-ext/requires/VMProps.java	Wed Jul 05 18:23:35 2017 -0700
+++ b/test/jtreg-ext/requires/VMProps.java	Tue Aug 01 13:03:20 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * 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
@@ -76,6 +76,19 @@
     }
 
     /**
+     * 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() {
@@ -99,7 +112,7 @@
         // 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");
@@ -107,7 +120,7 @@
         if (m.matches()) {
             return m.group(1).toLowerCase();
         }
-        return null;
+        return nullWithException("Can't get VM flavor from 'java.vm.name'");
     }
 
     /**
@@ -117,18 +130,16 @@
         // 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'");
         }
     }
 
@@ -136,7 +147,12 @@
      * @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");
+        }
     }
 
     /**
@@ -161,7 +177,12 @@
      * @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");
+        }
     }
 
     /**