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(TestTPConversation.strcmp(e.getReceived(),
  98. "test_tpcall_TPESVCFAIL_service") == 0);
  99. assertTrue(e.getTperrno() == Connection.TPESVCFAIL);
  100. }
  101. TXINFO txinfo = new TXINFO();
  102. int inTx = TX.tx_info(txinfo);
  103. log.info("inTx=" + inTx);
  104. assertTrue(txinfo.transaction_state == TX.TX_ROLLBACK_ONLY);
  105. assertTrue(TX.tx_commit() == TX.TX_ROLLBACK);
  106. }
  107. public void test_tprecv_TPEV_DISCONIMM() throws ConnectionException {
  108. log.info("test_tprecv_TPEV_DISCONIMM");
  109. server.tpadvertiseTestRollbackOnlyTprecvTPEVDISCONIMMService();
  110. assertTrue(TX.tx_open() == TX.TX_OK);
  111. assertTrue(TX.tx_begin() == TX.TX_OK);
  112. Session cd = connection.tpconnect(server
  113. .getServiceNameTestRollbackOnly(), sendbuf, sendlen,
  114. Connection.TPSENDONLY);
  115. cd.tpdiscon();
  116. TXINFO txinfo = new TXINFO();
  117. int inTx = TX.tx_info(txinfo);
  118. log.info("inTx=" + inTx);
  119. assertTrue(txinfo.transaction_state == TX.TX_ROLLBACK_ONLY);
  120. assertTrue(TX.tx_commit() == TX.TX_ROLLBACK);
  121. }
  122. public void test_tprecv_TPEV_SVCFAIL() throws ConnectionException {
  123. log.info("test_tprecv_TPEV_SVCFAIL");
  124. server.tpadvertiseTestRollbackOnlyTprecvTPEVSVCFAILService();
  125. assertTrue(TX.tx_open() == TX.TX_OK);
  126. assertTrue(TX.tx_begin() == TX.TX_OK);
  127. Session cd = connection.tpconnect(server
  128. .getServiceNameTestRollbackOnly(), sendbuf, sendlen,
  129. Connection.TPRECVONLY);
  130. try {
  131. cd.tprecv(0);
  132. fail("Expected e.getEvent() == Connection.TPEV_SVCFAIL");
  133. } catch (ConnectionException e) {
  134. assertTrue(e.getEvent() == Connection.TPEV_SVCFAIL);
  135. assertTrue(e.getTperrno() == Connection.TPEEVENT);
  136. Buffer rcvbuf = e.getReceived();
  137. assertTrue(TestTPConversation.strcmp(rcvbuf,
  138. "test_tprecv_TPEV_SVCFAIL_service") == 0);
  139. }
  140. TXINFO txinfo = new TXINFO();
  141. int inTx = TX.tx_info(txinfo);
  142. log.info("inTx=" + inTx);
  143. assertTrue(txinfo.transaction_state == TX.TX_ROLLBACK_ONLY);
  144. assertTrue(TX.tx_commit() == TX.TX_ROLLBACK);
  145. }
  146. public void test_no_tpreturn() throws ConnectionException {
  147. log.info("test_no_tpreturn");
  148. server.tpadvertiseTestRollbackOnlyNoTpreturnService();
  149. assertTrue(TX.tx_open() == TX.TX_OK);
  150. assertTrue(TX.tx_begin() == TX.TX_OK);
  151. try {
  152. connection.tpcall(server.getServiceNameTestRollbackOnly(), sendbuf,
  153. sendlen, 0);
  154. fail("Expected e.getTperrno() == Connection.TPESVCERR");
  155. } catch (ConnectionException e) {
  156. assertTrue(e.getTperrno() == Connection.TPESVCERR);
  157. }
  158. TXINFO txinfo = new TXINFO();
  159. int inTx = TX.tx_info(txinfo);
  160. log.info("inTx=" + inTx);
  161. assertTrue(txinfo.transaction_state == TX.TX_ROLLBACK_ONLY);
  162. assertTrue(TX.tx_commit() == TX.TX_ROLLBACK);
  163. }
  164. }