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 my...@apache.org on 2008/05/31 03:29:00 UTC

svn commit: r661924 - in /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi: InvalidLDAPServerAuthenticationTest.java LDAPAuthenticationTest.java _Suite.java

Author: myrnavl
Date: Fri May 30 18:29:00 2008
New Revision: 661924

URL: http://svn.apache.org/viewvc?rev=661924&view=rev
Log:
DERBY-3659; adding some LDAP tests (patch DERBY-3659-2b.diff).
  Patch contributed by Myrna van Lunteren

Added:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/InvalidLDAPServerAuthenticationTest.java   (with props)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/LDAPAuthenticationTest.java   (with props)
Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/_Suite.java

Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/InvalidLDAPServerAuthenticationTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/InvalidLDAPServerAuthenticationTest.java?rev=661924&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/InvalidLDAPServerAuthenticationTest.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/InvalidLDAPServerAuthenticationTest.java Fri May 30 18:29:00 2008
@@ -0,0 +1,168 @@
+/*
+
+   Derby - Class 
+       org.apache.derbyTesting.functionTests.tests.jdbcapi.InvalidLDAPServerAuthenticationTest
+
+   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.jdbcapi;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.JDBC;
+import org.apache.derbyTesting.junit.JDBCDataSource;
+import org.apache.derbyTesting.junit.SecurityManagerSetup;
+import org.apache.derbyTesting.junit.TestConfiguration;
+
+
+public class InvalidLDAPServerAuthenticationTest extends BaseJDBCTestCase {
+
+    /** Creates a new instance of the Test */
+    public InvalidLDAPServerAuthenticationTest(String name) {
+        super(name);
+    }
+
+    /**
+     * Ensure all connections are not in auto commit mode.
+     */
+    protected void initializeConnection(Connection conn) throws SQLException {
+        conn.setAutoCommit(false);
+    }
+
+    public static Test suite() {
+        if (JDBC.vmSupportsJSR169())
+            return new TestSuite("InvalidLDAPServerAuthenticationTest - cannot" +
+                " run with JSR169 - missing functionality for " +
+                "org.apache.derby.iapi.jdbc.AuthenticationService");
+        
+        // security manager would choke attempting to resolve to the invalid
+        // LDAPServer, so run without
+        TestSuite suite = new TestSuite("InvalidLDAPServerAuthenticationTest");
+        suite.addTest(SecurityManagerSetup.noSecurityManager(baseSuite(
+                "testInvalidLDAPServerConnectionError")));
+        suite.addTest(TestConfiguration.clientServerDecorator(
+                SecurityManagerSetup.noSecurityManager(
+                baseSuite("testInvalidLDAPServerConnectionError"))));
+        return suite;            
+    }
+
+    public static Test baseSuite(String name) {
+        TestSuite suite = new TestSuite(name);
+        Test test = new InvalidLDAPServerAuthenticationTest("testInvalidLDAPServerConnectionError");
+        suite.addTest(test);
+
+        // This test needs to run in a new single use database without connect
+        // for shutdown after, as we're going to make the database unusable
+        return TestConfiguration.singleUseDatabaseDecoratorNoShutdown(suite);
+    }
+
+    protected void setDatabaseProperty(
+            String propertyName, String value, Connection conn) 
+    throws SQLException {
+        CallableStatement setDBP =  conn.prepareCall(
+        "CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(?, ?)");
+        setDBP.setString(1, propertyName);
+        setDBP.setString(2, value);
+        setDBP.execute();
+        setDBP.close();
+    }
+
+    public void testInvalidLDAPServerConnectionError() throws SQLException {
+        // setup 
+        Connection conn = getConnection();
+        // set the ldap properties
+        setDatabaseProperty("derby.connection.requireAuthentication", "true", conn);
+        setDatabaseProperty("derby.authentication.provider", "LDAP", conn);
+        setDatabaseProperty("derby.authentication.server", "noSuchServer", conn);
+        setDatabaseProperty("derby.authentication.ldap.searchBase", "o=dnString", conn);
+        setDatabaseProperty("derby.authentication.ldap.searchFilter","(&(objectClass=inetOrgPerson)(uid=%USERNAME%))", conn);
+        commit();
+        conn.setAutoCommit(true);
+        conn.close();
+        // shutdown the database as system, so the properties take effect
+        TestConfiguration.getCurrent().shutdownDatabase();
+        String dbName = TestConfiguration.getCurrent().getDefaultDatabaseName();
+        
+        // actual test. 
+        // first, try datasource connection
+        DataSource ds = JDBCDataSource.getDataSource(dbName);
+        try {
+            ds.getConnection();
+            fail("expected java.net.UnknownHostException for datasource");
+        } catch (SQLException se) {
+            assertSQLState("08004", se);
+            // with network server, the java.net.UnknownHostException will be in 
+            // derby.log, the client only gets a 08004 and somewhat misleading
+            // warning ('Reason: userid or password invalid')
+            if (usingEmbedded())
+                assertTrue(se.getMessage().indexOf("java.net.UnknownHostException")>1);
+        }
+        // driver manager connection
+        String url2 = TestConfiguration.getCurrent().getJDBCUrl(dbName);
+        try {
+            DriverManager.getConnection(url2,"user","password").close();
+            fail("expected java.net.UnknownHostException for driver");
+        } catch (SQLException se) {
+            assertSQLState("08004", se);
+            // with network server, the java.net.UnknownHostException will be in 
+            // derby.log, the client only gets a 08004 and somewhat misleading
+            // warning ('Reason: userid or password invalid')
+            if (usingEmbedded())
+                assertTrue(se.getMessage().indexOf("java.net.UnknownHostException")>1);
+        }
+        
+        // we need to shutdown the system, or the failed connections
+        // cling to db.lck causing cleanup to fail.
+        // we *can* shutdown because we don't have authentication required
+        // set at system level (only database level).
+        shutdownSystem();
+    }
+    
+    protected void shutdownSystem()throws SQLException {
+        DataSource ds;
+        if (usingEmbedded())
+        {
+            ds = JDBCDataSource.getDataSource();
+            JDBCDataSource.clearStringBeanProperty(ds, "databaseName");
+        }
+        else
+        {
+            // note: with network server/client, you can't set the databaseName
+            // to null, that results in error 08001 - Required DataSource
+            // property databaseName not set.
+            // so, we rely on passing of an empty string for databaseName,
+            // which in the current code is interpreted as system shutdown.
+            ds = JDBCDataSource.getDataSource("");
+        }
+        JDBCDataSource.setBeanProperty(ds, "shutdownDatabase", "shutdown");
+        try {
+            ds.getConnection();
+        } catch (SQLException e) {
+            //do nothing;
+        }
+    }
+}
\ No newline at end of file

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/InvalidLDAPServerAuthenticationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/LDAPAuthenticationTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/LDAPAuthenticationTest.java?rev=661924&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/LDAPAuthenticationTest.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/LDAPAuthenticationTest.java Fri May 30 18:29:00 2008
@@ -0,0 +1,377 @@
+/*
+
+   Derby - Class 
+       org.apache.derbyTesting.functionTests.tests.jdbcapi.LDAPAuthenticationTest
+
+   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.jdbcapi;
+
+import java.io.File;
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Properties;
+
+import javax.sql.DataSource;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.DatabasePropertyTestSetup;
+import org.apache.derbyTesting.junit.JDBC;
+import org.apache.derbyTesting.junit.JDBCDataSource;
+import org.apache.derbyTesting.junit.SecurityManagerSetup;
+import org.apache.derbyTesting.junit.SupportFilesSetup;
+import org.apache.derbyTesting.junit.SystemPropertyTestSetup;
+import org.apache.derbyTesting.junit.TestConfiguration;
+
+// tests that appropriate and invalid connections can be made to 
+// an LDAPServer when property authenticationProvider is set to 'LDAP'.
+// This test assumes at least one valid user (to be passed in) and one
+// additional user (kathy / kathyS) to be setup in ou=People on the
+// LDAPServer.
+public class LDAPAuthenticationTest extends BaseJDBCTestCase {
+
+    private static String ldapServer;
+    private static String ldapPort;
+    private static String dnString;
+    private static String ldapUser; // existing valid user on ldap server
+    private static String ldapPassword; // password for existing valid user on ldap server
+
+    // create own policy file, use the one from XAJNDITest so
+    // we can connect to the ldap server
+    private static String POLICY_FILE_NAME = 
+        "functionTests/tests/jdbcapi/XAJNDITest.policy";
+    private static String TARGET_POLICY_FILE_NAME = "derby_tests.policy";
+    
+    /** Creates a new instance of the Test */
+    public LDAPAuthenticationTest(String name) {
+        super(name);
+    }
+
+    /**
+     * Ensure all connections are not in auto commit mode.
+     */
+    protected void initializeConnection(Connection conn) throws SQLException {
+        conn.setAutoCommit(false);
+    }
+
+    public static Test suite() {
+        if (JDBC.vmSupportsJSR169())
+            return new TestSuite("cannt run with JSR169 - missing functionality" +
+                " for org.apache.derby.iapi.jdbc.AuthenticationService");
+        ldapUser=getSystemProperty("derbyTesting.ldapUser");
+        if (ldapUser == null || ldapUser.length() < 1)
+            return new TestSuite("LDAPAuthenticationTest requires property " +
+                "derbyTesting.ldapUser set to a valid user set up on the " +
+                "ldapServer, eg: -DderbyTesting.ldapUser=CharliesPwd. In addition," +
+                "test requires a user 'kathy', pwd 'kathyS' to be set up");
+        ldapPassword=getSystemProperty("derbyTesting.ldapPassword");
+        if (ldapPassword == null || ldapPassword.length() < 1)
+            return new TestSuite("LDAPAuthenticationTest requires property " +
+                "derbyTesting.ldapPassword set the password of a valid user set" +
+                " up on the ldapServer, eg: -DderbyTesting.ldapPassword=Charlie");
+        ldapServer=getSystemProperty("derbyTesting.ldapServer");
+        if (ldapServer == null || ldapServer.length() < 1)
+            return new TestSuite("LDAPAuthenticationTest requires property " +
+                "derbyTesting.ldapServer set, eg: " +
+                "-DderbyTesting.ldapServer=myldapserver.myorg.org");
+        ldapPort=getSystemProperty("derbyTesting.ldapPort");
+        if (ldapPort == null || ldapPort.length() < 1)
+            return new TestSuite("LDAPAuthenticationTest requires property " +
+                "derbyTesting.ldapPort set, eg: -DderbyTesting.ldapPort=333");
+        dnString=getSystemProperty("derbyTesting.dnString");
+        if (dnString == null || dnString.length() < 1)
+            return new TestSuite("LDAPAuthenticationTest requires property " +
+                "derbyTesting.dnString for setting o=, eg: " +
+                "-DderbyTesting.dnString=myJNDIstring");
+
+        TestSuite suite = new TestSuite("LDAPAuthenticationTest");
+        suite.addTest(baseSuite("LDAPAuthenticationTest:embedded", "testConnection"));
+        suite.addTest(TestConfiguration.clientServerDecorator(
+                baseSuite("LDAPAuthenticationTest:client", "testConnection")));
+        Test test = decorateWithPolicy(suite);
+        return test;            
+    }
+
+    public static Test baseSuite(String name, String fixture) {
+        TestSuite suite = new TestSuite(name);
+        Test test = new LDAPAuthenticationTest(fixture);
+        setBaseProps(suite, test);
+
+        // This test needs to run in a new single use database as we're setting
+        // a number of properties
+        return TestConfiguration.singleUseDatabaseDecorator(suite);
+    }
+
+    protected static void setBaseProps(TestSuite suite, Test test) 
+    {
+        // set some debugging at database level properties
+        Properties props = new Properties();
+        props.setProperty("derby.infolog.append", "true");
+        props.setProperty("derby.debug.true", "AuthenticationTrace");
+        // add some users. these should not be defined on the ldap server
+        props.setProperty("derby.user.system", "manager");
+        props.setProperty("derby.user.Jamie", "theHooligan");
+        suite.addTest(new DatabasePropertyTestSetup (test, props, true));
+    }
+
+    // grant ALL FILES execute, and getPolicy permissions, as well
+    // as resolve/connect for the ldap server identified with the property
+    private static Test decorateWithPolicy(Test test) {
+        String ldapPolicyName = new LDAPAuthenticationTest("test").makeServerPolicyName();
+        //
+        // Install a security manager using the initial policy file.
+        //
+        test = new SecurityManagerSetup(test,ldapPolicyName );
+        // Copy over the policy file we want to use.
+        //
+        test = new SupportFilesSetup(
+            test, null, new String[] {POLICY_FILE_NAME},
+            null, new String[] {TARGET_POLICY_FILE_NAME}
+        );
+        return test;
+    }
+    
+    /**
+     * Construct the name of the server policy file.
+     */
+    private String makeServerPolicyName()
+    {
+        try {
+            String  userDir = getSystemProperty( "user.dir" );
+            String  fileName = userDir + File.separator + SupportFilesSetup.EXTINOUT + File.separator + TARGET_POLICY_FILE_NAME;
+            File      file = new File( fileName );
+            String  urlString = file.toURL().toExternalForm();
+
+            return urlString;
+        }
+        catch (Exception e)
+        {
+            return null;
+        }
+    }
+    
+    protected void tearDown() throws Exception {
+        removeSystemProperty("derby.connection.requireAuthentication");
+        super.tearDown();
+    }
+
+    protected void setDatabaseProperty(
+            String propertyName, String value, Connection conn) 
+    throws SQLException {
+        CallableStatement setDBP =  conn.prepareCall(
+        "CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(?, ?)");
+        setDBP.setString(1, propertyName);
+        setDBP.setString(2, value);
+        setDBP.execute();
+        setDBP.close();
+    }
+
+    protected String getDatabaseProperty(
+            String propertyName, Connection conn) 
+    throws SQLException {
+        PreparedStatement getDBP =  conn.prepareStatement(
+        "VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(?)");
+        getDBP.setString(1, propertyName);
+        ResultSet rs = getDBP.executeQuery();
+        rs.next();
+        String value = rs.getString(1);
+        rs.close();
+        return value;
+    }    
+     
+    public void testConnection() throws SQLException {
+        // setup 
+        String dbName = TestConfiguration.getCurrent().getDefaultDatabaseName();
+        DataSource ds = JDBCDataSource.getDataSource();
+        Connection conn = ds.getConnection("system", "admin");
+        // set the ldap properties
+        setDatabaseProperty("derby.connection.requireAuthentication", "true", conn);
+        setDatabaseProperty("derby.authentication.provider", "LDAP", conn);
+        setDatabaseProperty("derby.authentication.server", ldapServer, conn);
+        setDatabaseProperty("derby.authentication.ldap.searchBase", "o=" + dnString, conn);
+        setDatabaseProperty("derby.authentication.ldap.searchFilter","(&(objectClass=inetOrgPerson)(uid=%USERNAME%))", conn);
+        commit();
+        // shutdown the database as system, so the properties take effect
+        TestConfiguration.getCurrent().shutdownDatabase();
+        conn.close();
+
+        // actual test. 
+        // first attempt simple connection that should succeed
+        ds = JDBCDataSource.getDataSource(dbName);
+        assertLDAPDSConnectionOK(ds, ldapUser, ldapPassword);
+        assertLDAPDrvMgrConnectionOK(dbName, ldapUser, ldapPassword);
+        // try to get a connection for a user that has been added, but who
+        // should *not* be on the ldap server; should fail
+        assertInvalidLDAPDSConnectionFails(ds, "Jamie", "theHooligan");
+        assertInvalidLDAPDrvMgrConnectionFails(dbName, "Jamie", "thHooligan");
+        // try to get a connection using the valid ldapuser, but incorrect pwd
+        assertInvalidLDAPDSConnectionFails(ds, ldapUser, ldapPassword + "ish");
+        assertInvalidLDAPDrvMgrConnectionFails(dbName, ldapUser, ldapPassword + "ish");
+
+        // set the users DN locally
+        Connection conn3 = ds.getConnection(ldapUser, ldapPassword);
+        String tmpString1 = "derby.user." + ldapUser;
+        String tmpString2 = "uid=" + ldapUser + ",ou=People,o=" + dnString; 
+        setDatabaseProperty(tmpString1, tmpString2, conn3);
+        conn3.commit();
+        // restart to let setting take effect
+        JDBCDataSource.setBeanProperty(ds, "shutdownDatabase", "shutdown");
+        // shutdown really only happens on next attempt to connect
+        try {
+            ds.getConnection(ldapUser, ldapPassword);
+            fail("expected system shutdown resulting in 08006 error.");
+        } catch (SQLException e) {
+            assertSQLState("08006", e);
+        }
+        conn3.close();
+        
+        // It is now required to re-establish the name
+        // of the database...
+        dbName = TestConfiguration.getCurrent().getDefaultDatabaseName();
+        ds = JDBCDataSource.getDataSource(dbName);
+        // test again
+        // connect using a valid ldap user/pwd
+        assertLDAPDSConnectionOK(ds, ldapUser, ldapPassword);
+        assertLDAPDrvMgrConnectionOK(dbName, ldapUser, ldapPassword);
+        // try to use a not specified elsewhere, but hopefully valid ldapUser:
+        // as no local DN is cached, look-up will be performed with the default
+        // search filter.
+        assertLDAPDSConnectionOK(ds, "kathy", "kathyS");
+        assertLDAPDrvMgrConnectionOK(dbName, "kathy", "kathyS");
+        // again try to get a connection for a user that has been added, but
+        // should *not* be on the ldap server; should fail
+        assertInvalidLDAPDSConnectionFails(ds, "Jamie", "theHooligan");
+        assertInvalidLDAPDrvMgrConnectionFails(dbName, "Jamie", "theHooligan");
+        // try to get a connection using the valid ldapuser, but incorrect pwd
+        assertInvalidLDAPDSConnectionFails(ds, ldapUser, ldapPassword + "ish");
+        assertInvalidLDAPDrvMgrConnectionFails(dbName, ldapUser, ldapPassword + "ish");
+        
+        assertLDAPDSConnectionOK(ds, ldapUser, ldapPassword);
+        // as we don't have requireAuthentication, or the authentication provider,
+        // set on system level, we can shutdown the system with any user.
+        assertDSSystemShutdownOK("someuser", "somestring");
+        
+        // cleanup. Can't use default teardown mechanism yet as it uses default
+        // user/password and we're set to LDAP Authentication at this point.
+        cleanup(ds);
+    }
+
+    // cleanup gets a conn using the ldap user & pwd, so we can unset the
+    // requireAuthentication so the default teardown & db cleanup can happen
+    protected void cleanup(DataSource ds) throws SQLException {
+        Connection conn2 = ds.getConnection(ldapUser, ldapPassword);
+        setDatabaseProperty("derby.connection.requireAuthentication", "false", conn2);
+        conn2.commit();
+        JDBCDataSource.setBeanProperty(ds, "shutdownDatabase", "shutdown");
+        // shutdown only really happens on attempting to get a connection;
+        // this exercise is needed so the DatabasePropertySetup.teardown() can work.
+        // Getting a 08006 is not really part of the test, but would be good
+        // to be warned of if it happens.
+        try {
+            ds.getConnection(ldapUser, ldapPassword);
+            fail("expected system shutdown resulting in 08006 error.");
+        } catch (SQLException e) {
+            assertSQLState("08006", e);
+        }
+        conn2.close();
+    }
+
+    public void assertLDAPDSConnectionOK(
+            DataSource ds, String user, String password)
+    throws SQLException {
+        Connection conn = ds.getConnection(user, password);
+        assertNotNull(conn);
+        conn.close();
+    }
+
+    protected void assertLDAPDrvMgrConnectionOK(
+            String dbName, String user, String password)
+    throws SQLException
+    {
+        String url = TestConfiguration.getCurrent().getJDBCUrl(dbName);
+        Connection conn = DriverManager.getConnection(url, user, password);
+        assertNotNull(conn);
+        conn.close();
+    }
+
+    public void assertInvalidLDAPDSConnectionFails(
+            DataSource ds, String user, String password)
+    throws SQLException {
+        try {
+            ds.getConnection(user, password);
+            fail("expected invalid connection error (for DataSource)");
+        } catch (SQLException se) {
+            assertSQLState("08004", se);
+        }
+    }
+
+    protected void assertInvalidLDAPDrvMgrConnectionFails(
+            String dbName, String user, String password)
+    throws SQLException
+    {
+        String url = TestConfiguration.getCurrent().getJDBCUrl(dbName);
+        try {
+            DriverManager.getConnection(url, user, password).close();
+            fail("expected invalid connection error (for DataSource)");
+        } catch (SQLException se) {
+            assertSQLState("08004", se);
+        }
+    }
+
+    protected void assertDSSystemShutdownOK(
+            String user, String password)
+    throws SQLException {
+        DataSource ds;
+        if (usingEmbedded())
+        {
+            // we cannot use JDBCDataSource.getDataSource() (which uses the
+            // default database name), unless we specifically clear the 
+            // databaseName. Otherwise, only the database will be shutdown.
+            // The alternative is to use jDBCDataSource.getDatasource(dbName),
+            // where dbName is an empty string - this will in the current code
+            // be interpreted as a system shutdown.
+            ds = JDBCDataSource.getDataSource();
+            JDBCDataSource.clearStringBeanProperty(ds, "databaseName");
+        }
+        else 
+        {
+            // With client, we cannot user clearStringBeanProperty on the  
+            // databaseName, that will result in error 08001 - 
+            // Required DataSource property databaseName not set.
+            // So, we pass an empty string as databaseName, which the current
+            // code interprets as a system shutdown.
+            ds = JDBCDataSource.getDataSource("");
+        }
+
+        JDBCDataSource.setBeanProperty(ds, "shutdownDatabase", "shutdown");
+        try {
+            ds.getConnection(user, password);
+            fail("expected system shutdown resulting in XJ015 error");
+        } catch (SQLException e) {
+            // expect XJ015, system shutdown, on successful shutdown
+            assertSQLState("XJ015", e);
+        }
+    }
+}
\ No newline at end of file

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/LDAPAuthenticationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/_Suite.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/_Suite.java?rev=661924&r1=661923&r2=661924&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/_Suite.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/_Suite.java Fri May 30 18:29:00 2008
@@ -132,11 +132,25 @@
             //truncate test for clob
             suite.addTest (ClobTruncateTest.suite());
 
-	    //JSR169 does not support ParameterMetaData
-	    suite.addTest(ParameterMetaDataJdbc30Test.suite());
+            //JSR169 does not support ParameterMetaData
+            suite.addTest(ParameterMetaDataJdbc30Test.suite());
             suite.addTest(CacheSessionDataTest.suite());
+
+            // LDAPAuthentication and InvalidLDAPSrvAuth cannot run with JSR169
+            // implementation because of missing support for authentication 
+            // functionality. 
+            // Also, LDAPAuthentication needs properties passed in or is 
+            // pointless (unless we can find a test LDAP Server)
+            String ldapUser=getSystemProperty("derbyTesting.ldapServer");
+            if (ldapUser == null || ldapUser.length() < 1)
+                suite.addTest(new TestSuite("LDAPAuthenticationTest requires properties " +
+                        "derbyTesting." +
+                "[ldapServer, ldapPort ldapUser, ldapPassword, dnString]"));
+            else
+                suite.addTest(LDAPAuthenticationTest.suite());
+            suite.addTest(InvalidLDAPServerAuthenticationTest.suite());
         }
-		
+
         return suite;
 	}
 }