001: /**
002: * EasyBeans
003: * Copyright (C) 2006 Bull S.A.S.
004: * Contact: easybeans@ow2.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: TestTransactionStatus.java 1970 2007-10-16 11:49:25Z benoitf $
023: * --------------------------------------------------------------------------
024: */package org.ow2.easybeans.tests.transaction.beanmanaged;
025:
026: import static org.testng.Assert.assertEquals;
027:
028: import java.sql.SQLException;
029:
030: import javax.naming.NamingException;
031: import javax.transaction.Status;
032:
033: import org.ow2.easybeans.tests.common.asserts.Assert;
034: import org.ow2.easybeans.tests.common.ejbs.stateful.beanmanaged.transaction.ItfBeanManagedTransaction;
035: import org.ow2.easybeans.tests.common.ejbs.stateful.beanmanaged.transaction.SFSBBeanManagedTransaction;
036: import org.ow2.easybeans.tests.common.ejbs.stateless.containermanaged.ItfDatabaseManager;
037: import org.ow2.easybeans.tests.common.ejbs.stateless.containermanaged.SLSBDatabaseManager;
038: import org.ow2.easybeans.tests.common.helper.EJBHelper;
039: import org.ow2.easybeans.tests.common.helper.EmbeddedHelper;
040: import org.ow2.util.log.Log;
041: import org.ow2.util.log.LogFactory;
042: import org.testng.annotations.BeforeClass;
043: import org.testng.annotations.BeforeMethod;
044: import org.testng.annotations.Test;
045:
046: /**
047: * Verifies if the container manages correctly the user transaction for stateful
048: * bean.
049: * @reference JSR 220-PROPOSED FINAL
050: * @requirement Application Server must be running; the bean
051: * org.ow2.easybeans.tests.common.ejbs.stateful.beanmanaged.SFSBBeanManagedTransaction
052: * must be deployed.
053: * @setup gets the reference of SFSBBeanManagedTransaction and binds the
054: * databases specified in the EmbeddedTest.
055: * @author Gisele Pinheiro Souza
056: * @author Eduardo Studzinski Estima de Castro
057: */
058: public class TestTransactionStatus {
059:
060: /**
061: * Bean used during the tests.
062: */
063: private ItfBeanManagedTransaction sfsbBeanManagedTransaction;
064:
065: /**
066: * Bean used to manage the database in the server side.
067: */
068: private ItfDatabaseManager slsbDatabaseManager;
069:
070: /**
071: * Logger.
072: */
073: private static Log logger = LogFactory
074: .getLog(TestTransactionStatus.class);
075:
076: /**
077: * The database used during the tests.
078: */
079: private static final String DATABASE = "jdbc_1";
080:
081: /**
082: * Creates the bean used during the tests.
083: * @throws Exception if an error during the test startup occurs.
084: */
085: @BeforeClass
086: public void setup() throws Exception {
087: // Inserts all database before execute the test
088: // used because the container does not provide this feature yet
089: // Is defined in each test to allows run each test separately.
090: EmbeddedHelper.bindDatasource();
091: // creates the bean used to manages the databse in the server site.
092: slsbDatabaseManager = EJBHelper.getBeanRemoteInstance(
093: SLSBDatabaseManager.class, ItfDatabaseManager.class);
094:
095: }
096:
097: /**
098: * Verifies if the status is no transaction before the bean uses the
099: * transaction.
100: * @input -
101: * @output the transaction status is no transaction.
102: * @throws Exception if an error during the tests occurs.
103: */
104: @Test
105: public void testStatusBeforeBegin() throws Exception {
106: int intTransactionStatus = sfsbBeanManagedTransaction
107: .getTransactionStatus();
108: assertEquals(Status.STATUS_NO_TRANSACTION, intTransactionStatus);
109:
110: }
111:
112: /**
113: * Verifies if the status changes after a begin.
114: * @input -
115: * @output the transaction status that must be active.
116: * @throws Exception if an error during the tests occurs.
117: */
118: @Test(dependsOnMethods="testStatusBeforeBegin")
119: public void testStatusAfterBegin() throws Exception {
120: // starts the transaction without close
121: sfsbBeanManagedTransaction
122: .insertTableWithoutCommitTransaction();
123: // verifies if the transaction is openned
124: int intTransactionStatus = sfsbBeanManagedTransaction
125: .getTransactionStatus();
126: assertEquals(Status.STATUS_ACTIVE, intTransactionStatus);
127: }
128:
129: /**
130: * Verifies if the status is commited after makes a commit.
131: * @input -
132: * @output the table inserted and commited.
133: * @throws Exception if an error during the tests occurs.
134: */
135: @Test
136: public void testStatusAfterCommit() throws Exception {
137: // starts and commit the transaction
138: sfsbBeanManagedTransaction
139: .insertTableWithBeginCommitTransaction();
140: // verifies if the transaction is committed
141: int intTransactionStatus = sfsbBeanManagedTransaction
142: .getTransactionStatus();
143: Integer[] expected = { new Integer(Status.STATUS_COMMITTED),
144: new Integer(Status.STATUS_NO_TRANSACTION) };
145: Assert
146: .assertEquals(new Integer(intTransactionStatus),
147: expected,
148: "The transaction status must be commited or no_transaction");
149:
150: }
151:
152: /**
153: * Verifies if the status is marked_rollback after makes a rollback.
154: * @input -
155: * @output the table inserted and rolled back.
156: * @throws Exception if an error during the tests occurs.
157: */
158: @Test
159: public void testStatusAfterRollback() throws Exception {
160: // starts and rollback the transaction
161: sfsbBeanManagedTransaction.insertTableWithBeginRollback();
162: // verifies if the transaction is committed
163: int intTransactionStatus = sfsbBeanManagedTransaction
164: .getTransactionStatus();
165: Integer[] expected = { new Integer(Status.STATUS_ROLLEDBACK),
166: new Integer(Status.STATUS_NO_TRANSACTION) };
167: Assert
168: .assertEquals(new Integer(intTransactionStatus),
169: expected,
170: "The transaction status must be rolledback or no_transaction");
171:
172: }
173:
174: /**
175: * Deletes the table to avoid errors in each test.
176: */
177: @BeforeMethod
178: public void deletesTable() {
179: // deletes the table after each test to avoid errors.
180: try {
181: slsbDatabaseManager.deleteTable(DATABASE,
182: ItfBeanManagedTransaction.TABLE);
183: } catch (SQLException e) {
184: logger
185: .debug(
186: "The table delete threw an error during the execution {0}",
187: e);
188: } catch (NamingException e) {
189: logger
190: .debug(
191: "The table delete threw an error during the execution {0}",
192: e);
193: }
194: }
195:
196: /**
197: * Creates a new bean instance before each method.
198: * @throws Exception if an error during the bean creation occurs.
199: */
200: @BeforeMethod
201: public void createBean() throws Exception {
202: // creates the bean
203: sfsbBeanManagedTransaction = EJBHelper.getBeanRemoteInstance(
204: SFSBBeanManagedTransaction.class,
205: ItfBeanManagedTransaction.class);
206: sfsbBeanManagedTransaction.startup(
207: ItfBeanManagedTransaction.CREATE_TABLE, DATABASE);
208: }
209:
210: }
|