[nobug] move failover tests to junit

Signed-off-by: Lukas Jungmann <lukas.jungmann@oracle.com>
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/TestRunModel.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/TestRunModel.java
index b6331c4..36f0a78 100644
--- a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/TestRunModel.java
+++ b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/TestRunModel.java
@@ -116,7 +116,6 @@ public void addTests() {
             tests.add("org.eclipse.persistence.testing.tests.tableswithspacesmodel.EmployeeWithSpacesTestModel");
             tests.add("org.eclipse.persistence.testing.tests.optimization.queryandsqlcounting.QueryAndSQLCountingTestModel");
             tests.add("org.eclipse.persistence.testing.tests.identitymaps.cache.CacheIdentityMapTestModel");
-            tests.add("org.eclipse.persistence.testing.tests.failover.FailoverTestModel");
             tests.add("org.eclipse.persistence.testing.tests.cache.AdvancedProcessingTestModel");
         }
 
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/ConnectionPoolFailureTest.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/ConnectionPoolFailureTest.java
deleted file mode 100644
index 8b21a44..0000000
--- a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/ConnectionPoolFailureTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
- * which accompanies this distribution.
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *     Oracle - initial API and implementation from Oracle TopLink
- ******************************************************************************/
- package org.eclipse.persistence.testing.tests.failover;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.persistence.exceptions.DatabaseException;
-import org.eclipse.persistence.internal.databaseaccess.Accessor;
-import org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor;
-import org.eclipse.persistence.queries.ReadObjectQuery;
-import org.eclipse.persistence.sessions.DatabaseLogin;
-import org.eclipse.persistence.sessions.Project;
-import org.eclipse.persistence.sessions.server.ServerSession;
-import org.eclipse.persistence.testing.framework.TestCase;
-import org.eclipse.persistence.testing.framework.TestErrorException;
-import org.eclipse.persistence.testing.models.employee.domain.Address;
-import org.eclipse.persistence.testing.tests.failover.emulateddriver.EmulatedConnection;
-import org.eclipse.persistence.testing.tests.failover.emulateddriver.EmulatedDriver;
-
-/**
- * This test will test TopLink Failover support within a TopLink Connection pool.
- * It is expected that upon a connection failure TopLink will remove all broken connections
- * From the TopLink Pool and then reattempt connection to the datasource.
- *
- * @author gyorke
- *
- */public class ConnectionPoolFailureTest extends TestCase
-{
-    protected ServerSession session;
-
-    public ConnectionPoolFailureTest()
-    {
-    }
-
-    protected void setup()
-    {
-        if (getSession().getPlatform().isSymfoware()) {
-            throwWarning("Test ConnectionPoolFailureTest is not supported on Symfoware, "
-                    + "failover has not been implemented on this platform. (bug 304908)");
-        }
-        Project project = (Project)getSession().getProject().clone();
-        DatabaseLogin login = (DatabaseLogin)project.getLogin().clone();
-        login.useDirectDriverConnect();
-        login.setDriverClass(EmulatedDriver.class);
-        login.setConnectionString("jdbc:emulateddriver");
-        project.setLogin(login);
-        session = (ServerSession)project.createServerSession();
-        session.setSessionLog(getSession().getSessionLog());
-        session.login();
-        String sql = getSession().getPlatform().getPingSQL();
-        java.util.Vector rows = getSession().executeSQL(sql);
-        ((EmulatedConnection)session.getAccessor().getConnection()).putRows(sql, rows);
-        ReadObjectQuery query = new ReadObjectQuery(Address.class);
-        getSession().executeQuery(query);
-        sql = query.getSQLString();
-        rows = getSession().executeSQL(sql);
-        ((EmulatedConnection)session.getAccessor().getConnection()).putRows(sql, rows);
-        List<Accessor> connections = new ArrayList<Accessor>();
-        //prime connection pools.
-        for (int i = 0; i < 10; ++i){
-            connections.add(session.getConnectionPool("default").acquireConnection());
-        }
-        for (Accessor accessor: connections){
-            session.getConnectionPool("default").releaseConnection(accessor);
-        }
-        List list = session.getReadConnectionPool().getConnectionsAvailable();
-        for(int i = 0; i < list.size(); i++)
-        {
-            ((EmulatedConnection)((DatabaseAccessor)list.get(i)).getConnection()).causeCommError();
-        }
-
-    }
-
-    protected void test() {
-        for (int i = 0; i < 4; ++i) {
-            try {
-                session.acquireClientSession().readObject(Address.class);
-            } catch (DatabaseException ex) {
-                throw new TestErrorException("Should have reconnected an not thrown exception.");
-            }
-        }
-        List<Accessor> connections = new ArrayList<Accessor>();
-        // prime connection pools.
-        for (int i = 0; i < 10; ++i) {
-            connections.add(session.getConnectionPool("default").acquireConnection());
-        }
-        for (Accessor accessor : connections) {
-            session.getConnectionPool("default").releaseConnection(accessor);
-        }
-        List list = session.getReadConnectionPool().getConnectionsAvailable();
-        for (int i = 0; i < list.size(); i++) {
-            ((EmulatedConnection) ((DatabaseAccessor) list.get(i)).getConnection()).causeCommError();
-        }
-
-        for (int i = 0; i < 4; ++i) {
-            try {
-                ReadObjectQuery query = new ReadObjectQuery(Address.class);
-                query.setQueryTimeout(10000);
-                session.acquireClientSession().executeQuery(query);
-            } catch (DatabaseException ex) {
-                if (i != 0) {
-                    throw new TestErrorException("Should have reconnected and not thrown exception.");
-                }
-            }
-        }
-    }
-
-    public void reset()
-    {
-        if(session != null) {
-            try {
-                session.logout();
-            } finally {
-                session = null;
-            }
-
-        }
-    }
-}
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/FailoverTestModel.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/FailoverTestModel.java
deleted file mode 100644
index 0707613..0000000
--- a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/FailoverTestModel.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
- * which accompanies this distribution.
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *     Oracle - initial API and implementation from Oracle TopLink
- ******************************************************************************/
- package org.eclipse.persistence.testing.tests.failover;
-
-import org.eclipse.persistence.testing.framework.TestModel;
-import org.eclipse.persistence.testing.models.employee.relational.EmployeeSystem;
-
-public class FailoverTestModel extends TestModel {
-        public FailoverTestModel() {
-            setDescription("This suite tests TopLink's handling of failover/connection timeout situations.");
-        }
-
-        public void addRequiredSystems() {
-            addRequiredSystem(new EmployeeSystem());
-        }
-
-        public void addTests() {
-            addTest(new SingleConnectionFailureTest());
-            addTest(new ConnectionPoolFailureTest());
-            addTest(new FullDatabaseFailureTest());
-        }
-
-}
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/FullDatabaseFailureTest.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/FullDatabaseFailureTest.java
deleted file mode 100644
index 899c42f..0000000
--- a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/FullDatabaseFailureTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.eclipse.persistence.testing.tests.failover;
-
-import java.util.List;
-
-import org.eclipse.persistence.exceptions.DatabaseException;
-import org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor;
-import org.eclipse.persistence.queries.ReadObjectQuery;
-import org.eclipse.persistence.sessions.DatabaseLogin;
-import org.eclipse.persistence.sessions.Project;
-import org.eclipse.persistence.sessions.server.ServerSession;
-import org.eclipse.persistence.testing.framework.TestCase;
-import org.eclipse.persistence.testing.framework.TestErrorException;
-import org.eclipse.persistence.testing.models.employee.domain.Address;
-import org.eclipse.persistence.testing.tests.failover.emulateddriver.EmulatedConnection;
-import org.eclipse.persistence.testing.tests.failover.emulateddriver.EmulatedDriver;
-
-/**
- * This test will test TopLink Failover support within a TopLink Connection pool.
- * It is expected that upon a connection failure TopLink will remove all broken connections
- * From the TopLink Pool and then reattempt connection to the datasource.
- *
- * @author gyorke
- *
- */public class FullDatabaseFailureTest extends TestCase
-{
-    protected ServerSession session;
-
-    public FullDatabaseFailureTest()
-    {
-    }
-
-    protected void setup()
-    {
-        if (getSession().getPlatform().isSymfoware()) {
-            throwWarning("Test FullDatabaseFailureTest is not supported on Symfoware, "
-                    + "failover has not been implemented on this platform. (bug 304908)");
-        }
-        Project project = (Project)getSession().getProject().clone();
-        DatabaseLogin login = (DatabaseLogin)project.getLogin().clone();
-        login.useDirectDriverConnect();
-        login.setDriverClass(EmulatedDriver.class);
-        login.setConnectionString("jdbc:emulateddriver");
-        project.setLogin(login);
-        session = (ServerSession)project.createServerSession();
-        session.setSessionLog(getSession().getSessionLog());
-        session.login();
-        String sql = getSession().getPlatform().getPingSQL();
-        java.util.Vector rows = getSession().executeSQL(sql);
-        ((EmulatedConnection)session.getAccessor().getConnection()).putRows(sql, rows);
-        ReadObjectQuery query = new ReadObjectQuery(Address.class);
-        getSession().executeQuery(query);
-        sql = query.getSQLString();
-        rows = getSession().executeSQL(sql);
-        ((EmulatedConnection)session.getAccessor().getConnection()).putRows(sql, rows);
-        List list = session.getReadConnectionPool().getConnectionsAvailable();
-        for(int i = 0; i < list.size(); i++)
-        {
-            ((EmulatedConnection)((DatabaseAccessor)list.get(i)).getConnection()).causeCommError();
-        }
-
-    }
-
-    protected void test()
-    {
-        try
-        {
-            EmulatedDriver.fullFailure = true;
-            session.acquireClientSession().readObject(Address.class);
-        }
-        catch(DatabaseException ex)
-        {
-            return;  //Exception expected
-        }finally{
-            EmulatedDriver.fullFailure = false;
-        }
-        throw new TestErrorException("Should have thrown exception as database connection is unavailable.");
-    }
-
-    public void reset()
-    {
-        if(session != null) {
-            try {
-                session.logout();
-            } finally {
-                session = null;
-            }
-
-        }
-    }
-}
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/SingleConnectionFailureTest.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/SingleConnectionFailureTest.java
deleted file mode 100644
index 011d31a..0000000
--- a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/SingleConnectionFailureTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
- * which accompanies this distribution.
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *     Oracle - initial API and implementation from Oracle TopLink
- ******************************************************************************/
- package org.eclipse.persistence.testing.tests.failover;
-
-import java.util.Vector;
-
-import org.eclipse.persistence.exceptions.DatabaseException;
-import org.eclipse.persistence.internal.sessions.DatabaseSessionImpl;
-import org.eclipse.persistence.queries.ReadObjectQuery;
-import org.eclipse.persistence.sessions.DatabaseLogin;
-import org.eclipse.persistence.sessions.DatabaseSession;
-import org.eclipse.persistence.sessions.Project;
-import org.eclipse.persistence.testing.framework.TestCase;
-import org.eclipse.persistence.testing.framework.TestErrorException;
-import org.eclipse.persistence.testing.models.employee.domain.Address;
-import org.eclipse.persistence.testing.tests.failover.emulateddriver.EmulatedConnection;
-import org.eclipse.persistence.testing.tests.failover.emulateddriver.EmulatedDriver;
-
-public class SingleConnectionFailureTest extends TestCase {
-
-    protected DatabaseSession databaseSession ;
-
-    protected void setup() {
-        if (getSession().getPlatform().isSymfoware()) {
-            throwWarning("Test SingleConnectionFailureTest is not supported on Symfoware, "
-                    + "failover has not been implemented on this platform. (bug 304908)");
-        }
-        Project project = (Project)getSession().getProject().clone();
-        DatabaseLogin login = (DatabaseLogin)project.getLogin().clone();
-        login.useDirectDriverConnect();
-        login.setDriverClass(EmulatedDriver.class);
-        login.setConnectionString("jdbc:emulateddriver");
-        project.setLogin(login);
-        this.databaseSession = project.createDatabaseSession();
-        databaseSession.setSessionLog(getSession().getSessionLog());
-        databaseSession.login();
-
-        String sql = getSession().getPlatform().getPingSQL();
-        Vector rows = getSession().executeSQL(sql);
-        //this will actually store the results on the driver for subsequent connections.
-        ((EmulatedConnection)((DatabaseSessionImpl)databaseSession).getAccessor().getConnection()).putRows(sql, rows);
-
-        ReadObjectQuery query = new ReadObjectQuery(Address.class);
-        getSession().executeQuery(query);
-        sql = query.getSQLString();
-        rows = getSession().executeSQL(sql);
-        ((EmulatedConnection)((DatabaseSessionImpl)databaseSession).getAccessor().getConnection()).putRows(sql, rows);
-
-        ((EmulatedConnection)((DatabaseSessionImpl)databaseSession).getAccessor().getConnection()).causeCommError();
-    }
-
-    protected void test() {
-        try{
-            this.databaseSession.readObject(Address.class);
-        }catch (DatabaseException ex){
-            throw new TestErrorException("Should have reconnected and not thrown exception.");
-        }
-    }
-
-    public void reset() {
-        if(this.databaseSession != null) {
-            if(this.databaseSession.isConnected()) {
-                this.databaseSession.logout();
-            }
-            this.databaseSession = null;
-        }
-    }
-}
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/Address.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/Address.java
new file mode 100644
index 0000000..cf60247
--- /dev/null
+++ b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/Address.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *     Oracle - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.persistence.testing.tests.junit.failover;
+
+import java.math.BigDecimal;
+import java.util.Vector;
+
+import org.eclipse.persistence.descriptors.ClassDescriptor;
+import org.eclipse.persistence.descriptors.RelationalDescriptor;
+import org.eclipse.persistence.internal.helper.DatabaseField;
+import org.eclipse.persistence.internal.sessions.ArrayRecord;
+import org.eclipse.persistence.mappings.DirectToFieldMapping;
+import org.eclipse.persistence.sessions.DatabaseRecord;
+
+public final class Address {
+
+    public BigDecimal id;
+    public String street;
+    public String city;
+    public String province;
+    public String postalCode;
+    public String country;
+
+    public Address() {
+        this.city = "";
+        this.province = "";
+        this.postalCode = "";
+        this.street = "";
+        this.country = "";
+    }
+
+    static ClassDescriptor descriptor() {
+        RelationalDescriptor descriptor = new RelationalDescriptor();
+        descriptor.setJavaClass(Address.class);
+        descriptor.addTableName("ADDRESS");
+        descriptor.addPrimaryKeyFieldName("ADDRESS.ADDRESS_ID");
+
+        // Descriptor Properties.
+        descriptor.useSoftCacheWeakIdentityMap();
+        descriptor.setIdentityMapSize(100);
+        descriptor.setSequenceNumberFieldName("ADDRESS.ADDRESS_ID");
+        descriptor.setSequenceNumberName("ADDRESS_SEQ");
+        descriptor.setAlias("Address");
+
+        // Cache Invalidation Policy
+        // Query Manager.
+        descriptor.getQueryManager().checkCacheForDoesExist();
+
+        // Named Queries.
+        // Event Manager.
+        // Mappings.
+        DirectToFieldMapping cityMapping = new DirectToFieldMapping();
+        cityMapping.setAttributeName("city");
+        cityMapping.setFieldName("ADDRESS.CITY");
+        descriptor.addMapping(cityMapping);
+
+        DirectToFieldMapping countryMapping = new DirectToFieldMapping();
+        countryMapping.setAttributeName("country");
+        countryMapping.setFieldName("ADDRESS.COUNTRY");
+        descriptor.addMapping(countryMapping);
+
+        DirectToFieldMapping idMapping = new DirectToFieldMapping();
+        idMapping.setAttributeName("id");
+        idMapping.setFieldName("ADDRESS.ADDRESS_ID");
+        descriptor.addMapping(idMapping);
+
+        DirectToFieldMapping postalCodeMapping = new DirectToFieldMapping();
+        postalCodeMapping.setAttributeName("postalCode");
+        postalCodeMapping.setFieldName("ADDRESS.P_CODE");
+        descriptor.addMapping(postalCodeMapping);
+
+        DirectToFieldMapping provinceMapping = new DirectToFieldMapping();
+        provinceMapping.setAttributeName("province");
+        provinceMapping.setFieldName("ADDRESS.PROVINCE");
+        descriptor.addMapping(provinceMapping);
+
+        DirectToFieldMapping streetMapping = new DirectToFieldMapping();
+        streetMapping.setAttributeName("street");
+        streetMapping.setFieldName("ADDRESS.STREET");
+        descriptor.addMapping(streetMapping);
+
+        return descriptor;
+    }
+
+    static String getSQL() {
+        return "SELECT ADDRESS_ID, CITY, COUNTRY, P_CODE, PROVINCE, STREET FROM ADDRESS";
+    }
+
+    static Vector<DatabaseRecord> getData(ClassDescriptor desc) {
+        Vector<DatabaseRecord> rows = new Vector<>();
+        Vector<DatabaseField> fields = desc.getAllFields();
+        DatabaseField[] fieldsArray = fields.toArray(new DatabaseField[0]);
+        rows.add(new ArrayRecord(fields, fieldsArray, new Object[] { Integer.valueOf(51), "Calgary", "Canada", "J5J2B5", "ALB", "1111 Moose Rd." }));
+        rows.add(new ArrayRecord(fields, fieldsArray, new Object[] { Integer.valueOf(52), "Metcalfe", "Canada", "Y4F7V6", "ONT", "2 Anderson Rd." }));
+        rows.add(new ArrayRecord(fields, fieldsArray, new Object[] { Integer.valueOf(53), "Montreal", "Canada", "Q2S5Z5", "QUE", "1 Habs Place" }));
+        return rows;
+    }
+}
\ No newline at end of file
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/ConnectionPoolFailoverTest.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/ConnectionPoolFailoverTest.java
new file mode 100644
index 0000000..96b3b11
--- /dev/null
+++ b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/ConnectionPoolFailoverTest.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *     Oracle - initial API and implementation from Oracle TopLink
+ ******************************************************************************/
+package org.eclipse.persistence.testing.tests.junit.failover;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.persistence.exceptions.DatabaseException;
+import org.eclipse.persistence.internal.databaseaccess.Accessor;
+import org.eclipse.persistence.queries.ReadObjectQuery;
+import org.eclipse.persistence.sessions.Project;
+import org.eclipse.persistence.sessions.server.ServerSession;
+import org.eclipse.persistence.testing.tests.junit.failover.emulateddriver.EmulatedConnection;
+import org.eclipse.persistence.testing.tests.junit.failover.emulateddriver.EmulatedDriver;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * This test will test TopLink Failover support within a TopLink Connection
+ * pool. It is expected that upon a connection failure TopLink will remove all
+ * broken connections From the TopLink Pool and then reattempt connection to the
+ * datasource.
+ *
+ * @author gyorke
+ *
+ */
+public class ConnectionPoolFailoverTest extends FailoverBase<ServerSession> {
+
+    @Override
+    protected ServerSession createSession(Project p) {
+        return (ServerSession) p.createServerSession();
+    }
+
+    @Test
+    public void fullDatabaseFailureTest() {
+        try {
+            List<Accessor> list = getEmulatedSession().getReadConnectionPool().getConnectionsAvailable();
+            for (Accessor accessor : list) {
+                ((EmulatedConnection) accessor.getConnection()).causeCommError();
+            }
+            EmulatedDriver.fullFailure = true;
+            getEmulatedSession().acquireClientSession().readObject(Address.class);
+        } catch (DatabaseException ex) {
+            return; // Exception expected
+        } finally {
+            EmulatedDriver.fullFailure = false;
+        }
+        Assert.fail("Should have thrown exception as database connection is unavailable.");
+    }
+
+    @Test
+    public void connectionPoolFailureTest() {
+        List<Accessor> connections = new ArrayList<>();
+        // prime connection pools.
+        for (int i = 0; i < 10; ++i) {
+            connections.add(getEmulatedSession().getConnectionPool("default").acquireConnection());
+        }
+        for (Accessor accessor : connections) {
+            getEmulatedSession().getConnectionPool("default").releaseConnection(accessor);
+        }
+        List<Accessor> list = getEmulatedSession().getReadConnectionPool().getConnectionsAvailable();
+        for (Accessor accessor : list) {
+            ((EmulatedConnection) accessor.getConnection()).causeCommError();
+        }
+
+        for (int i = 0; i < 4; ++i) {
+            try {
+                getEmulatedSession().acquireClientSession().readObject(Address.class);
+            } catch (DatabaseException ex) {
+                Assert.fail("Should have reconnected an not thrown exception.");
+            }
+        }
+        connections = new ArrayList<Accessor>();
+        // prime connection pools.
+        for (int i = 0; i < 10; ++i) {
+            connections.add(getEmulatedSession().getConnectionPool("default").acquireConnection());
+        }
+        for (Accessor accessor : connections) {
+            getEmulatedSession().getConnectionPool("default").releaseConnection(accessor);
+        }
+        list = getEmulatedSession().getReadConnectionPool().getConnectionsAvailable();
+        for (Accessor accessor : list) {
+            ((EmulatedConnection) accessor.getConnection()).causeCommError();
+        }
+
+        for (int i = 0; i < 4; ++i) {
+            try {
+                ReadObjectQuery query = new ReadObjectQuery(Address.class);
+                query.setQueryTimeout(10000);
+                getEmulatedSession().acquireClientSession().executeQuery(query);
+            } catch (DatabaseException ex) {
+                if (i != 0) {
+                    Assert.fail("Should have reconnected and not thrown exception.");
+                }
+            }
+        }
+    }
+
+}
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/FailoverBase.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/FailoverBase.java
new file mode 100644
index 0000000..b89b06d
--- /dev/null
+++ b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/FailoverBase.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *     Oracle - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.persistence.testing.tests.junit.failover;
+
+import java.io.OutputStreamWriter;
+import java.util.Vector;
+
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.eclipse.persistence.descriptors.ClassDescriptor;
+import org.eclipse.persistence.internal.helper.DatabaseField;
+import org.eclipse.persistence.internal.sessions.ArrayRecord;
+import org.eclipse.persistence.internal.sessions.DatabaseSessionImpl;
+import org.eclipse.persistence.logging.AbstractSessionLog;
+import org.eclipse.persistence.logging.DefaultSessionLog;
+import org.eclipse.persistence.logging.SessionLog;
+import org.eclipse.persistence.sessions.DatabaseLogin;
+import org.eclipse.persistence.sessions.DatabaseSession;
+import org.eclipse.persistence.sessions.Project;
+import org.eclipse.persistence.testing.tests.junit.failover.emulateddriver.EmulatedConnection;
+import org.eclipse.persistence.testing.tests.junit.failover.emulateddriver.EmulatedDriver;
+import org.junit.After;
+import org.junit.Before;
+
+public abstract class FailoverBase<T extends DatabaseSession> {
+
+    private T session;
+
+    @Before
+    public void prepare() {
+        DatabaseLogin login = new DatabaseLogin();
+        login.useDirectDriverConnect();
+        login.setDriverClass(EmulatedDriver.class);
+        login.setConnectionString("jdbc:emulateddriver");
+        login.getPlatform().setPingSQL("SELECT 1");
+        Project p = new Project(login);
+        ClassDescriptor cd = Address.descriptor();
+        p.addDescriptor(cd);
+        session = createSession(p);
+        SessionLog log = new DefaultSessionLog(new OutputStreamWriter(System.out));
+        int logLevel = AbstractSessionLog.translateStringToLoggingLevel(System.getProperty(PersistenceUnitProperties.LOGGING_LEVEL, "INFO"));
+        session.setSessionLog(log);
+        session.setLogLevel(logLevel);
+        session.login();
+
+        // this will actually store the results on the driver for subsequent connections.
+        EmulatedConnection con = (EmulatedConnection) ((DatabaseSessionImpl) session).getAccessor().getConnection();
+        Vector<DatabaseField> pingFields = new Vector<DatabaseField>() {{ add(new DatabaseField("1"));}};
+        con.putRows("SELECT 1", new Vector() {{ add(new ArrayRecord(pingFields,pingFields.toArray(new DatabaseField[0]), new Object[] { "1" })); }});
+        con.putRows(Address.getSQL(), Address.getData(cd));
+    }
+    
+    protected abstract T createSession(Project p);
+
+    protected T getEmulatedSession() {
+        return session;
+    }
+    
+    @After
+    public void reset() {
+        if (session != null && session.isConnected()) {
+            try {
+                session.logout();
+            } finally {
+                session = null;
+            }
+        }
+    }
+
+
+}
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/FailoverTest.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/FailoverTest.java
new file mode 100644
index 0000000..2ed4bde
--- /dev/null
+++ b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/FailoverTest.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *     Oracle - initial API and implementation from Oracle TopLink
+ ******************************************************************************/
+package org.eclipse.persistence.testing.tests.junit.failover;
+
+import org.eclipse.persistence.exceptions.DatabaseException;
+import org.eclipse.persistence.internal.sessions.DatabaseSessionImpl;
+import org.eclipse.persistence.sessions.DatabaseSession;
+import org.eclipse.persistence.sessions.Project;
+import org.eclipse.persistence.testing.framework.TestErrorException;
+import org.eclipse.persistence.testing.tests.junit.failover.emulateddriver.EmulatedConnection;
+import org.junit.Test;
+
+public class FailoverTest extends FailoverBase<DatabaseSession> {
+
+    @Override
+    protected DatabaseSession createSession(Project p) {
+        return p.createDatabaseSession();
+    }
+
+    @Test
+    public void singleConnectionFailureTest() {
+        ((EmulatedConnection) ((DatabaseSessionImpl) getEmulatedSession()).getAccessor().getConnection()).causeCommError();
+
+        try {
+            getEmulatedSession().readObject(Address.class);
+        } catch (DatabaseException ex) {
+            throw new TestErrorException("Should have reconnected and not thrown exception.");
+        }
+
+    }
+
+
+}
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedConnection.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedConnection.java
similarity index 97%
rename from foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedConnection.java
rename to foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedConnection.java
index 0a9471c..925df9b 100644
--- a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedConnection.java
+++ b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -10,7 +10,7 @@
  * Contributors:
  *     Oracle - initial API and implementation from Oracle TopLink
  ******************************************************************************/
- package org.eclipse.persistence.testing.tests.failover.emulateddriver;
+ package org.eclipse.persistence.testing.tests.junit.failover.emulateddriver;
 
 import java.sql.Array;
 import java.sql.Blob;
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedDriver.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedDriver.java
similarity index 92%
rename from foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedDriver.java
rename to foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedDriver.java
index 1d67eb9..0bcc5fc 100644
--- a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedDriver.java
+++ b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedDriver.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -10,7 +10,7 @@
  * Contributors:
  *     Oracle - initial API and implementation from Oracle TopLink
  ******************************************************************************/
- package org.eclipse.persistence.testing.tests.failover.emulateddriver;
+ package org.eclipse.persistence.testing.tests.junit.failover.emulateddriver;
 
 import java.sql.Connection;
 import java.sql.Driver;
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedResultSet.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedResultSet.java
similarity index 99%
rename from foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedResultSet.java
rename to foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedResultSet.java
index 09fa71e..6a77a4a 100644
--- a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedResultSet.java
+++ b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedResultSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -10,7 +10,7 @@
  * Contributors:
  *     Oracle - initial API and implementation from Oracle TopLink
  ******************************************************************************/
- package org.eclipse.persistence.testing.tests.failover.emulateddriver;
+ package org.eclipse.persistence.testing.tests.junit.failover.emulateddriver;
 
 import java.io.InputStream;
 import java.io.Reader;
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedResultSetMetaData.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedResultSetMetaData.java
similarity index 95%
rename from foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedResultSetMetaData.java
rename to foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedResultSetMetaData.java
index 6c580f1..e2da979 100644
--- a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedResultSetMetaData.java
+++ b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedResultSetMetaData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -10,7 +10,7 @@
  * Contributors:
  *     Oracle - initial API and implementation from Oracle TopLink
  ******************************************************************************/
- package org.eclipse.persistence.testing.tests.failover.emulateddriver;
+ package org.eclipse.persistence.testing.tests.junit.failover.emulateddriver;
 
 import java.sql.*;
 
diff --git a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedStatement.java b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedStatement.java
similarity index 98%
rename from foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedStatement.java
rename to foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedStatement.java
index 9358908..8de84ba 100644
--- a/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/failover/emulateddriver/EmulatedStatement.java
+++ b/foundation/eclipselink.core.test/src/org/eclipse/persistence/testing/tests/junit/failover/emulateddriver/EmulatedStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -10,7 +10,7 @@
  * Contributors:
  *     Oracle - initial API and implementation from Oracle TopLink
  ******************************************************************************/
- package org.eclipse.persistence.testing.tests.failover.emulateddriver;
+ package org.eclipse.persistence.testing.tests.junit.failover.emulateddriver;
 
 import java.io.InputStream;
 import java.io.Reader;