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

中间件编程

开发平台:

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 "XATMITestSuite.h"
  21. #include "xatmi.h"
  22. #include "tx.h"
  23. #include <string.h>
  24. #include "TestSpecExampleTwo.h"
  25. extern void inquiry_svc(TPSVCINFO *svcinfo);
  26. void TestSpecExampleTwo::setUp() {
  27. userlogc((char*) "TestSpecExampleTwo::setUp");
  28. // Setup server
  29. BaseServerTest::setUp();
  30. // Do local work
  31. int toCheck = tpadvertise((char*) "INQUIRY", inquiry_svc);
  32. BT_ASSERT(tperrno == 0);
  33. BT_ASSERT(toCheck != -1);
  34. }
  35. void TestSpecExampleTwo::tearDown() {
  36. userlogc((char*) "TestSpecExampleTwo::tearDown");
  37. // Do local work
  38. int toCheck = tpunadvertise((char*) "INQUIRY");
  39. BT_ASSERT(tperrno == 0);
  40. BT_ASSERT(toCheck != -1);
  41. // Clean up server
  42. BaseServerTest::tearDown();
  43. }
  44. void TestSpecExampleTwo::test_specexampletwo() {
  45. userlogc((char*) "TestSpecExampleTwo::test_specexampletwo");
  46. DATA_BUFFER *ptr; /* DATA_BUFFER is a typed buffer of type */
  47. long len = 0;
  48. long event = 0; /* X_C_TYPE and subtype inq_buf. The structure */
  49. int cd; /* contains a character array named input and an */
  50. /* array of integers named output. */
  51. /* allocate typed buffer */
  52. ptr = (DATA_BUFFER *) tpalloc((char*) "X_C_TYPE", (char*) "inq_buf", 0);
  53. /* populate typed buffer with input data */
  54. strcpy(ptr->input, "retrieve all accounts with balances less than 0");
  55. tx_begin(); /* start global transaction */
  56. /*connect to conversational service, send input data, & yield control*/
  57. cd = tpconnect((char*) "INQUIRY", (char *) ptr, 0, TPRECVONLY | TPSIGRSTRT);
  58. do {
  59. /* receive 10 account records at a time */
  60. tprecv(cd, (char **) &ptr, &len, TPSIGRSTRT, &event);
  61. /*
  62.  * Format & display in AP-specific manner the accounts returned.
  63.  */
  64. } while (tperrno != TPEEVENT);
  65. if (event == TPEV_SVCSUCC)
  66. tx_commit(); /* commit global transaction */
  67. else
  68. tx_rollback(); /* rollback global transaction */
  69. }
  70. /* this routine is used for INQUIRY */
  71. void inquiry_svc(TPSVCINFO *svcinfo) {
  72. userlogc((char*) "inquiry_svc");
  73. DATA_BUFFER *ptr;
  74. long event;
  75. int rval;
  76. /* extract initial typed buffer sent as part of tpconnect() */
  77. ptr = (DATA_BUFFER *) svcinfo->data;
  78. /*
  79.  * Parse input string, ptr->input, and retrieve records.
  80.  * Return 10 records at a time to client. Records are
  81.  * placed in ptr->output, an array of account records.
  82.  */
  83. for (int i = 0; i < 5; i++) {
  84. /* gather from DBMS next 10 records into ptr->output array */
  85. tpsend(svcinfo->cd, (char *) ptr, 0, TPSIGRSTRT, &event);
  86. }
  87. // TODO DO OK AND FAIL
  88. if (ptr->failTest == 0) {
  89. rval = TPSUCCESS;
  90. } else {
  91. rval = TPFAIL; /* global transaction will not commit */
  92. }
  93. /* terminate service routine, send no data, and */
  94. /* terminate connection */
  95. tpreturn(rval, 0, NULL, 0, 0);
  96. }