TestRollbackOnly.java
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:7k
源码类别:

中间件编程

开发平台:

Java

  1. /*
  2.  * JBoss, Home of Professional Open Source
  3.  * Copyright 2008, Red Hat, Inc., and others contributors as indicated
  4.  * by the @authors tag. All rights reserved.
  5.  * See the copyright.txt in the distribution for a
  6.  * full listing of individual contributors.
  7.  * This copyrighted material is made available to anyone wishing to use,
  8.  * modify, copy, or redistribute it subject to the terms and conditions
  9.  * of the GNU Lesser General Public License, v. 2.1.
  10.  * This program is distributed in the hope that it will be useful, but WITHOUT A
  11.  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  12.  * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  13.  * You should have received a copy of the GNU Lesser General Public License,
  14.  * v.2.1 along with this distribution; if not, write to the Free Software
  15.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  16.  * MA  02110-1301, USA.
  17.  */
  18. package org.jboss.blacktie.jatmibroker.tx;
  19. import junit.framework.TestCase;
  20. import org.apache.log4j.LogManager;
  21. import org.apache.log4j.Logger;
  22. import org.jboss.blacktie.jatmibroker.RunServer;
  23. import org.jboss.blacktie.jatmibroker.core.conf.ConfigurationException;
  24. import org.jboss.blacktie.jatmibroker.xatmi.Buffer;
  25. import org.jboss.blacktie.jatmibroker.xatmi.Connection;
  26. import org.jboss.blacktie.jatmibroker.xatmi.ConnectionException;
  27. import org.jboss.blacktie.jatmibroker.xatmi.ConnectionFactory;
  28. import org.jboss.blacktie.jatmibroker.xatmi.Session;
  29. import org.jboss.blacktie.jatmibroker.xatmi.TestTPConversation;
  30. import org.jboss.blacktie.jatmibroker.xatmi.X_OCTET;
  31. public class TestRollbackOnly extends TestCase {
  32. private static final Logger log = LogManager
  33. .getLogger(TestRollbackOnly.class);
  34. private RunServer server = new RunServer();
  35. private Connection connection;
  36. private int sendlen;
  37. private X_OCTET sendbuf;
  38. public void setUp() throws ConnectionException, ConfigurationException {
  39. server.serverinit();
  40. ConnectionFactory connectionFactory = ConnectionFactory
  41. .getConnectionFactory();
  42. connection = connectionFactory.getConnection();
  43. sendlen = "TestRbkOnly".length() + 1;
  44. sendbuf = (X_OCTET) connection.tpalloc("X_OCTET", null);
  45. sendbuf.setByteArray("TestRbkOnly".getBytes());
  46. }
  47. public void tearDown() throws ConnectionException, ConfigurationException {
  48. connection.close();
  49. server.serverdone();
  50. }
  51. public void test_tpcall_TPETIME() throws ConnectionException {
  52. log.info("test_tpcall_TPETIME");
  53. server.tpadvertiseTestRollbackOnlyTpcallTPETIMEService();
  54. assertTrue(TX.tx_open() == TX.TX_OK);
  55. assertTrue(TX.tx_begin() == TX.TX_OK);
  56. try {
  57. connection.tpcall(server.getServiceNameTestRollbackOnly(), sendbuf,
  58. sendlen, 0);
  59. fail("Expected e.getTperrno() == Connection.TPETIME");
  60. } catch (ConnectionException e) {
  61. assertTrue(e.getTperrno() == Connection.TPETIME);
  62. }
  63. TXINFO txinfo = new TXINFO();
  64. int inTx = TX.tx_info(txinfo);
  65. log.info("inTx=" + inTx);
  66. assertTrue(txinfo.transaction_state == TX.TX_ROLLBACK_ONLY);
  67. assertTrue(TX.tx_commit() == TX.TX_ROLLBACK);
  68. }
  69. public void x_test_tpcall_TPEOTYPE() throws ConnectionException {
  70. log.info("test_tpcall_TPETIME");
  71. server.tpadvertiseTestTpcallTPEOTYPEService();
  72. assertTrue(TX.tx_open() == TX.TX_OK);
  73. assertTrue(TX.tx_begin() == TX.TX_OK);
  74. try {
  75. connection.tpcall(server.getServiceNameTestRollbackOnly(), sendbuf,
  76. sendlen, Connection.TPNOCHANGE);
  77. fail("Expected e.getTperrno() == TPEOTYPE");
  78. } catch (ConnectionException e) {
  79. assertTrue(e.getTperrno() == Connection.TPEOTYPE);
  80. }
  81. TXINFO txinfo = new TXINFO();
  82. int inTx = TX.tx_info(txinfo);
  83. log.info("inTx=" + inTx);
  84. assertTrue(txinfo.transaction_state == TX.TX_ROLLBACK_ONLY);
  85. assertTrue(TX.tx_commit() == TX.TX_ROLLBACK);
  86. }
  87. public void test_tpcall_TPESVCFAIL() throws ConnectionException {
  88. log.info("test_tpcall_TPESVCFAIL");
  89. server.tpadvertiseTestRollbackOnlyTpcallTPESVCFAILService();
  90. assertTrue(TX.tx_open() == TX.TX_OK);
  91. assertTrue(TX.tx_begin() == TX.TX_OK);
  92. try {
  93. connection.tpcall(server.getServiceNameTestRollbackOnly(), sendbuf,
  94. sendlen, 0);
  95. fail("Expected e.getTperrno() == TPESVCFAIL");
  96. } catch (ConnectionException e) {
  97. assertTrue(new String(((X_OCTET) e.getReceived()).getByteArray()),
  98. TestTPConversation.strcmp(e.getReceived(),
  99. "test_tpcall_TPESVCFAIL_service") == 0);
  100. assertTrue(e.getTperrno() == Connection.TPESVCFAIL);
  101. }
  102. TXINFO txinfo = new TXINFO();
  103. int inTx = TX.tx_info(txinfo);
  104. log.info("inTx=" + inTx);
  105. assertTrue(txinfo.transaction_state == TX.TX_ROLLBACK_ONLY);
  106. assertTrue(TX.tx_commit() == TX.TX_ROLLBACK);
  107. }
  108. public void test_tprecv_TPEV_DISCONIMM() throws ConnectionException {
  109. log.info("test_tprecv_TPEV_DISCONIMM");
  110. server.tpadvertiseTestRollbackOnlyTprecvTPEVDISCONIMMService();
  111. assertTrue(TX.tx_open() == TX.TX_OK);
  112. assertTrue(TX.tx_begin() == TX.TX_OK);
  113. Session cd = connection.tpconnect(server
  114. .getServiceNameTestRollbackOnly(), sendbuf, sendlen,
  115. Connection.TPSENDONLY);
  116. cd.tpdiscon();
  117. TXINFO txinfo = new TXINFO();
  118. int inTx = TX.tx_info(txinfo);
  119. log.info("inTx=" + inTx);
  120. assertTrue(txinfo.transaction_state == TX.TX_ROLLBACK_ONLY);
  121. assertTrue(TX.tx_commit() == TX.TX_ROLLBACK);
  122. }
  123. public void test_tprecv_TPEV_SVCFAIL() throws ConnectionException {
  124. log.info("test_tprecv_TPEV_SVCFAIL");
  125. server.tpadvertiseTestRollbackOnlyTprecvTPEVSVCFAILService();
  126. assertTrue(TX.tx_open() == TX.TX_OK);
  127. assertTrue(TX.tx_begin() == TX.TX_OK);
  128. Session cd = connection.tpconnect(server
  129. .getServiceNameTestRollbackOnly(), sendbuf, sendlen,
  130. Connection.TPRECVONLY);
  131. try {
  132. cd.tprecv(0);
  133. fail("Expected e.getEvent() == Connection.TPEV_SVCFAIL");
  134. } catch (ConnectionException e) {
  135. assertTrue(e.getEvent() == Connection.TPEV_SVCFAIL);
  136. assertTrue(e.getTperrno() == Connection.TPEEVENT);
  137. Buffer rcvbuf = e.getReceived();
  138. assertTrue(new String(((X_OCTET) rcvbuf).getByteArray()),
  139. TestTPConversation.strcmp(rcvbuf,
  140. "test_tprecv_TPEV_SVCFAIL_service") == 0);
  141. }
  142. TXINFO txinfo = new TXINFO();
  143. int inTx = TX.tx_info(txinfo);
  144. log.info("inTx=" + inTx);
  145. assertTrue(txinfo.transaction_state == TX.TX_ROLLBACK_ONLY);
  146. assertTrue(TX.tx_commit() == TX.TX_ROLLBACK);
  147. }
  148. public void test_no_tpreturn() throws ConnectionException {
  149. log.info("test_no_tpreturn");
  150. server.tpadvertiseTestRollbackOnlyNoTpreturnService();
  151. assertTrue(TX.tx_open() == TX.TX_OK);
  152. assertTrue(TX.tx_begin() == TX.TX_OK);
  153. try {
  154. connection.tpcall(server.getServiceNameTestRollbackOnly(), sendbuf,
  155. sendlen, 0);
  156. fail("Expected e.getTperrno() == Connection.TPESVCERR");
  157. } catch (ConnectionException e) {
  158. assertTrue(e.getTperrno() == Connection.TPESVCERR);
  159. }
  160. TXINFO txinfo = new TXINFO();
  161. int inTx = TX.tx_info(txinfo);
  162. log.info("inTx=" + inTx);
  163. assertTrue(txinfo.transaction_state == TX.TX_ROLLBACK_ONLY);
  164. assertTrue(TX.tx_commit() == TX.TX_ROLLBACK);
  165. }
  166. }