package com.arjuna.ats.jta.xa; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import javax.transaction.xa.Xid; import org.junit.Test; import com.arjuna.ats.arjuna.common.CoreEnvironmentBeanException; import com.arjuna.ats.arjuna.common.Uid; import com.arjuna.ats.arjuna.common.arjPropertyManager; public class XATxConverterTest { @Test public void testXAConverter() throws CoreEnvironmentBeanException { Uid uid = new Uid(); boolean branch = true; Integer eisName = 97; int nodeNameLength = 28; char[] nodeName = new char[nodeNameLength]; for (int i = 0; i < nodeNameLength; i++) { nodeName[i] = '.'; } String nodeName1 = new String(nodeName); String nodeName2 = nodeName1; arjPropertyManager.getCoreEnvironmentBean() .setNodeIdentifier(nodeName1); XidImple rootXid = new XidImple(uid, branch, eisName); { assertTrue(rootXid.getGlobalTransactionId().length <= Xid.MAXGTRIDSIZE); assertTrue(rootXid.getBranchQualifier().length <= Xid.MAXBQUALSIZE); assertEquals(XATxConverter.getNodeName(rootXid.getXID()), nodeName1); assertEquals(XATxConverter.getNodeName(rootXid.getXID()).length(), nodeNameLength); assertEquals(XATxConverter.getEISName(rootXid.getXID()), eisName); assertEquals( XATxConverter.getSubordinateNodeName(rootXid.getXID()), null); } // TxControl.setXANodeName(2); XATxConverter.setSubordinateNodeName(rootXid.getXID(), nodeName2); XidImple subordinateXid = new XidImple(rootXid); { assertTrue(subordinateXid.getGlobalTransactionId().length <= Xid.MAXGTRIDSIZE); assertTrue( "Bquallength: " + subordinateXid.getBranchQualifier().length, subordinateXid.getBranchQualifier().length <= Xid.MAXBQUALSIZE); assertEquals(XATxConverter.getNodeName(subordinateXid.getXID()), nodeName1); assertEquals(XATxConverter.getNodeName(subordinateXid.getXID()) .length(), nodeNameLength); assertEquals(XATxConverter.getEISName(subordinateXid.getXID()), eisName); assertEquals(XATxConverter.getSubordinateNodeName(subordinateXid .getXID()), nodeName2); assertEquals( XATxConverter.getSubordinateNodeName( subordinateXid.getXID()).length(), nodeNameLength); } } @Test public void testForeignXID() { XidImple foreignXidImple = new XidImple(new MyForeignXID()); assertEquals(XATxConverter.getNodeName(foreignXidImple.getXID()), null); assertTrue(XATxConverter.getEISName(foreignXidImple.getXID()) == -1); assertEquals(XATxConverter.getSubordinateNodeName(foreignXidImple.getXID()), null); } private class MyForeignXID implements Xid { @Override public int getFormatId() { // TODO Auto-generated method stub return 1; } @Override public byte[] getGlobalTransactionId() { return "foo".getBytes(); } @Override public byte[] getBranchQualifier() { return "bar".getBytes(); } } }