TestTPConversation.cxx
上传用户: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. #include "TestAssert.h"
  19. #include "BaseServerTest.h"
  20. #include "xatmi.h"
  21. #include "TestTPConversation.h"
  22. #include "userlogc.h"
  23. #include "malloc.h"
  24. int interationCount = 100;
  25. extern void testTPConversation_service(TPSVCINFO *svcinfo);
  26. extern void testTPConversation_short_service(TPSVCINFO *svcinfo);
  27. void TestTPConversation::setUp() {
  28. userlogc((char*) "TestTPConversation::setUp");
  29. sendbuf = NULL;
  30. rcvbuf = NULL;
  31. // Setup server
  32. BaseServerTest::setUp();
  33. // Do local work
  34. cd = -1;
  35. sendlen = 11;
  36. rcvlen = sendlen;
  37. BT_ASSERT((sendbuf
  38. = (char *) tpalloc((char*) "X_OCTET", NULL, sendlen)) != NULL);
  39. BT_ASSERT((rcvbuf = (char *) tpalloc((char*) "X_OCTET", NULL, rcvlen))
  40. != NULL);
  41. BT_ASSERT(tperrno == 0);
  42. }
  43. void TestTPConversation::tearDown() {
  44. userlogc((char*) "TestTPConversation::tearDown");
  45. // Do local work
  46. ::tpfree(sendbuf);
  47. ::tpfree(rcvbuf);
  48. int toCheck = tpunadvertise((char*) "TestTPConversation");
  49. BT_ASSERT(tperrno == 0);
  50. BT_ASSERT(toCheck != -1);
  51. // Clean up server
  52. BaseServerTest::tearDown();
  53. }
  54. void TestTPConversation::test_conversation() {
  55. int toCheck = tpadvertise((char*) "TestTPConversation",
  56. testTPConversation_service);
  57. BT_ASSERT(tperrno == 0);
  58. BT_ASSERT(toCheck != -1);
  59. userlogc((char*) "test_conversation");
  60. strcpy(sendbuf, "conversate");
  61. cd
  62. = ::tpconnect((char*) "TestTPConversation", sendbuf, sendlen,
  63. TPRECVONLY);
  64. long revent = 0;
  65. char* tperrnoS = (char*) malloc(110);
  66. sprintf(tperrnoS, "%d", tperrno);
  67. BT_ASSERT_MESSAGE(tperrnoS, tperrno == 0);
  68. BT_ASSERT(cd != -1);
  69. userlogc("Started conversation");
  70. for (int i = 0; i < interationCount; i++) {
  71. int result = ::tprecv(cd, &rcvbuf, &rcvlen, 0, &revent);
  72. sprintf(tperrnoS, "%d", tperrno);
  73. BT_ASSERT_MESSAGE(tperrnoS, tperrno == TPEEVENT);
  74. BT_ASSERT(result == -1);
  75. char* expectedResult = (char*) malloc(sendlen);
  76. sprintf(expectedResult, "hi%d", i);
  77. char* errorMessage = (char*) malloc(sendlen * 2 + 1);
  78. sprintf(errorMessage, "%s/%s", expectedResult, rcvbuf);
  79. BT_ASSERT_MESSAGE(errorMessage, strcmp(expectedResult, rcvbuf)
  80. == 0);
  81. free(expectedResult);
  82. free(errorMessage);
  83. sprintf(sendbuf, "yo%d", i);
  84. //userlogc((char*) "test_conversation:%s:", sendbuf);
  85. result = ::tpsend(cd, sendbuf, sendlen, TPRECVONLY, &revent);
  86. sprintf(tperrnoS, "%d", tperrno);
  87. BT_ASSERT_MESSAGE(tperrnoS, tperrno == 0);
  88. BT_ASSERT(result != -1);
  89. }
  90. userlogc("Conversed");
  91. int result = ::tpgetrply(&cd, &rcvbuf, &rcvlen, 0);
  92. sprintf(tperrnoS, "%d", tperrno);
  93. BT_ASSERT_MESSAGE(tperrnoS, tperrno == 0);
  94. BT_ASSERT(result != -1);
  95. free(tperrnoS);
  96. char* expectedResult = (char*) malloc(sendlen);
  97. sprintf(expectedResult, "hi%d", interationCount);
  98. char* errorMessage = (char*) malloc(sendlen * 2 + 1);
  99. sprintf(errorMessage, "%s/%s", expectedResult, rcvbuf);
  100. BT_ASSERT_MESSAGE(errorMessage, strcmp(expectedResult, rcvbuf) == 0);
  101. free(expectedResult);
  102. free(errorMessage);
  103. }
  104. void TestTPConversation::test_short_conversation() {
  105. int toCheck = tpadvertise((char*) "TestTPConversation",
  106. testTPConversation_short_service);
  107. BT_ASSERT(tperrno == 0);
  108. BT_ASSERT(toCheck != -1);
  109. userlogc((char*) "test_short_conversation");
  110. cd = ::tpconnect((char*) "TestTPConversation", NULL, 0, TPRECVONLY);
  111. BT_ASSERT(tperrno == 0);
  112. BT_ASSERT(cd != -1);
  113. long revent = 0;
  114. int result = ::tprecv(cd, &rcvbuf, &rcvlen, 0, &revent);
  115. BT_ASSERT(tperrno == 0);
  116. BT_ASSERT(result != -1);
  117. BT_ASSERT(strcmp("hi0", rcvbuf) == 0);
  118. result = ::tpgetrply(&cd, &rcvbuf, &rcvlen, 0);
  119. BT_ASSERT(tperrno == 0);
  120. BT_ASSERT(result != -1);
  121. BT_ASSERT(strcmp("hi1", rcvbuf) == 0);
  122. }
  123. void testTPConversation_service(TPSVCINFO *svcinfo) {
  124. userlogc((char*) "testTPConversation_service");
  125. bool fail = false;
  126. char *sendbuf = ::tpalloc((char*) "X_OCTET", NULL, svcinfo->len);
  127. char *rcvbuf = ::tpalloc((char*) "X_OCTET", NULL, svcinfo->len);
  128. char* expectedResult = (char*) malloc(svcinfo->len + 1);
  129. strcpy(expectedResult, "conversate");
  130. char* errorMessage = (char*) malloc(svcinfo->len * 2 + 2);
  131. sprintf(errorMessage, "%s/%s", expectedResult, svcinfo->data);
  132. if (strncmp(expectedResult, svcinfo->data, 10) != 0) {
  133. if (svcinfo->data != NULL) {
  134. userlogc("Got invalid data %s", svcinfo->data);
  135. } else {
  136. userlogc("GOT A NULL");
  137. }
  138. fail = true;
  139. } else {
  140. long revent = 0;
  141. userlogc("Chatting");
  142. for (int i = 0; i < interationCount; i++) {
  143. sprintf(sendbuf, "hi%d", i);
  144. //userlogc((char*) "testTPConversation_service:%s:", sendbuf);
  145. int result = ::tpsend(svcinfo->cd, sendbuf, svcinfo->len,
  146. TPRECVONLY, &revent);
  147. if (result != -1) {
  148. result = ::tprecv(svcinfo->cd, &rcvbuf, &svcinfo->len, 0,
  149. &revent);
  150. if (result == -1 && revent == TPEV_SENDONLY) {
  151. char* expectedResult = (char*) malloc(svcinfo->len);
  152. sprintf(expectedResult, "yo%d", i);
  153. char* errorMessage = (char*) malloc(svcinfo->len * 2 + 1);
  154. sprintf(errorMessage, "%s/%s", expectedResult, rcvbuf);
  155. if (strcmp(expectedResult, rcvbuf) != 0) {
  156. free(expectedResult);
  157. free(errorMessage);
  158. fail = true;
  159. break;
  160. }
  161. free(expectedResult);
  162. free(errorMessage);
  163. } else {
  164. fail = true;
  165. break;
  166. }
  167. } else {
  168. fail = true;
  169. break;
  170. }
  171. }
  172. userlogc("Chatted");
  173. }
  174. if (fail) {
  175. tpreturn(TPESVCFAIL, 0, sendbuf, 0, 0);
  176. } else {
  177. sprintf(sendbuf, "hi%d", interationCount);
  178. tpreturn(TPSUCCESS, 0, sendbuf, svcinfo->len, 0);
  179. }
  180. ::tpfree(rcvbuf);
  181. free(expectedResult);
  182. free(errorMessage);
  183. }
  184. void testTPConversation_short_service(TPSVCINFO *svcinfo) {
  185. userlogc((char*) "testTPConversation_short_service");
  186. long sendlen = 4;
  187. long revent = 0;
  188. char *sendbuf = ::tpalloc((char*) "X_OCTET", NULL, sendlen);
  189. strcpy(sendbuf, "hi0");
  190. ::tpsend(svcinfo->cd, sendbuf, sendlen, 0, &revent);
  191. strcpy(sendbuf, "hi1");
  192. tpreturn(TPSUCCESS, 0, sendbuf, sendlen, 0);
  193. }