/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* 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.seasar.extension.jta.xa;
import javax.transaction.xa.XAException;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
import junit.framework.TestCase;
/**
* @author higa
*
*/
public class DefaultXAResourceTest extends TestCase {
/**
* @throws Exception
*/
public void testStart() throws Exception {
DefaultXAResource xaRes = new DefaultXAResource();
Xid xid = new XidImpl();
xaRes.start(xid, XAResource.TMNOFLAGS);
assertEquals("1", xid, xaRes.getCurrentXid());
assertEquals("2", DefaultXAResource.RS_ACTIVE, xaRes.getStatus());
try {
xaRes.start(xid, XAResource.TMNOFLAGS);
fail("3");
} catch (XAException ex) {
System.out.println(ex);
}
DefaultXAResource xaRes2 = new DefaultXAResource();
Xid xid2 = new XidImpl();
xaRes2.start(xid2, XAResource.TMNOFLAGS);
xaRes2.end(xid2, XAResource.TMSUSPEND);
xaRes2.start(xid2, XAResource.TMRESUME);
assertEquals("4", xid2, xaRes2.getCurrentXid());
assertEquals("5", DefaultXAResource.RS_ACTIVE, xaRes2.getStatus());
try {
xaRes2.start(xid, XAResource.TMRESUME);
fail("6");
} catch (XAException ex) {
System.out.println(ex);
}
DefaultXAResource xaRes3 = new DefaultXAResource();
try {
xaRes3.start(xid, XAResource.TMJOIN);
fail("7");
} catch (XAException ex) {
System.out.println(ex);
}
DefaultXAResource xaRes4 = new DefaultXAResource();
try {
xaRes4.start(xid, -1);
fail("8");
} catch (XAException ex) {
System.out.println(ex);
}
}
/**
* @throws Exception
*/
public void testEnd() throws Exception {
DefaultXAResource xaRes = new DefaultXAResource();
Xid xid = new XidImpl();
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMSUSPEND);
assertEquals("1", DefaultXAResource.RS_SUSPENDED, xaRes.getStatus());
xaRes.forget(xid);
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMFAIL);
assertEquals("2", DefaultXAResource.RS_FAIL, xaRes.getStatus());
xaRes.forget(xid);
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMSUCCESS);
assertEquals("3", DefaultXAResource.RS_SUCCESS, xaRes.getStatus());
xaRes.forget(xid);
try {
xaRes.end(xid, XAResource.TMSUCCESS);
fail("4");
} catch (XAException ex) {
System.out.println(ex);
}
xaRes.start(xid, XAResource.TMNOFLAGS);
try {
xaRes.end(xid, -1);
fail("5");
} catch (XAException ex) {
System.out.println(ex);
}
Xid xid2 = new XidImpl();
try {
xaRes.end(xid2, XAResource.TMSUCCESS);
fail("6");
} catch (XAException ex) {
System.out.println(ex);
}
}
/**
* @throws Exception
*/
public void testPrepare() throws Exception {
DefaultXAResource xaRes = new DefaultXAResource();
Xid xid = new XidImpl();
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMSUCCESS);
assertEquals("1", XAResource.XA_OK, xaRes.prepare(xid));
assertEquals("2", DefaultXAResource.RS_PREPARED, xaRes.getStatus());
xaRes.forget(xid);
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMFAIL);
try {
xaRes.prepare(xid);
fail("4");
} catch (XAException ex) {
System.out.println(ex);
}
xaRes.forget(xid);
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMSUCCESS);
try {
xaRes.prepare(new XidImpl());
fail("5");
} catch (XAException ex) {
System.out.println(ex);
}
}
/**
* @throws Exception
*/
public void testCommit() throws Exception {
DefaultXAResource xaRes = new DefaultXAResource();
Xid xid = new XidImpl();
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMSUCCESS);
xaRes.commit(xid, true);
assertEquals("1", DefaultXAResource.RS_NONE, xaRes.getStatus());
assertNull("2", xaRes.getCurrentXid());
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMSUCCESS);
xaRes.prepare(xid);
xaRes.commit(xid, false);
assertEquals("3", DefaultXAResource.RS_NONE, xaRes.getStatus());
assertNull("4", xaRes.getCurrentXid());
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMFAIL);
try {
xaRes.commit(xid, true);
fail("5");
} catch (XAException ex) {
System.out.println(ex);
}
xaRes.forget(xid);
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMSUCCESS);
try {
xaRes.commit(xid, false);
fail("6");
} catch (XAException ex) {
System.out.println(ex);
}
xaRes.forget(xid);
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMSUCCESS);
try {
xaRes.commit(new XidImpl(), true);
fail("7");
} catch (XAException ex) {
System.out.println(ex);
}
}
/**
* @throws Exception
*/
public void testRollback() throws Exception {
DefaultXAResource xaRes = new DefaultXAResource();
Xid xid = new XidImpl();
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMFAIL);
xaRes.rollback(xid);
assertEquals("1", DefaultXAResource.RS_NONE, xaRes.getStatus());
assertNull("2", xaRes.getCurrentXid());
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMSUCCESS);
xaRes.prepare(xid);
xaRes.rollback(xid);
assertEquals("3", DefaultXAResource.RS_NONE, xaRes.getStatus());
assertNull("4", xaRes.getCurrentXid());
xaRes.start(xid, XAResource.TMNOFLAGS);
try {
xaRes.rollback(xid);
fail("5");
} catch (XAException ex) {
System.out.println(ex);
}
xaRes.forget(xid);
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.end(xid, XAResource.TMFAIL);
try {
xaRes.rollback(new XidImpl());
fail("6");
} catch (XAException ex) {
System.out.println(ex);
}
}
/**
* @throws Exception
*/
public void testForget() throws Exception {
DefaultXAResource xaRes = new DefaultXAResource();
Xid xid = new XidImpl();
xaRes.start(xid, XAResource.TMNOFLAGS);
xaRes.forget(xid);
assertNull("1", xaRes.getCurrentXid());
assertEquals("2", DefaultXAResource.RS_NONE, xaRes.getStatus());
xaRes.start(xid, XAResource.TMNOFLAGS);
try {
xaRes.forget(new XidImpl());
fail("3");
} catch (XAException ex) {
System.out.println(ex);
}
}
}