[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;