changeset 1220:d1ff3aff9167

Add same jvm dirs support to jtreg. 2008-11-23 Mark Wielaard <mark@klomp.org> * test/jtreg/com/sun/javatest/regtest/Main.java (createParameters): Set same jvm safe dirs when non-null. (getSameJVMSafeDirs): New method that reads samejvmsafe property from TEST.ROOT. (sameJVMSafeDirs): New private field. * test/jtreg/com/sun/javatest/regtest/RegressionParameters.java (SAME_JVM_SAFE_DIRS): New static final field. (load): Read same jvm safe dirs. (save0): Write same jvm safe dirs. (getSameJVMSafeDirs): New method. (setSameJVMSafeDirs): New method. * test/jtreg/com/sun/javatest/regtest/RegressionScript.java (run): Set testDirPath. (isOtherJVM): Take same jvm safe into account. (isSameJVMSafe): New method. (testDirPath): New private field.
author Mark Wielaard <mark@klomp.org>
date Sun, 23 Nov 2008 17:12:40 +0100
parents 9aae858397f9
children b7ce0d293432
files ChangeLog test/jtreg/com/sun/javatest/regtest/Main.java test/jtreg/com/sun/javatest/regtest/RegressionParameters.java test/jtreg/com/sun/javatest/regtest/RegressionScript.java
diffstat 4 files changed, 100 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Nov 21 18:35:27 2008 -0500
+++ b/ChangeLog	Sun Nov 23 17:12:40 2008 +0100
@@ -1,3 +1,22 @@
+2008-11-23  Mark Wielaard  <mark@klomp.org>
+
+	* test/jtreg/com/sun/javatest/regtest/Main.java
+	(createParameters): Set same jvm safe dirs when non-null.
+	(getSameJVMSafeDirs): New method that reads samejvmsafe property
+	from TEST.ROOT.
+	(sameJVMSafeDirs): New private field.
+	* test/jtreg/com/sun/javatest/regtest/RegressionParameters.java
+	(SAME_JVM_SAFE_DIRS): New static final field.
+	(load): Read same jvm safe dirs.
+	(save0): Write same jvm safe dirs.
+	(getSameJVMSafeDirs): New method.
+	(setSameJVMSafeDirs): New method.
+	* test/jtreg/com/sun/javatest/regtest/RegressionScript.java
+	(run): Set testDirPath.
+	(isOtherJVM): Take same jvm safe into account.
+	(isSameJVMSafe): New method.
+	(testDirPath): New private field.
+
 2008-11-21  Deepak Bhole  <dbhole@redhat.com>
 
 	* IcedTeaPlugin.cc: Fix a mistake in previous commit re: integer overflow.
--- a/test/jtreg/com/sun/javatest/regtest/Main.java	Fri Nov 21 18:35:27 2008 -0500
+++ b/test/jtreg/com/sun/javatest/regtest/Main.java	Sun Nov 23 17:12:40 2008 +0100
@@ -29,6 +29,7 @@
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.FileWriter;
@@ -52,6 +53,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.TreeMap;
 
 import com.sun.javatest.CompositeFilter;
@@ -1354,6 +1356,10 @@
             if (ignoreKind != null)
                 rp.setIgnoreKind(ignoreKind);
 
+            sameJVMSafeDirs = getSameJVMSafeDirs(ts);
+            if (sameJVMSafeDirs != null)
+                rp.setSameJVMSafeDirs(sameJVMSafeDirs);
+
             return rp;
         } catch (TestSuite.Fault f) {
             f.printStackTrace();
@@ -1374,6 +1380,35 @@
         }
     }
 
+    // Returns directory (prefix) for tests that are same jvm safe
+    // read from amejvmsafe property in TEST.ROOT file. Returning null
+    // means all tests are considered same jvm safe. null is returned
+    // when there is no samejvmsafe property, or there was a problem
+    // reading it, and when anything else than the test root was given
+    // as test file argument. Meaning that this only returns something
+    // non-null if anything was actually specified as same jvm safe and
+    // the whole test suite is being tested.
+    private List<String> getSameJVMSafeDirs(File testRoot) {
+	// Only use the same jvm safe dirs when running from the root.
+	if (testFileArgs.size() != 1
+	    || !canon(testFileArgs.iterator().next()).equals(canon(testRoot)))
+	    return null;
+
+	try {
+	    File file = new File(testRoot, "TEST.ROOT");
+            if (file.exists()) {
+		Properties testRootProps = new Properties();
+		testRootProps.load(new FileInputStream(file));
+		String safedirs = testRootProps.getProperty("samejvmsafe");
+		if ((safedirs != null) && (safedirs.trim().length() > 0))
+		    return Arrays.asList(StringArray.splitWS(safedirs));
+	    }
+	} catch (IOException ioe) {
+	    // Bah, then just assume everything is safe.
+	}
+	return null;
+    }
+
     private String getRelativePath(File base, File f) {
         StringBuilder sb = new StringBuilder();
         for ( ; f != null; f = f.getParentFile()) {
@@ -1762,6 +1797,7 @@
     // these args are jtreg extras
     private File baseDirArg;
     private boolean sameJVMFlag;
+    private List<String> sameJVMSafeDirs;
     private JDK jdk;
     private boolean guiFlag;
     private boolean reportOnlyFlag;
--- a/test/jtreg/com/sun/javatest/regtest/RegressionParameters.java	Fri Nov 21 18:35:27 2008 -0500
+++ b/test/jtreg/com/sun/javatest/regtest/RegressionParameters.java	Sun Nov 23 17:12:40 2008 +0100
@@ -139,6 +139,7 @@
     private static final String TEST_JAVA_OPTIONS = ".testJavaOpts";
     private static final String IGNORE = ".ignore";
     private static final String RETAIN_ARGS = ".retain";
+    private static final String SAME_JVM_SAFE_DIRS = ".samejvmsafedirs";
     
     @Override
     public void load(Map data, boolean checkChecksum) throws Interview.Fault {
@@ -182,6 +183,10 @@
         v = (String) data.get(prefix + RETAIN_ARGS);
         if (v != null)
             setRetainArgs(Arrays.asList(StringArray.splitSeparator("\n", v)));
+
+        v = (String) data.get(prefix + SAME_JVM_SAFE_DIRS);
+        if (v != null)
+            setSameJVMSafeDirs(Arrays.asList(StringArray.splitSeparator("\n", v)));
     }
     
     @SuppressWarnings("unchecked")
@@ -204,6 +209,9 @@
         if (jdk != null)
             data.put(prefix + JDK, jdk.getPath());
         
+        if (sameJVMSafeDirs != null)
+            data.put(prefix + SAME_JVM_SAFE_DIRS, StringUtils.join(sameJVMSafeDirs, "\n"));
+        
         if (retainArgs != null)
             data.put(prefix + RETAIN_ARGS, StringUtils.join(retainArgs, "\n"));
         
@@ -592,6 +600,18 @@
     private Pattern retainFilesPattern;
 
     //---------------------------------------------------------------------
+    
+    List<String> getSameJVMSafeDirs() {
+        return sameJVMSafeDirs;
+    }
+    
+    void setSameJVMSafeDirs(List<String> sameJVMSafeDirs) {
+        this.sameJVMSafeDirs= sameJVMSafeDirs;
+    }
+
+    private List<String> sameJVMSafeDirs;
+
+    //---------------------------------------------------------------------
 
     private static final String PATHSEP  = System.getProperty("path.separator");
     private static final String LINESEP  = System.getProperty("line.separator");
--- a/test/jtreg/com/sun/javatest/regtest/RegressionScript.java	Fri Nov 21 18:35:27 2008 -0500
+++ b/test/jtreg/com/sun/javatest/regtest/RegressionScript.java	Sun Nov 23 17:12:40 2008 +0100
@@ -69,6 +69,10 @@
     public Status run(String[] argv, TestDescription td, TestEnvironment env) {
         if (!(env instanceof RegressionEnvironment))
             throw new AssertionError();
+
+	String testFilePath = td.getRootRelativePath();
+	int lastSlash = testFilePath.lastIndexOf('/');
+	testDirPath = testFilePath.substring(0, lastSlash);
         
         regEnv = (RegressionEnvironment) env;
         params = regEnv.params;
@@ -833,7 +837,26 @@
     }
 
     boolean isOtherJVM() {
-        return params.isOtherJVM();
+	boolean samevm = !params.isOtherJVM();
+	if (samevm)
+	    return !isSameJVMSafe();
+	else
+	    return true;
+    }
+
+    // Whether the actions of this script can safely run in the same jvm.
+    // No same jvm safe dirs given means they are all assumed safe.
+    // If our actions come from a file in a subdir of a safe dir that is ok.
+    boolean isSameJVMSafe() {
+        List<String> dirs = params.getSameJVMSafeDirs();
+	if (dirs == null)
+	    return true;
+
+	for (String dir : dirs)
+	    if (testDirPath.startsWith(dir))
+		return true;
+
+	return false;
     }
 
     String getJavaProg() {
@@ -921,5 +944,6 @@
 
     private RegressionEnvironment regEnv;
     private RegressionParameters params;
+    private String testDirPath;
 }