You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jg...@apache.org on 2019/07/04 20:59:13 UTC

[tomee] 06/06: Unit test for ManagedConnection behaviour

This is an automated email from the ASF dual-hosted git repository.

jgallimore pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git

commit b6d92c0378503de776c66df6675374db0091aa08
Author: Jonathan Gallimore <jo...@jrg.me.uk>
AuthorDate: Thu Jul 4 21:58:06 2019 +0100

    Unit test for ManagedConnection behaviour
---
 .../jdbc/ManagedConnectionBehaviorTest.java        | 72 +++++++++++++++++++++-
 1 file changed, 69 insertions(+), 3 deletions(-)

diff --git a/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedConnectionBehaviorTest.java b/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedConnectionBehaviorTest.java
index a5e65cd..c17bdfe 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedConnectionBehaviorTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedConnectionBehaviorTest.java
@@ -19,10 +19,13 @@ package org.apache.openejb.resource.jdbc;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
 import org.apache.openejb.resource.GeronimoTransactionManagerFactory;
 import org.apache.openejb.resource.TransactionManagerWrapper;
+import org.apache.openejb.resource.jdbc.managed.local.ManagedConnection;
 import org.apache.openejb.resource.jdbc.managed.local.ManagedDataSource;
 import org.junit.Test;
 
 import java.io.PrintWriter;
+import java.lang.reflect.Field;
+import java.lang.reflect.Proxy;
 import java.sql.Array;
 import java.sql.Blob;
 import java.sql.CallableStatement;
@@ -51,9 +54,7 @@ import javax.sql.DataSource;
 import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 public class ManagedConnectionBehaviorTest {
     @Test
@@ -123,7 +124,72 @@ public class ManagedConnectionBehaviorTest {
             assertTrue(myDs.connections.iterator().next().commit);
             myDs.connections.clear();
         }
+        { // 2 connections, same TX
+            mgr.begin();
+            final Connection connection1 = ds.getConnection();
+
+            assertTrue(myDs.connections.isEmpty()); // not yet needed
+            connection1.createBlob(); // just to call something
+
+            // second connection should be the same as it comes from the tx registry
+            final Connection connection2 = ds.getConnection();
+            connection2.createBlob(); // just to call something
+
+            assertEquals(connection1, connection2);
+
+            for (final MyConn conn : myDs.connections) {
+                assertFalse(conn.closed);
+            }
+
+            mgr.commit();
+
+            for (final MyConn conn : myDs.connections) {
+                assertTrue(conn.closed);
+                assertTrue(conn.commit);
+                assertFalse(conn.rollback);
+            }
+
+            myDs.connections.clear();
+        }
+        { // 2 connections, same TX
+            final Connection connection1 = ds.getConnection();
+            final Connection connection2 = ds.getConnection();
+
+            assertNotEquals(connection1, connection2);
+
+            mgr.begin();
+            assertTrue(myDs.connections.isEmpty()); // not yet needed
+            connection1.createBlob(); // just to call something
+            connection2.createBlob(); // just to call something
+
+            for (final MyConn conn : myDs.connections) {
+                assertFalse(conn.closed);
+            }
+
+            final ManagedConnection mc1 = (ManagedConnection) Proxy.getInvocationHandler(connection1);
+            final ManagedConnection mc2 = (ManagedConnection) Proxy.getInvocationHandler(connection2);
+
+            assertEquals(getFieldValue(mc1, "xaConnection"), getFieldValue(mc2, "xaConnection"));
+            assertEquals(getFieldValue(mc1, "xaResource"), getFieldValue(mc2, "xaResource"));
+            assertEquals(getFieldValue(mc1, "delegate"), getFieldValue(mc2, "delegate"));
+
+            mgr.commit();
+
+            for (final MyConn conn : myDs.connections) {
+                assertTrue(conn.closed);
+                assertTrue(conn.commit);
+                assertFalse(conn.rollback);
+            }
+
+            myDs.connections.clear();
+        }
+
+    }
 
+    private Object getFieldValue(final Object object, final String fieldName) throws NoSuchFieldException, IllegalAccessException {
+        final Field xaConnectionField = object.getClass().getDeclaredField(fieldName);
+        xaConnectionField.setAccessible(true);
+        return xaConnectionField.get(object);
     }
 
     public static class MyDs implements DataSource {