You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2004/02/25 19:05:51 UTC

cvs commit: incubator-geronimo/modules/transaction/src/test/org/apache/geronimo/transaction TransactionManagerProxyTest.java

djencks     2004/02/25 10:05:51

  Modified:    modules/transaction/src/java/org/apache/geronimo/transaction
                        TransactionManagerProxy.java
               modules/transaction/src/test/org/apache/geronimo/transaction/manager
                        MockResource.java
  Added:       modules/transaction/src/test/org/apache/geronimo/transaction/manager
                        XidImporterTest.java
               modules/transaction/src/test/org/apache/geronimo/transaction
                        TransactionManagerProxyTest.java
  Log:
  a few simple tm tests
  
  Revision  Changes    Path
  1.5       +2 -2      incubator-geronimo/modules/transaction/src/java/org/apache/geronimo/transaction/TransactionManagerProxy.java
  
  Index: TransactionManagerProxy.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/transaction/src/java/org/apache/geronimo/transaction/TransactionManagerProxy.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TransactionManagerProxy.java	25 Feb 2004 09:58:19 -0000	1.4
  +++ TransactionManagerProxy.java	25 Feb 2004 18:05:51 -0000	1.5
  @@ -75,7 +75,7 @@
        */
       public TransactionManagerProxy() {
           this.delegate = new TransactionManagerImpl();
  -        this.importer = null;
  +        this.importer = (XidImporter)delegate;
       }
   
       public void setTransactionTimeout(int timeout) throws SystemException {
  
  
  
  1.3       +19 -1     incubator-geronimo/modules/transaction/src/test/org/apache/geronimo/transaction/manager/MockResource.java
  
  Index: MockResource.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/transaction/src/test/org/apache/geronimo/transaction/manager/MockResource.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MockResource.java	25 Feb 2004 09:58:19 -0000	1.2
  +++ MockResource.java	25 Feb 2004 18:05:51 -0000	1.3
  @@ -30,6 +30,9 @@
       private Xid xid;
       private MockResourceManager manager;
       private int timeout = 0;
  +    private boolean prepared;
  +    private boolean committed;
  +    private boolean rolledback;
   
       public MockResource(MockResourceManager manager) {
           this.manager = manager;
  @@ -67,13 +70,16 @@
       }
   
       public int prepare(Xid xid) throws XAException {
  +        prepared = true;
           return 0;
       }
   
       public void commit(Xid xid, boolean onePhase) throws XAException {
  +        committed = true;
       }
   
       public void rollback(Xid xid) throws XAException {
  +        rolledback = true;
           manager.forget(xid, this);
       }
   
  @@ -90,6 +96,18 @@
   
       public Xid[] recover(int flag) throws XAException {
           throw new UnsupportedOperationException();
  +    }
  +
  +    public boolean isPrepared() {
  +        return prepared;
  +    }
  +
  +    public boolean isCommitted() {
  +        return committed;
  +    }
  +
  +    public boolean isRolledback() {
  +        return rolledback;
       }
   
   }
  
  
  
  1.1                  incubator-geronimo/modules/transaction/src/test/org/apache/geronimo/transaction/manager/XidImporterTest.java
  
  Index: XidImporterTest.java
  ===================================================================
  /**
   *
   * Copyright 2004 The Apache Software Foundation
   *
   *  Licensed 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.geronimo.transaction.manager;
  
  import javax.transaction.xa.Xid;
  import javax.transaction.xa.XAResource;
  import javax.transaction.xa.XAException;
  import javax.transaction.Transaction;
  import javax.transaction.Status;
  
  import junit.framework.TestCase;
  
  /**
   *
   *
   * @version $Revision: 1.1 $ $Date: 2004/02/25 18:05:51 $
   *
   * */
  public class XidImporterTest extends TestCase{
  
      MockResourceManager rm1 = new MockResourceManager(true);
      MockResource r1_1 = new MockResource(rm1);
      MockResource r1_2 = new MockResource(rm1);
      MockResourceManager rm2 = new MockResourceManager(true);
      MockResource r2_1 = new MockResource(rm2);
      MockResource r2_2 = new MockResource(rm2);
  
      XidImporter tm = new TransactionManagerImpl();
      XidFactory xidFactory = new XidFactory();
  
      public void testImportXid() throws Exception {
          Xid externalXid = xidFactory.createXid();
          Transaction tx = tm.importXid(externalXid);
          assertNotNull(tx);
          assertEquals(Status.STATUS_ACTIVE, tx.getStatus());
      }
  
      public void testNoResourcesCommitOnePhase() throws Exception {
          Xid externalXid = xidFactory.createXid();
          Transaction tx = tm.importXid(externalXid);
          tm.commit(tx, true);
          assertEquals(Status.STATUS_NO_TRANSACTION, tx.getStatus());
      }
  
      public void testNoResourcesCommitTwoPhase() throws Exception {
          Xid externalXid = xidFactory.createXid();
          Transaction tx = tm.importXid(externalXid);
          assertEquals(XAResource.XA_RDONLY, tm.prepare(tx));
          assertEquals(Status.STATUS_NO_TRANSACTION, tx.getStatus());
      }
  
      public void testNoResourcesMarkRollback() throws Exception {
          Xid externalXid = xidFactory.createXid();
          Transaction tx = tm.importXid(externalXid);
          tx.setRollbackOnly();
          try {
              tm.prepare(tx);
              fail("should throw rollback exception in an XAException");
          } catch (XAException e) {
          }
          assertEquals(Status.STATUS_NO_TRANSACTION, tx.getStatus());
      }
  
      public void testNoResourcesRollback() throws Exception {
          Xid externalXid = xidFactory.createXid();
          Transaction tx = tm.importXid(externalXid);
          tm.rollback(tx);
          assertEquals(Status.STATUS_NO_TRANSACTION, tx.getStatus());
      }
  
      public void testOneResourceOnePhaseCommit() throws Exception {
          Xid externalXid = xidFactory.createXid();
          Transaction tx = tm.importXid(externalXid);
          tx.enlistResource(r1_1);
          tx.delistResource(r1_1, XAResource.TMSUCCESS);
          tm.commit(tx, true);
          assertEquals(Status.STATUS_NO_TRANSACTION, tx.getStatus());
      }
  
      public void testOneResourceTwoPhaseCommit() throws Exception {
          Xid externalXid = xidFactory.createXid();
          Transaction tx = tm.importXid(externalXid);
          tx.enlistResource(r1_1);
          tx.delistResource(r1_1, XAResource.TMSUCCESS);
          assertEquals(XAResource.XA_OK, tm.prepare(tx));
          assertTrue(!r1_1.isCommitted());
          assertTrue(r1_1.isPrepared());
          assertTrue(!r1_1.isRolledback());
          tm.commit(tx, false);
          assertEquals(Status.STATUS_NO_TRANSACTION, tx.getStatus());
          assertTrue(r1_1.isCommitted());
          assertTrue(r1_1.isPrepared());
          assertTrue(!r1_1.isRolledback());
      }
  
      public void testFourResourceTwoPhaseCommit() throws Exception {
          Xid externalXid = xidFactory.createXid();
          Transaction tx = tm.importXid(externalXid);
          tx.enlistResource(r1_1);
          tx.enlistResource(r1_2);
          tx.enlistResource(r2_1);
          tx.enlistResource(r2_2);
          tx.delistResource(r1_1, XAResource.TMSUCCESS);
          tx.delistResource(r1_2, XAResource.TMSUCCESS);
          tx.delistResource(r2_1, XAResource.TMSUCCESS);
          tx.delistResource(r2_2, XAResource.TMSUCCESS);
          assertEquals(XAResource.XA_OK, tm.prepare(tx));
          assertTrue(!r1_1.isCommitted() & !r1_2.isCommitted());
          assertTrue(r1_1.isPrepared() ^ r1_2.isPrepared());
          assertTrue(!r1_1.isRolledback() & !r1_2.isRolledback());
          assertTrue(!r2_1.isCommitted() & !r2_2.isCommitted());
          assertTrue(r2_1.isPrepared() ^ r2_2.isPrepared());
          assertTrue(!r2_1.isRolledback() & !r2_2.isRolledback());
          tm.commit(tx, false);
          assertEquals(Status.STATUS_NO_TRANSACTION, tx.getStatus());
          assertTrue((r1_1.isCommitted() & r1_1.isPrepared()) ^ (r1_2.isCommitted() & r1_2.isPrepared()));
          assertTrue(!r1_1.isRolledback() & !r1_2.isRolledback());
          assertTrue((r2_1.isCommitted() & r2_1.isPrepared()) ^ (r2_2.isCommitted() & r2_2.isPrepared()));
          assertTrue(!r2_1.isRolledback() & !r2_2.isRolledback());
      }
  
  }
  
  
  
  1.1                  incubator-geronimo/modules/transaction/src/test/org/apache/geronimo/transaction/TransactionManagerProxyTest.java
  
  Index: TransactionManagerProxyTest.java
  ===================================================================
  /**
   *
   * Copyright 2004 The Apache Software Foundation
   *
   *  Licensed 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.geronimo.transaction;
  
  import javax.transaction.RollbackException;
  import javax.transaction.Status;
  import javax.transaction.Transaction;
  import javax.transaction.xa.XAResource;
  
  import junit.framework.TestCase;
  import org.apache.geronimo.transaction.manager.MockResource;
  import org.apache.geronimo.transaction.manager.MockResourceManager;
  
  /**
   *
   *
   * @version $Revision: 1.1 $ $Date: 2004/02/25 18:05:51 $
   *
   * */
  public class TransactionManagerProxyTest extends TestCase {
  
      MockResourceManager rm1 = new MockResourceManager(true);
      MockResource r1_1 = new MockResource(rm1);
      MockResource r1_2 = new MockResource(rm1);
      MockResourceManager rm2 = new MockResourceManager(true);
      MockResource r2_1 = new MockResource(rm2);
      MockResource r2_2 = new MockResource(rm2);
  
      TransactionManagerProxy tm = new TransactionManagerProxy();
  
      public void testNoResourcesCommit() throws Exception {
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          assertEquals(Status.STATUS_ACTIVE, tm.getStatus());
          tm.commit();
          assertNull(tm.getTransaction());
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          assertEquals(Status.STATUS_ACTIVE, tm.getStatus());
          Transaction tx = tm.getTransaction();
          assertNotNull(tx);
          tx.commit();
          assertNotNull(tm.getTransaction());
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
      }
  
      public void testNoResourcesMarkRollbackOnly() throws Exception {
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          assertEquals(Status.STATUS_ACTIVE, tm.getStatus());
          tm.getTransaction().setRollbackOnly();
          assertEquals(Status.STATUS_MARKED_ROLLBACK, tm.getStatus());
          try {
              tm.commit();
              fail("tx should roll back");
          } catch (RollbackException e) {
              //expected
          }
          assertNull(tm.getTransaction());
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          assertEquals(Status.STATUS_ACTIVE, tm.getStatus());
          Transaction tx = tm.getTransaction();
          assertNotNull(tx);
          tx.setRollbackOnly();
          assertEquals(Status.STATUS_MARKED_ROLLBACK, tx.getStatus());
          try {
              tx.commit();
              fail("tx should roll back");
          } catch (RollbackException e) {
              //expected
          }
          assertNotNull(tm.getTransaction());
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
      }
  
      public void testNoResoucesRollback() throws Exception {
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          assertEquals(Status.STATUS_ACTIVE, tm.getStatus());
          tm.rollback();
          assertNull(tm.getTransaction());
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          assertEquals(Status.STATUS_ACTIVE, tm.getStatus());
          Transaction tx = tm.getTransaction();
          assertNotNull(tx);
          tx.rollback();
          assertNotNull(tm.getTransaction());
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
  
          //check rollback when marked rollback only
          tm.begin();
          assertEquals(Status.STATUS_ACTIVE, tm.getStatus());
          tm.getTransaction().setRollbackOnly();
          assertEquals(Status.STATUS_MARKED_ROLLBACK, tm.getStatus());
          tm.rollback();
          assertNull(tm.getTransaction());
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
      }
  
      public void testOneResourceCommit() throws Exception {
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          Transaction tx = tm.getTransaction();
          tx.enlistResource(r1_1);
          tx.delistResource(r1_1, XAResource.TMSUCCESS);
          tx.commit();
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          assertTrue(r1_1.isCommitted());
          assertTrue(!r1_1.isPrepared());
          assertTrue(!r1_1.isRolledback());
      }
  
      public void testOneResourceMarkedRollback() throws Exception {
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          Transaction tx = tm.getTransaction();
          tx.enlistResource(r1_1);
          tx.setRollbackOnly();
          tx.delistResource(r1_1, XAResource.TMSUCCESS);
          try {
              tx.commit();
              fail("tx should roll back");
          } catch (RollbackException e) {
              //expected
          }
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          assertTrue(!r1_1.isCommitted());
          assertTrue(!r1_1.isPrepared());
          assertTrue(r1_1.isRolledback());
      }
  
      public void testOneResourceRollback() throws Exception {
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          Transaction tx = tm.getTransaction();
          tx.enlistResource(r1_1);
          tx.delistResource(r1_1, XAResource.TMSUCCESS);
          tx.rollback();
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          assertTrue(!r1_1.isCommitted());
          assertTrue(!r1_1.isPrepared());
          assertTrue(r1_1.isRolledback());
      }
  
      public void testTwoResourceOneRMCommit() throws Exception {
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          Transaction tx = tm.getTransaction();
          tx.enlistResource(r1_1);
          tx.delistResource(r1_1, XAResource.TMSUCCESS);
          tx.enlistResource(r1_2);
          tx.delistResource(r1_2, XAResource.TMSUCCESS);
          tx.commit();
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          assertTrue(r1_1.isCommitted() ^ r1_2.isCommitted());
          assertTrue(!r1_1.isPrepared() & !r1_2.isPrepared());
          assertTrue(!r1_1.isRolledback() & !r1_2.isRolledback());
      }
  
      public void testTwoResourceOneRMMarkRollback() throws Exception {
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          Transaction tx = tm.getTransaction();
          tx.enlistResource(r1_1);
          tx.delistResource(r1_1, XAResource.TMSUCCESS);
          tx.enlistResource(r1_2);
          tx.delistResource(r1_2, XAResource.TMSUCCESS);
          tx.setRollbackOnly();
          try {
              tx.commit();
              fail("tx should roll back");
          } catch (RollbackException e) {
              //expected
          }
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          assertTrue(!r1_1.isCommitted() & !r1_2.isCommitted());
          assertTrue(!r1_1.isPrepared() & !r1_2.isPrepared());
          assertTrue(r1_1.isRolledback() ^ r1_2.isRolledback());
      }
  
      public void testTwoResourcesOneRMRollback() throws Exception {
          tm.begin();
          Transaction tx = tm.getTransaction();
          tx.enlistResource(r1_1);
          tx.delistResource(r1_1, XAResource.TMSUCCESS);
          tx.enlistResource(r1_2);
          tx.delistResource(r1_2, XAResource.TMSUCCESS);
          tx.setRollbackOnly();
          tx.rollback();
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          assertTrue(!r1_1.isCommitted() & !r1_2.isCommitted());
          assertTrue(!r1_1.isPrepared() & !r1_2.isPrepared());
          assertTrue(r1_1.isRolledback() ^ r1_2.isRolledback());
      }
  
      public void testFourResourceTwoRMCommit() throws Exception {
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          tm.begin();
          Transaction tx = tm.getTransaction();
          tx.enlistResource(r1_1);
          tx.enlistResource(r1_2);
          tx.enlistResource(r2_1);
          tx.enlistResource(r2_2);
          tx.delistResource(r1_1, XAResource.TMSUCCESS);
          tx.delistResource(r1_2, XAResource.TMSUCCESS);
          tx.delistResource(r2_1, XAResource.TMSUCCESS);
          tx.delistResource(r2_2, XAResource.TMSUCCESS);
          tx.commit();
          assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
          assertTrue((r1_1.isCommitted() & r1_1.isPrepared()) ^ (r1_2.isCommitted() & r1_2.isPrepared()));
          assertTrue(!r1_1.isRolledback() & !r1_2.isRolledback());
          assertTrue((r2_1.isCommitted() & r2_1.isPrepared()) ^ (r2_2.isCommitted() & r2_2.isPrepared()));
          assertTrue(!r2_1.isRolledback() & !r2_2.isRolledback());
      }
  
  
  }