Return-Path: Delivered-To: apmail-db-derby-commits-archive@www.apache.org Received: (qmail 97775 invoked from network); 5 Jan 2007 00:05:04 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 5 Jan 2007 00:05:04 -0000 Received: (qmail 31148 invoked by uid 500); 5 Jan 2007 00:05:11 -0000 Delivered-To: apmail-db-derby-commits-archive@db.apache.org Received: (qmail 31118 invoked by uid 500); 5 Jan 2007 00:05:11 -0000 Mailing-List: contact derby-commits-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: "Derby Development" List-Id: Delivered-To: mailing list derby-commits@db.apache.org Received: (qmail 31106 invoked by uid 99); 5 Jan 2007 00:05:11 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jan 2007 16:05:11 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jan 2007 16:05:03 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id D8E471A981A; Thu, 4 Jan 2007 16:04:06 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r492822 - in /db/derby/code/trunk/java/testing/org/apache/derbyTesting: functionTests/tests/derbynet/ functionTests/util/ junit/ Date: Fri, 05 Jan 2007 00:04:06 -0000 To: derby-commits@db.apache.org From: djd@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070105000406.D8E471A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: djd Date: Thu Jan 4 16:04:05 2007 New Revision: 492822 URL: http://svn.apache.org/viewvc?view=rev&rev=492822 Log: DERBY-2213 (partial) Add a set of utilities in junit.Derby that allows test code to determine which Derby functionality is available, so that tests can exclude themselves if they require tools, engine, client and/or server. Allows the junit tests to be setup so that they be run with different classpaths that are a subset of the full set of jars. Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/Derby.java (with props) Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/_Suite.java db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/ScriptTestCase.java db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/JDBC.java db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/SecurityManagerSetup.java db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/TestConfiguration.java Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/_Suite.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/_Suite.java?view=diff&rev=492822&r1=492821&r2=492822 ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/_Suite.java (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/_Suite.java Thu Jan 4 16:04:05 2007 @@ -22,6 +22,7 @@ package org.apache.derbyTesting.functionTests.tests.derbynet; import org.apache.derbyTesting.junit.BaseTestCase; +import org.apache.derbyTesting.junit.Derby; import junit.framework.Test; import junit.framework.TestSuite; @@ -43,13 +44,19 @@ public static Test suite() { TestSuite suite = new TestSuite("derbynet"); - - suite.addTest(ByteArrayCombinerStreamTest.suite()); + suite.addTest(PrepareStatementTest.suite()); suite.addTest(ShutDownDBWhenNSShutsDownTest.suite()); - suite.addTest(SqlExceptionTest.suite()); suite.addTest(SuicideOfStreamingTest.suite()); suite.addTest(DRDAProtocolTest.suite()); + + // These tests references a client class directly + // thus causing class not found exceptions if the + // client code is not in the classpath. + if (Derby.hasClient()) { + suite.addTest(ByteArrayCombinerStreamTest.suite()); + suite.addTest(SqlExceptionTest.suite()); + } return suite; } Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/ScriptTestCase.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/ScriptTestCase.java?view=diff&rev=492822&r1=492821&r2=492822 ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/ScriptTestCase.java (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/ScriptTestCase.java Thu Jan 4 16:04:05 2007 @@ -23,7 +23,10 @@ import java.net.URL; import java.sql.Connection; +import org.apache.derbyTesting.junit.Derby; + import junit.framework.Test; +import junit.framework.TestSuite; /** * Run a .sql script as a test comparing it to @@ -71,6 +74,11 @@ */ public static Test getIJConfig(Test test) { + // Need the tools to run the scripts as this + // test uses ij as the script runner. + if (!Derby.hasTools()) + return new TestSuite("empty: no tools support"); + // No decorator needed currently. return test; } Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/Derby.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/Derby.java?view=auto&rev=492822 ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/Derby.java (added) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/Derby.java Thu Jan 4 16:04:05 2007 @@ -0,0 +1,104 @@ +/* + * + * Derby - Class org.apache.derbyTesting.functionTests.util.Derby + * + * 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.junit; + +import java.net.URL; +import java.sql.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + +import junit.framework.Assert; + +/** + * Derby related utility methods for the JUnit tests. + * The class assumes the tests are either being run + * from the build classes folder or from the standard + * jar files (or a subset of the standard jars). + *
+ * If the tests are being run from the classes then + * it is assumed all the functionality is available, + * otherwise the functionality will be driven from which + * jar files are on the classpath. E.g. if only + * derby.jar is on the classpath then the hasXXX() methods + * will return false except hasEmbedded(). + */ +public class Derby { + + /** + * Returns true if the embedded engine is available to the tests. + */ + public static boolean hasEmbedded() + { + // classes folder - assume all is available. + if (!SecurityManagerSetup.isJars) + return true; + + return hasCorrectJar("/derby.jar", + "org.apache.derby.authentication.UserAuthenticator"); + } + /** + * Returns true if the network server is available to the tests. + */ + public static boolean hasServer() + { + // classes folder - assume all is available. + if (!SecurityManagerSetup.isJars) + return true; + + return hasCorrectJar("/derbynet.jar", + "org.apache.derby.drda.NetworkServerControl"); + } + /** + * Returns true if the tools are available to the tests. + */ + public static boolean hasTools() + { + // classes folder - assume all is available. + if (!SecurityManagerSetup.isJars) + return true; + + return hasCorrectJar("/derbytools.jar", + "org.apache.derby.tools.ij"); + } + /** + * Returns true if the derby client is available to the tests. + */ + public static boolean hasClient() + { + // classes folder - assume all is available. + if (!SecurityManagerSetup.isJars) + return true; + + return hasCorrectJar("/derbyclient.jar", + "org.apache.derby.jdbc.ClientDataSource"); + } + + private static boolean hasCorrectJar(String jarName, String className) + { + URL url = SecurityManagerSetup.getURL(className); + if (url == null) + return false; + + return url.toExternalForm().endsWith(jarName); + } +} Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/Derby.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/JDBC.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/JDBC.java?view=diff&rev=492822&r1=492821&r2=492822 ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/JDBC.java (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/JDBC.java Thu Jan 4 16:04:05 2007 @@ -59,7 +59,7 @@ * @param className Class to attempt load on. * @return true if class can be loaded, false otherwise. */ - protected static boolean haveClass(String className) + static boolean haveClass(String className) { try { Class.forName(className); Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/SecurityManagerSetup.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/SecurityManagerSetup.java?view=diff&rev=492822&r1=492821&r2=492822 ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/SecurityManagerSetup.java (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/SecurityManagerSetup.java Thu Jan 4 16:04:05 2007 @@ -236,21 +236,15 @@ //We need the junit classes to instantiate this class, so the //following should not cause runtime errors. - URL junit = null; - junit = getURL(junit.framework.Test.class); - classPathSet.setProperty("derbyTesting.junit", junit == null ? "" : junit.toString()); + URL junit = getURL(junit.framework.Test.class); + if (junit != null) + classPathSet.setProperty("derbyTesting.junit", junit.toExternalForm()); - URL antjunit = null; - Class antjunitclass = null; - try { - // Load indirectly so we don't need ant-junit.jar at compile time. - antjunitclass = Class.forName("org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner"); - antjunit = getURL(antjunitclass); - classPathSet.setProperty("derbyTesting.antjunit", antjunit == null ? "" : antjunit.toString()); - } catch (java.lang.ClassNotFoundException e) { - // Not running in Ant, do nothing. - antjunit = null; - } + // Load indirectly so we don't need ant-junit.jar at compile time. + URL antjunit = getURL("org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner"); + if (antjunit != null) + classPathSet.setProperty("derbyTesting.antjunit", antjunit.toExternalForm()); + /* When inserting XML values that use external DTD's, the JAXP * parser needs permission to read the DTD files. So here we set @@ -279,22 +273,13 @@ } isJars = true; - URL derby = null; - try { - derby = getURL(org.apache.derby.jdbc.EmbeddedSimpleDataSource.class); - } catch (java.lang.NoClassDefFoundError e) { - derby = testing; - } - classPathSet.setProperty("derbyTesting.codejar", stripJar(derby)); + URL derby = getURL("org.apache.derby.jdbc.EmbeddedSimpleDataSource"); + if (derby != null) + classPathSet.setProperty("derbyTesting.codejar", stripJar(derby)); - URL client = null; - try { - client = getURL(org.apache.derby.jdbc.ClientDataSource.class); - } catch (java.lang.NoClassDefFoundError e) { - client = derby; - } - - classPathSet.setProperty("derbyTesting.clientjar", stripJar(client)); + URL client = getURL("org.apache.derby.jdbc.ClientDataSource"); + if (client != null) + classPathSet.setProperty("derbyTesting.clientjar", stripJar(client)); return false; } @@ -323,11 +308,23 @@ String ef = url.toExternalForm(); return ef.substring(0, ef.lastIndexOf('/') + 1); } + + /** + * Get the URL of the code base from a class name. + * If the class cannot be loaded, null is returned. + */ + static URL getURL(String className) { + try { + return getURL(Class.forName(className)); + } catch (ClassNotFoundException e) { + return null; + } + } /** * Get the URL of the code base from a class. */ - protected static URL getURL(final Class cl) + static URL getURL(final Class cl) { return (URL) AccessController.doPrivileged(new java.security.PrivilegedAction() { Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/TestConfiguration.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/TestConfiguration.java?view=diff&rev=492822&r1=492821&r2=492822 ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/TestConfiguration.java (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/TestConfiguration.java Thu Jan 4 16:04:05 2007 @@ -250,8 +250,11 @@ */ public static Test clientServerDecorator(Test suite) { - if (JDBC.vmSupportsJSR169()) - return new TestSuite(); + // Need to have network server and client and not + // running in J2ME (JSR169). + if (!(Derby.hasClient() && Derby.hasServer()) + || JDBC.vmSupportsJSR169()) + return new TestSuite("empty: no network server support"); TestConfiguration config = TestConfiguration.getCurrent();