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

中间件编程

开发平台:

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 "BaseTest.h"
  20. #include "xatmi.h"
  21. #include "malloc.h"
  22. #include "TestPBF.h"
  23. extern void pbf_service(TPSVCINFO *svcinfo);
  24. void TestPBF::setUp() {
  25. userlogc((char*) "TestPBF::setUp");
  26. BaseServerTest::setUp();
  27. // Do local work
  28. m_allocated = NULL;
  29. sendbuf = NULL;
  30. rcvbuf = NULL;
  31. BT_ASSERT(tperrno == 0);
  32. }
  33. void TestPBF::tearDown() {
  34. userlogc((char*) "TestPBF::tearDown");
  35. // Do local work
  36. if (m_allocated) {
  37. ::tpfree( m_allocated);
  38. m_allocated = NULL;
  39. }
  40. if (sendbuf) {
  41. ::tpfree( sendbuf);
  42. sendbuf = NULL;
  43. }
  44. if (rcvbuf) {
  45. ::tpfree( rcvbuf);
  46. rcvbuf = NULL;
  47. }
  48. BaseServerTest::tearDown();
  49. }
  50. void TestPBF::test_tpalloc() {
  51. userlogc((char*) "test_tpalloc");
  52. ACCT_INFO *aptr;
  53. aptr = (ACCT_INFO*) tpalloc((char*) "X_COMMON", (char*) "acct_info", 0);
  54. m_allocated = (char*) aptr;
  55. BT_ASSERT(m_allocated != NULL);
  56. BT_ASSERT(tperrno == 0);
  57. // Won't check length as typtypes does that
  58. // ASSIGN SOME VALUES
  59. aptr->acct_no = 12345678;
  60. strcpy(aptr->name, "1234567890123456789012345678901234567890123456789");
  61. aptr->balances[0] = 0;
  62. aptr->balances[1] = 0;
  63. // CHECK THE ASSIGNATIONS
  64. BT_ASSERT(aptr->acct_no == 12345678);
  65. BT_ASSERT(strcmp(aptr->name,
  66. "1234567890123456789012345678901234567890123456789") == 0);
  67. BT_ASSERT(aptr->address == NULL || strcmp(aptr->address, "") == 0);
  68. BT_ASSERT(aptr->balances[0] == 0);
  69. BT_ASSERT(aptr->balances[1] == 0);
  70. }
  71. void TestPBF::test_tpalloc_nonzero() {
  72. userlogc((char*) "test_tpalloc_nonzero");
  73. m_allocated = tpalloc((char*) "X_COMMON", (char*) "acct_info", 10);
  74. BT_ASSERT(m_allocated != NULL);
  75. BT_ASSERT(tperrno == 0);
  76. char* type = (char*) malloc(8);
  77. char* subtype = (char*) malloc(16);
  78. int toTest = ::tptypes(m_allocated, type, subtype);
  79. BT_ASSERT(tperrno == 0);
  80. BT_ASSERT(toTest == sizeof(ACCT_INFO));
  81. BT_ASSERT(toTest != 10);
  82. BT_ASSERT(strncmp(type, "X_COMMON", 8) == 0);
  83. BT_ASSERT(strcmp(subtype, "acct_info") == 0);
  84. free(type);
  85. free(subtype);
  86. }
  87. void TestPBF::test_tpalloc_subtype_required() {
  88. userlogc((char*) "test_tpalloc_subtype_required");
  89. m_allocated = tpalloc((char*) "X_COMMON", NULL, 0);
  90. BT_ASSERT(tperrno == TPEINVAL);
  91. BT_ASSERT(m_allocated == NULL);
  92. }
  93. void TestPBF::test_tpalloc_wrong_subtype() {
  94. userlogc((char*) "test_tpalloc_subtype_required");
  95. m_allocated = tpalloc((char*) "X_COMMON", (char*) "not_exist", 0);
  96. BT_ASSERT(tperrno == TPEINVAL);
  97. BT_ASSERT(m_allocated == NULL);
  98. }
  99. void TestPBF::test_tprealloc() {
  100. userlogc("test_tprealloc");
  101. m_allocated = tpalloc((char*) "X_COMMON", (char*) "acct_info", 0);
  102. BT_ASSERT(m_allocated != NULL);
  103. m_allocated = ::tprealloc(m_allocated, 10);
  104. BT_ASSERT(tperrno == TPEINVAL);
  105. }
  106. void TestPBF::test_tptypes() {
  107. userlogc((char*) "test_tptypes");
  108. m_allocated = tpalloc((char*) "X_COMMON", (char*) "acct_info", 0);
  109. BT_ASSERT(m_allocated != NULL);
  110. char* type = (char*) malloc(8);
  111. char* subtype = (char*) malloc(16);
  112. int toTest = ::tptypes(m_allocated, type, subtype);
  113. BT_ASSERT(tperrno == 0);
  114. BT_ASSERT(toTest == sizeof(ACCT_INFO));
  115. BT_ASSERT(strncmp(type, "X_COMMON", 8) == 0);
  116. BT_ASSERT(strcmp(subtype, "acct_info") == 0);
  117. free(type);
  118. free(subtype);
  119. }
  120. void TestPBF::test_tpfree() {
  121. userlogc((char*) "test_tpfree");
  122. ACCT_INFO *aptr;
  123. aptr = (ACCT_INFO*) tpalloc((char*) "X_COMMON", (char*) "acct_info", 0);
  124. m_allocated = (char*) aptr;
  125. BT_ASSERT(m_allocated != NULL);
  126. BT_ASSERT(tperrno == 0);
  127. ::tpfree( m_allocated);
  128. m_allocated = NULL;
  129. BT_ASSERT(tperrno == 0);
  130. }
  131. void TestPBF::test_tpcall() {
  132. userlogc((char*) "test_tpcall");
  133. tpadvertise((char*) "PBF", pbf_service);
  134. BT_ASSERT(tperrno == 0);
  135. ACCT_INFO *aptr;
  136. aptr = (ACCT_INFO*) tpalloc((char*) "X_COMMON", (char*) "acct_info", 0);
  137. long rcvlen = 60;
  138. BT_ASSERT((rcvbuf = (char *) tpalloc((char*) "X_OCTET", NULL, rcvlen))
  139. != NULL);
  140. sendbuf = (char*) aptr;
  141. aptr->acct_no = 12345678;
  142. strcpy(aptr->name, "1234567890123456789012345678901234567890123456789");
  143. strcpy(
  144. aptr->address,
  145. "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
  146. aptr->foo[0] = 1.1F;
  147. aptr->foo[1] = 2.2F;
  148. aptr->balances[0] = 1.1;
  149. aptr->balances[1] = 2.2;
  150. int id = ::tpcall((char*) "PBF", (char*) aptr, 0, (char**) &rcvbuf,
  151. &rcvlen, TPNOCHANGE);
  152. BT_ASSERT(tperrno == 0);
  153. BT_ASSERT(tpurcode == 23);
  154. BT_ASSERT(id != -1);
  155. BT_ASSERT_MESSAGE(rcvbuf, strcmp(rcvbuf, "pbf_service") == 0);
  156. }
  157. void pbf_service(TPSVCINFO *svcinfo) {
  158. userlogc((char*) "pbf_service");
  159. bool ok = false;
  160. ACCT_INFO *aptr = (ACCT_INFO*) svcinfo->data;
  161. bool acctEq = aptr->acct_no == 12345678;
  162. bool nameEq = strcmp(aptr->name,
  163. "1234567890123456789012345678901234567890123456789") == 0;
  164. bool
  165. addressEq =
  166. strcmp(
  167. aptr->address,
  168. "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789")
  169. == 0;
  170. bool fooEq = aptr->foo[0] == 1.1F && aptr->foo[1] == 2.2F;
  171. bool balsEq = aptr->balances[0] == 1.1 && aptr->balances[1] == 2.2;
  172. if (acctEq && nameEq && addressEq && fooEq && balsEq) {
  173. ok = true;
  174. }
  175. int len = 60;
  176. char *toReturn = ::tpalloc((char*) "X_OCTET", NULL, len);
  177. if (ok) {
  178. strcpy(toReturn, "pbf_service");
  179. } else {
  180. strcpy(toReturn, "fail");
  181. }
  182. tpreturn(TPSUCCESS, 23, toReturn, len, 0);
  183. }