TestSpecExampleOne.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 "TestSpecExampleOne.h"
  25. extern void debit_credit_svc(TPSVCINFO *svcinfo);
  26. void TestSpecExampleOne::setUp() {
  27. userlogc((char*) "TestSpecExampleOne::setUp");
  28. // Setup server
  29. BaseServerTest::setUp();
  30. // Do local work
  31. int toCheck = tpadvertise((char*) "DEBIT", debit_credit_svc);
  32. BT_ASSERT(tperrno == 0);
  33. BT_ASSERT(toCheck != -1);
  34. toCheck = tpadvertise((char*) "CREDIT", debit_credit_svc);
  35. BT_ASSERT(tperrno == 0);
  36. BT_ASSERT(toCheck != -1);
  37. }
  38. void TestSpecExampleOne::tearDown() {
  39. userlogc((char*) "TestSpecExampleOne::tearDown");
  40. // Do local work
  41. int toCheck = tpunadvertise((char*) "DEBIT");
  42. BT_ASSERT(tperrno == 0);
  43. BT_ASSERT(toCheck != -1);
  44. toCheck = tpunadvertise((char*) "CREDIT");
  45. BT_ASSERT(tperrno == 0);
  46. BT_ASSERT(toCheck != -1);
  47. // Clean up server
  48. BaseServerTest::tearDown();
  49. }
  50. /* this test is taken from the XATMI specification */
  51. void TestSpecExampleOne::test_specexampleone() {
  52. init_ace();
  53. userlogc((char*) "TestSpecExampleOne::test_specexampleone");
  54. DATA_BUFFER *dptr; /* DATA_BUFFER is a typed buffer of type */
  55. DATA_BUFFER *cptr; /* X_C_TYPE and subtype dc_buf. The structure */
  56. long dlen = 0;
  57. long clen = 0; /* contains a character array named input and an */
  58. int cd; /* integer named output. */
  59. /* allocate typed buffers */
  60. dptr = (DATA_BUFFER *) tpalloc((char*) "X_C_TYPE", (char*) "dc_buf", 0);
  61. cptr = (DATA_BUFFER *) tpalloc((char*) "X_C_TYPE", (char*) "dc_buf", 0);
  62. /* populate typed buffers with input data */
  63. strcpy(dptr->input, "debit account 123 by 50");
  64. strcpy(cptr->input, "credit account 456 by 50");
  65. tx_begin(); /* start global transaction */
  66. /* issue asynchronous request to DEBIT, while it is processing... */
  67. cd = tpacall((char*) "DEBIT", (char *) dptr, 0, TPSIGRSTRT);
  68. /* ...issue synchronous request to CREDIT */
  69. tpcall((char*) "CREDIT", (char *) cptr, 0, (char **) &cptr, &clen,
  70. TPSIGRSTRT);
  71. /* retrieve DEBIT�s reply */
  72. tpgetrply(&cd, (char **) &dptr, &dlen, TPSIGRSTRT);
  73. if (dptr->output == OK && cptr->output == OK)
  74. tx_commit(); /* commit global transaction */
  75. else
  76. tx_rollback(); /* rollback global transaction */
  77. }
  78. /* this routine is used for DEBIT and CREDIT */
  79. void debit_credit_svc(TPSVCINFO *svcinfo) {
  80. init_ace();
  81. userlogc((char*) "debit_credit_svc");
  82. DATA_BUFFER *dc_ptr;
  83. int rval;
  84. /* extract request typed buffer */
  85. dc_ptr = (DATA_BUFFER *) svcinfo->data;
  86. /*
  87.  * Depending on service name used to invoke this
  88.  * routine, perform either debit or credit work.
  89.  */
  90. if (!strcmp(svcinfo->name, "DEBIT")) {
  91. /*
  92.  * Parse input data and perform debit
  93.  * as part of global transaction.
  94.  */
  95. } else {
  96. /*
  97.  * Parse input data and perform credit
  98.  * as part of global transaction.
  99.  */
  100. }
  101. // TODO MAKE TWO TESTS
  102. if (dc_ptr->failTest == 0) {
  103. rval = TPSUCCESS;
  104. dc_ptr->output = OK;
  105. } else {
  106. rval = TPFAIL; /* global transaction will not commit */
  107. dc_ptr->output = NOT_OK;
  108. }
  109. /* send reply and return from service routine */
  110. tpreturn(rval, 0, (char *) dc_ptr, 0, 0);
  111. }