You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2009/04/14 20:23:15 UTC
svn commit: r764912 - in
/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests:
OldVersions.java PhaseChanger.java UpgradeClassLoader.java UpgradeRun.java
_Suite.java
Author: rhillegas
Date: Tue Apr 14 18:23:15 2009
New Revision: 764912
URL: http://svn.apache.org/viewvc?rev=764912&view=rev
Log:
-d
Added:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/OldVersions.java (with props)
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeClassLoader.java (with props)
Modified:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/PhaseChanger.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeRun.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/_Suite.java
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/OldVersions.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/OldVersions.java?rev=764912&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/OldVersions.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/OldVersions.java Tue Apr 14 18:23:15 2009
@@ -0,0 +1,244 @@
+/*
+
+Derby - Class org.apache.derbyTesting.functionTests.tests.upgradeTests.OldVersions
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+package org.apache.derbyTesting.functionTests.tests.upgradeTests;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.apache.derbyTesting.junit.BaseTestCase;
+import org.apache.derbyTesting.junit.JDBC;
+
+/**
+ * <p>
+ * Old versions visible to the upgrade machinery.
+ * </p>
+ */
+public class OldVersions
+{
+ private static int[][] VERSIONS =
+ {
+ {10, 0, 2, 1}, // 10.0.2.1 (incubator release)
+ {10, 1, 1, 0}, // 10.1.1.0 (Aug 3, 2005 / SVN 208786)
+ {10, 1, 2, 1}, // 10.1.2.1 (Nov 18, 2005 / SVN 330608)
+ {10, 1, 3, 1}, // 10.1.3.1 (Jun 30, 2006 / SVN 417277)
+ {10, 2, 1, 6}, // 10.2.1.6 (Oct 02, 2006 / SVN 452058)
+ {10, 2, 2, 0}, // 10.2.2.0 (Dec 12, 2006 / SVN 485682)
+ {10, 3, 1, 4}, // 10.3.1.4 (Aug 1, 2007 / SVN 561794)
+ {10, 3, 3, 0}, // 10.3.3.0 (May 12, 2008 / SVN 652961)
+ {10, 4, 1, 3}, // 10.4.1.3 (April 24, 2008 / SVN 648739)
+ {10, 4, 2, 0}, // 10.4.2.0 (September 05, 2008 / SVN 693552)
+ };
+
+ /**
+ * <p>
+ * Get an array of versions supported by this platform.
+ * </p>
+ */
+ public static int[][] getSupportedVersions()
+ {
+ int[][] old = null;
+
+ if ( UpgradeRun.oldVersionsPath != null )
+ {
+ old = getVersions(UpgradeRun.oldVersionsPath);
+ }
+
+ if ( old == null ) { old = VERSIONS; }
+
+ show( old );
+
+ return getSupportedVersions( old );
+ }
+
+ /**
+ * <p>
+ * Squeeze the supported versions out of any array of candidate versions.
+ * </p>
+ */
+ private static int[][] getSupportedVersions( int[][] old )
+ {
+ ArrayList list = new ArrayList();
+ int count = old.length;
+
+ for (int i = 0; i < count; i++) {
+ // JSR169 support was only added with 10.1, so don't
+ // run 10.0 to later upgrade if that's what our jvm is supporting.
+ if ((JDBC.vmSupportsJSR169() &&
+ (old[i][0]==10) && (old[i][1]==0))) {
+ traceit("Skipping 10.0 on JSR169");
+ continue;
+ }
+ // Derby 10.3.1.4 does not boot on the phoneME advanced platform,
+ // (see DERBY-3176) so don't run upgrade tests in this combination.
+ if ( System.getProperty("java.vm.name").equals("CVM")
+ && System.getProperty("java.vm.version").startsWith("phoneme")
+ && old[i][0]==10 && old[i][1]==3
+ && old[i][2]==1 && old[i][3]==4 ) {
+ traceit("Skipping 10.3.1.4 on CVM/phoneme");
+ continue;
+ }
+
+ // otherwise, it's a supported version
+ list.add( old[ i ] );
+ }
+
+ int[][] result = new int[ list.size() ][ 4 ];
+ list.toArray( result );
+
+ return result;
+ }
+
+ private static int[][] getVersions(String oldVersionsPath)
+ {
+ BufferedReader br = null;
+ try{
+ FileReader fr = new FileReader(oldVersionsPath);
+ br = new BufferedReader(fr);
+ }
+ catch (java.io.FileNotFoundException fNFE)
+ {
+ alarm("File '" + oldVersionsPath
+ + "' was not found, using default old versions for upgrade tests.");
+ return null;
+ }
+ traceit("Run upgrade tests on versions defined in '" + oldVersionsPath + "'");
+ return getVersions(br, oldVersionsPath);
+ }
+
+ private static int[][] getVersions(BufferedReader br, String oldVersionsPath)
+ {
+ int[][] versionArray = new int[256][4];
+
+ int versions = 0;
+
+ String line = null;
+ int lineNum = 0;
+ try {
+ while ((line = br.readLine()) != null) {
+ lineNum++;
+ /* Ignore lines not matching the regexp: "^[\\d]+\\.[\\d]+\\.[\\d]+\\.[\\d]"
+ * NB. java.util.regex.Matcher and java.util.regex.Pattern can not be
+ * used on small devices(JSR219).
+ */
+ try {
+ String[] parts = split4(line,'.');
+ // String[] parts = line.split("\\."); // JSR219 does NOT have String.split()!
+ if (parts.length >= 3) {
+
+ int[] vstr = new int[4];
+ for (int i = 0; i < 4; i++) // Using first 4 values
+ {
+ String str = parts[i];
+ if (i == 3) { // Clean... remove trailing non-digits
+ str = clean(str,"0123456789");
+ }
+ vstr[i] = Integer.parseInt(str);
+ }
+ versionArray[versions++] = vstr;
+ } else {
+ alarm("Illegal version format on: " + line);
+ }
+ } catch (NumberFormatException nfe) {
+ alarm("NumberFormatException on line " + lineNum + ": " + line + ": " + " " + nfe.getMessage());
+ } catch (ArrayIndexOutOfBoundsException aie) {
+ alarm("ArrayIndexOutOfBoundsException on line " + lineNum + ": " + line + ": " + " " + aie.getMessage());
+ }
+ }
+ } catch (IOException ioe) {
+ alarm("Error reading from file: " + oldVersionsPath + ioe.getMessage());
+ }
+
+ int[][] finalVERSIONS = new int[versions][4];
+ for (int v = 0; v < versions; v++) {
+ finalVERSIONS[v] = versionArray[v];
+ }
+ return finalVERSIONS;
+
+ }
+
+ private static void show( int[][] old ) {
+ traceit("Upgrade test versions listed:");
+ for (int o = 0; o < old.length; o++) {
+ String ver = "";
+ for (int i = 0; i < old[o].length; i++) {
+ if (i == 0) {
+ ver = "" + old[o][i];
+ } else {
+ ver = ver + "." + old[o][i];
+ }
+ }
+ traceit(ver);
+ }
+ }
+ private static String[] split4(String l, char c)
+ {
+ String[] res = new String[4];
+ try{
+ int p0 = l.indexOf(c);
+ if (p0<0) return res;
+
+ res[0] = l.substring(0, p0);
+ int p1 = l.indexOf(c,p0+1);
+ if (p1<0) return res;
+
+ res[1] = l.substring(p0+1, p1);
+ int p2 = l.indexOf(c,p1+1);
+ if (p2<0) return res;
+
+ res[2] = l.substring(p1+1, p2);
+ int p3 = l.indexOf(c,p2+1);
+ if (p3<0) p3=l.length();
+
+ res[3] = l.substring(p2+1, p3);
+
+ } catch(StringIndexOutOfBoundsException sie){
+ println("split4 StringIndexOutOfBoundsException: "+sie.getMessage());
+ sie.printStackTrace();
+ }
+ return res;
+ }
+ private static String clean(String l, String allowed)
+ {
+ for (int i=0;i<l.length();i++)
+ {
+ if (!matches(l.charAt(i),allowed))
+ {
+ return l.substring(0,i);
+ }
+ }
+ return l;
+ }
+ private static boolean matches(char c, String allowed)
+ {
+ for (int j=0;j<allowed.length();j++)
+ {
+ if (allowed.charAt(j) == c) return true;
+ }
+ return false;
+ }
+
+ private static void println( String text ) { BaseTestCase.println( text ); }
+ private static void traceit( String text ) { BaseTestCase.traceit( text ); }
+ private static void alarm( String text ) { BaseTestCase.alarm( text ); }
+
+}
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/OldVersions.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/PhaseChanger.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/PhaseChanger.java?rev=764912&r1=764911&r2=764912&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/PhaseChanger.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/PhaseChanger.java Tue Apr 14 18:23:15 2009
@@ -79,7 +79,7 @@
if (loader != null) {
previousLoader = Thread.currentThread().getContextClassLoader();
- setThreadLoader(loader);
+ UpgradeClassLoader.setThreadLoader(loader);
}
DataSource ds = JDBCDataSource.getDataSource();
@@ -148,7 +148,7 @@
if (loader != null)
- setThreadLoader(previousLoader);
+ UpgradeClassLoader.setThreadLoader(previousLoader);
loader = null;
previousLoader = null;
@@ -156,26 +156,4 @@
UpgradeChange.oldVersion.set(null);
}
- private void setThreadLoader(final ClassLoader which) {
-
- AccessController.doPrivileged
- (new java.security.PrivilegedAction(){
-
- public Object run() {
- java.lang.Thread.currentThread().setContextClassLoader(which);
- return null;
- }
- });
- }
-
- private ClassLoader getThreadLoader() {
-
- return (ClassLoader) AccessController.doPrivileged
- (new java.security.PrivilegedAction(){
-
- public Object run() {
- return Thread.currentThread().getContextClassLoader();
- }
- });
- }
}
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeClassLoader.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeClassLoader.java?rev=764912&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeClassLoader.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeClassLoader.java Tue Apr 14 18:23:15 2009
@@ -0,0 +1,246 @@
+/*
+
+Derby - Class org.apache.derbyTesting.functionTests.tests.upgradeTests.UpgradeClassLoader
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+package org.apache.derbyTesting.functionTests.tests.upgradeTests;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.AccessController;
+import java.util.Properties;
+
+import junit.extensions.TestSetup;
+import junit.framework.Assert;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.derbyTesting.junit.BaseTestCase;
+
+/**
+ * <p>
+ * This class factors out the machinery needed to wrap a class loader around
+ * the jar files for an old release.
+ * </p>
+ */
+public class UpgradeClassLoader
+{
+ private static final String[] jarFiles = {
+ "derby.jar",
+ //"derbynet.jar",
+ //"derbyclient.jar",
+ //"derbytools.jar"
+ };
+
+ static final String oldVersionsPath;
+ static final String jarPath;
+
+ static {
+
+ oldVersionsPath = (String) AccessController.doPrivileged
+ (new java.security.PrivilegedAction(){
+
+ public Object run(){
+ return System.getProperty(_Suite.OLD_VERSIONS_PATH_PROPERTY);
+
+ }
+
+ }
+ );
+
+ jarPath = (String ) AccessController.doPrivileged
+ (new java.security.PrivilegedAction(){
+
+ public Object run(){
+ return System.getProperty(_Suite.OLD_RELEASE_PATH_PROPERTY);
+
+ }
+
+ }
+ );
+ }
+
+ protected static String getTextVersion(int[] iv)
+ {
+ String version = iv[0] + "." + iv[1] +
+ "." + iv[2] + "." + iv[3];
+ return version;
+ }
+
+ /**
+ * <p>
+ * Wrap a class loader around the given version.
+ * </p>
+ */
+ public static ClassLoader makeClassLoader( final int[] version )
+ {
+ ClassLoader oldLoader = (ClassLoader )AccessController.doPrivileged
+ (new java.security.PrivilegedAction(){
+
+ public Object run(){
+ return createClassLoader(version);
+
+ }
+
+ }
+ );
+
+ if (oldLoader == null)
+ {
+ BaseTestCase.traceit("Empty: Skip upgrade Tests (no jars) for " + getTextVersion(version));
+ }
+
+ return oldLoader;
+ }
+
+ /**
+ * <p>
+ * Force this thread to use a specific class loader.
+ * </p>
+ */
+ public static void setThreadLoader(final ClassLoader which) {
+
+ AccessController.doPrivileged
+ (new java.security.PrivilegedAction(){
+
+ public Object run() {
+ java.lang.Thread.currentThread().setContextClassLoader(which);
+ return null;
+ }
+ });
+ }
+
+ /**
+ * <p>
+ * Retrieve the class loader currently being used by this thread.
+ * </p>
+ */
+ public static ClassLoader getThreadLoader() {
+
+ return (ClassLoader) AccessController.doPrivileged
+ (new java.security.PrivilegedAction(){
+
+ public Object run() {
+ return Thread.currentThread().getContextClassLoader();
+ }
+ });
+ }
+
+ /**
+ * Get the location of jars of old release. The location is specified
+ * in the property derbyTesting.oldReleasePath. If derbyTesting.oldReleasePath
+ * is set to the empty string it is ignored.
+ *
+ * @return location of jars of old release
+ */
+ private static String getOldJarLocation(int[] oldVersion) {
+
+ if (jarPath == null || jarPath.length() == 0)
+ return null;
+
+ String version = getTextVersion(oldVersion);
+ String jarLocation = jarPath + File.separator + version;
+
+ return jarLocation;
+ }
+
+ /**
+ * Get the location of jars of old release, using the url for svn at apache.
+ *
+ * @return location of jars of old release
+ */
+ private static String getOldJarURLLocation(int[] oldVersion) {
+
+ String oldJarUrl = _Suite.OLD_JAR_URL;
+
+ String version = getTextVersion(oldVersion);
+ String jarLocation = oldJarUrl + "/" + version;
+
+ return jarLocation;
+ }
+
+ /**
+ * Create a class loader using jars in the specified location. Add all jars
+ * specified in jarFiles and the testing jar.
+ *
+ * @param version the Derby version to create a classloader for.
+ * @return class loader
+ */
+ private static ClassLoader createClassLoader(int[] version)
+ {
+ URL[] url = new URL[jarFiles.length];
+
+ String jarLocation = getOldJarLocation(version);
+
+ if (jarLocation != null)
+ {
+ File lib = new File(jarLocation);
+
+ // If the jars do not exist then return null
+ // and the caller will set up to skip this.
+ if (!lib.exists()){
+ BaseTestCase.alarm("Non-existing location for jar files: '"
+ + jarLocation + "'. Upgrade tests can NOT be run!");
+ return null;
+ }
+
+ for (int i=0; i < jarFiles.length; i++) {
+ try {
+ url[i] = new File(lib, jarFiles[i]).toURL();
+ } catch (MalformedURLException e) {
+ Assert.fail(e.toString());
+ }
+ }
+ }
+ else
+
+ // if the property was not set, attempt to access the jars from
+ // the saved svn location.
+ // Note, this means the test fails if there is no network connection
+ // (or the server at apache is down) unless the property is set
+ // to a valid location
+ {
+ String oldURLJarLocation = getOldJarURLLocation(version);
+ for (int i=0; i < jarFiles.length; i++) {
+ try {
+ url[i] = new URL(oldURLJarLocation + "/" + jarFiles[i]);
+ Object dummy = url[i].getContent(); // IOException if not available.
+ } catch (MalformedURLException e) {
+ Assert.fail(e.toString());
+ } catch (IOException e) {
+ BaseTestCase.alarm("IOException msg: '" + e.getMessage() + "'."
+ + " Upgrade tests can NOT be run!");
+ return null;
+ }
+
+ }
+ }
+
+ // Specify null for parent class loader to avoid mixing up
+ // jars specified in the system classpath
+ return new URLClassLoader(url, null);
+ }
+
+}
+
+
+
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeClassLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeRun.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeRun.java?rev=764912&r1=764911&r2=764912&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeRun.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/UpgradeRun.java Tue Apr 14 18:23:15 2009
@@ -50,14 +50,8 @@
* connections.
*
*/
-class UpgradeRun {
- private static final String[] jarFiles = {
- "derby.jar",
- //"derbynet.jar",
- //"derbyclient.jar",
- //"derbytools.jar"
- };
-
+class UpgradeRun extends UpgradeClassLoader
+{
/**
* Set of additional databases for tests that
@@ -82,60 +76,15 @@
new AdditionalDb("ROLES_10_5", false)
};
- static final String oldVersionsPath;
- static final String jarPath;
-
- static {
-
- oldVersionsPath = (String) AccessController.doPrivileged
- (new java.security.PrivilegedAction(){
-
- public Object run(){
- return System.getProperty(_Suite.OLD_VERSIONS_PATH_PROPERTY);
-
- }
-
- }
- );
-
- jarPath = (String ) AccessController.doPrivileged
- (new java.security.PrivilegedAction(){
-
- public Object run(){
- return System.getProperty(_Suite.OLD_RELEASE_PATH_PROPERTY);
-
- }
-
- }
- );
- }
-
- private static String getTextVersion(int[] iv)
- {
- String version = iv[0] + "." + iv[1] +
- "." + iv[2] + "." + iv[3];
- return version;
- }
-
public final static Test suite(final int[] version) {
- ClassLoader oldLoader = (ClassLoader )AccessController.doPrivileged
- (new java.security.PrivilegedAction(){
-
- public Object run(){
- return createClassLoader(version);
-
- }
-
- }
- );
+ ClassLoader oldLoader = makeClassLoader( version );
// If no jars then just skip.
if (oldLoader == null)
{
TestSuite suite = new TestSuite(
"Empty: Skipped upgrade Tests (no jars) for " + getTextVersion(version));
- BaseTestCase.traceit("Empty: Skip upgrade Tests (no jars) for " + getTextVersion(version));
return suite;
}
@@ -283,101 +232,6 @@
return TestConfiguration.connectionDSDecorator(suite);
}
- /**
- * Get the location of jars of old release. The location is specified
- * in the property derbyTesting.oldReleasePath. If derbyTesting.oldReleasePath
- * is set to the empty string it is ignored.
- *
- * @return location of jars of old release
- */
- private static String getOldJarLocation(int[] oldVersion) {
-
- if (jarPath == null || jarPath.length() == 0)
- return null;
-
- String version = getTextVersion(oldVersion);
- String jarLocation = jarPath + File.separator + version;
-
- return jarLocation;
- }
-
- /**
- * Get the location of jars of old release, using the url for svn at apache.
- *
- * @return location of jars of old release
- */
- private static String getOldJarURLLocation(int[] oldVersion) {
-
- String oldJarUrl = _Suite.OLD_JAR_URL;
-
- String version = getTextVersion(oldVersion);
- String jarLocation = oldJarUrl + "/" + version;
-
- return jarLocation;
- }
-
- /**
- * Create a class loader using jars in the specified location. Add all jars
- * specified in jarFiles and the testing jar.
- *
- * @param version the Derby version to create a classloader for.
- * @return class loader
- */
- private static ClassLoader createClassLoader(int[] version)
- {
- URL[] url = new URL[jarFiles.length];
-
- String jarLocation = getOldJarLocation(version);
-
- if (jarLocation != null)
- {
- File lib = new File(jarLocation);
-
- // If the jars do not exist then return null
- // and the caller will set up to skip this.
- if (!lib.exists()){
- BaseTestCase.alarm("Non-existing location for jar files: '"
- + jarLocation + "'. Upgrade tests can NOT be run!");
- return null;
- }
-
- for (int i=0; i < jarFiles.length; i++) {
- try {
- url[i] = new File(lib, jarFiles[i]).toURL();
- } catch (MalformedURLException e) {
- Assert.fail(e.toString());
- }
- }
- }
- else
-
- // if the property was not set, attempt to access the jars from
- // the saved svn location.
- // Note, this means the test fails if there is no network connection
- // (or the server at apache is down) unless the property is set
- // to a valid location
- {
- String oldURLJarLocation = getOldJarURLLocation(version);
- for (int i=0; i < jarFiles.length; i++) {
- try {
- url[i] = new URL(oldURLJarLocation + "/" + jarFiles[i]);
- Object dummy = url[i].getContent(); // IOException if not available.
- } catch (MalformedURLException e) {
- Assert.fail(e.toString());
- } catch (IOException e) {
- BaseTestCase.alarm("IOException msg: '" + e.getMessage() + "'."
- + " Upgrade tests can NOT be run!");
- return null;
- }
-
- }
- }
-
- // Specify null for parent class loader to avoid mixing up
- // jars specified in the system classpath
- return new URLClassLoader(url, null);
- }
-
/**
* When running against certains old releases in Java SE 6
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/_Suite.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/_Suite.java?rev=764912&r1=764911&r2=764912&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/_Suite.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/_Suite.java Tue Apr 14 18:23:15 2009
@@ -20,9 +20,6 @@
*/
package org.apache.derbyTesting.functionTests.tests.upgradeTests;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
import junit.framework.Test;
import junit.framework.TestSuite;
@@ -115,7 +112,7 @@
* when running tests.
*/
- private static OldVersions old;
+ private static int[][] old;
/**
* Use suite method instead.
@@ -129,180 +126,15 @@
+ OLD_RELEASE_PATH_PROPERTY + "=" + UpgradeRun.jarPath
+ " / " + OLD_VERSIONS_PATH_PROPERTY + "=" + UpgradeRun.oldVersionsPath;
TestSuite suite = new TestSuite(id);
-
- if ( UpgradeRun.oldVersionsPath != null )
- {
- old = new OldVersions(UpgradeRun.oldVersionsPath);
- }
- OldVersions.show();
- for (int i = 0; i < old.VERSIONS.length; i++) {
- // JSR169 support was only added with 10.1, so don't
- // run 10.0 to later upgrade if that's what our jvm is supporting.
- if ((JDBC.vmSupportsJSR169() &&
- (old.VERSIONS[i][0]==10) && (old.VERSIONS[i][1]==0))) {
- traceit("Skipping 10.0 on JSR169");
- continue;
- }
- // Derby 10.3.1.4 does not boot on the phoneME advanced platform,
- // (see DERBY-3176) so don't run upgrade tests in this combination.
- if ( System.getProperty("java.vm.name").equals("CVM")
- && System.getProperty("java.vm.version").startsWith("phoneme")
- && old.VERSIONS[i][0]==10 && old.VERSIONS[i][1]==3
- && old.VERSIONS[i][2]==1 && old.VERSIONS[i][3]==4 ) {
- traceit("Skipping 10.3.1.4 on CVM/phoneme");
- continue;
- }
- suite.addTest(UpgradeRun.suite(old.VERSIONS[i]));
+ old = OldVersions.getSupportedVersions();
+
+ for (int i = 0; i < old.length; i++) {
+ suite.addTest(UpgradeRun.suite(old[i]));
}
return suite;
}
- private static class OldVersions{
-
- private static int[][] VERSIONS =
- {
- {10, 0, 2, 1}, // 10.0.2.1 (incubator release)
- {10, 1, 1, 0}, // 10.1.1.0 (Aug 3, 2005 / SVN 208786)
- {10, 1, 2, 1}, // 10.1.2.1 (Nov 18, 2005 / SVN 330608)
- {10, 1, 3, 1}, // 10.1.3.1 (Jun 30, 2006 / SVN 417277)
- {10, 2, 1, 6}, // 10.2.1.6 (Oct 02, 2006 / SVN 452058)
- {10, 2, 2, 0}, // 10.2.2.0 (Dec 12, 2006 / SVN 485682)
- {10, 3, 1, 4}, // 10.3.1.4 (Aug 1, 2007 / SVN 561794)
- {10, 3, 3, 0}, // 10.3.3.0 (May 12, 2008 / SVN 652961)
- {10, 4, 1, 3}, // 10.4.1.3 (April 24, 2008 / SVN 648739)
- {10, 4, 2, 0}, // 10.4.2.0 (September 05, 2008 / SVN 693552)
- };
- private OldVersions(String oldVersionsPath)
- {
- BufferedReader br = null;
- try{
- FileReader fr = new FileReader(oldVersionsPath);
- br = new BufferedReader(fr);
- }
- catch (java.io.FileNotFoundException fNFE)
- {
- alarm("File '" + oldVersionsPath
- + "' was not found, using default old versions for upgrade tests.");
- return;
- }
- traceit("Run upgrade tests on versions defined in '" + oldVersionsPath + "'");
- getVersions(br, oldVersionsPath);
- }
-
- private void getVersions(BufferedReader br, String oldVersionsPath)
- {
- VERSIONS = new int[256][4];
-
- int versions = 0;
-
- String line = null;
- int lineNum = 0;
- try {
- while ((line = br.readLine()) != null) {
- lineNum++;
- /* Ignore lines not matching the regexp: "^[\\d]+\\.[\\d]+\\.[\\d]+\\.[\\d]"
- * NB. java.util.regex.Matcher and java.util.regex.Pattern can not be
- * used on small devices(JSR219).
- */
- try {
- String[] parts = split4(line,'.');
- // String[] parts = line.split("\\."); // JSR219 does NOT have String.split()!
- if (parts.length >= 3) {
-
- int[] vstr = new int[4];
- for (int i = 0; i < 4; i++) // Using first 4 values
- {
- String str = parts[i];
- if (i == 3) { // Clean... remove trailing non-digits
- str = clean(str,"0123456789");
- }
- vstr[i] = Integer.parseInt(str);
- }
- VERSIONS[versions++] = vstr;
- } else {
- alarm("Illegal version format on: " + line);
- }
- } catch (NumberFormatException nfe) {
- alarm("NumberFormatException on line " + lineNum + ": " + line + ": " + " " + nfe.getMessage());
- } catch (ArrayIndexOutOfBoundsException aie) {
- alarm("ArrayIndexOutOfBoundsException on line " + lineNum + ": " + line + ": " + " " + aie.getMessage());
- }
- }
- } catch (IOException ioe) {
- alarm("Error reading from file: " + oldVersionsPath + ioe.getMessage());
- }
-
- int[][] finalVERSIONS = new int[versions][4];
- for (int v = 0; v < versions; v++) {
- finalVERSIONS[v] = VERSIONS[v];
- }
- VERSIONS = finalVERSIONS;
-
- }
-
- private static void show() {
- traceit("Upgrade test versions listed:");
- for (int o = 0; o < VERSIONS.length; o++) {
- String ver = "";
- for (int i = 0; i < VERSIONS[o].length; i++) {
- if (i == 0) {
- ver = "" + VERSIONS[o][i];
- } else {
- ver = ver + "." + VERSIONS[o][i];
- }
- }
- traceit(ver);
- }
- }
- private static String[] split4(String l, char c)
- {
- String[] res = new String[4];
- try{
- int p0 = l.indexOf(c);
- if (p0<0) return res;
-
- res[0] = l.substring(0, p0);
- int p1 = l.indexOf(c,p0+1);
- if (p1<0) return res;
-
- res[1] = l.substring(p0+1, p1);
- int p2 = l.indexOf(c,p1+1);
- if (p2<0) return res;
-
- res[2] = l.substring(p1+1, p2);
- int p3 = l.indexOf(c,p2+1);
- if (p3<0) p3=l.length();
-
- res[3] = l.substring(p2+1, p3);
-
- } catch(StringIndexOutOfBoundsException sie){
- println("split4 StringIndexOutOfBoundsException: "+sie.getMessage());
- sie.printStackTrace();
- }
- return res;
- }
- private static String clean(String l, String allowed)
- {
- for (int i=0;i<l.length();i++)
- {
- if (!matches(l.charAt(i),allowed))
- {
- return l.substring(0,i);
- }
- }
- return l;
- }
- private static boolean matches(char c, String allowed)
- {
- for (int j=0;j<allowed.length();j++)
- {
- if (allowed.charAt(j) == c) return true;
- }
- return false;
- }
-
- }
}