Back to home page

Enduro/X

 
 

    


0001 /**
0002  * @brief TP Cache tests - client
0003  *
0004  * @file 01_atmiclt48.c
0005  */
0006 /* -----------------------------------------------------------------------------
0007  * Enduro/X Middleware Platform for Distributed Transaction Processing
0008  * Copyright (C) 2009-2016, ATR Baltic, Ltd. All Rights Reserved.
0009  * Copyright (C) 2017-2023, Mavimax, Ltd. All Rights Reserved.
0010  * This software is released under one of the following licenses:
0011  * AGPL (with Java and Go exceptions) or Mavimax's license for commercial use.
0012  * See LICENSE file for full text.
0013  * -----------------------------------------------------------------------------
0014  * AGPL license:
0015  *
0016  * This program is free software; you can redistribute it and/or modify it under
0017  * the terms of the GNU Affero General Public License, version 3 as published
0018  * by the Free Software Foundation;
0019  *
0020  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
0021  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0022  * PARTICULAR PURPOSE. See the GNU Affero General Public License, version 3
0023  * for more details.
0024  *
0025  * You should have received a copy of the GNU Affero General Public License along 
0026  * with this program; if not, write to the Free Software Foundation, Inc.,
0027  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0028  *
0029  * -----------------------------------------------------------------------------
0030  * A commercial use license is available from Mavimax, Ltd
0031  * contact@mavimax.com
0032  * -----------------------------------------------------------------------------
0033  */
0034 #include <string.h>
0035 #include <stdio.h>
0036 #include <stdlib.h>
0037 #include <memory.h>
0038 #include <math.h>
0039 
0040 #include <atmi.h>
0041 #include <ubf.h>
0042 #include <ndebug.h>
0043 #include <test.fd.h>
0044 #include <ndrstandard.h>
0045 #include <nstopwatch.h>
0046 #include <fcntl.h>
0047 #include <unistd.h>
0048 #include <nstdutil.h>
0049 #include <ubfutil.h>
0050 #include "test48.h"
0051 /*---------------------------Externs------------------------------------*/
0052 /*---------------------------Macros-------------------------------------*/
0053 /*---------------------------Enums--------------------------------------*/
0054 /*---------------------------Typedefs-----------------------------------*/
0055 /*---------------------------Globals------------------------------------*/
0056 /*---------------------------Statics------------------------------------*/
0057 /*---------------------------Prototypes---------------------------------*/
0058 
0059 /**
0060  * Do the test call to the server
0061  * So some testing for cache could be for time based fields
0062  * If time stamp not changed, it is from cache
0063  * If changed then new data
0064  */
0065 int main(int argc, char** argv)
0066 {
0067 
0068     UBFH *p_ub = (UBFH *)tpalloc("UBF", NULL, 56000);
0069     long rsplen;
0070     short i;
0071     short i_res, i_res_prev = EXFAIL;
0072     int ret=EXSUCCEED;
0073     char testbuf[1024];
0074     char tstamp[TSTAMP_BUFSZ];
0075     char tstamp_prev[TSTAMP_BUFSZ];
0076     BFLDID emtpy [] = {BBADFLDID};
0077 
0078     for (i=0; i<200; i++)
0079     {
0080         if (EXSUCCEED!=Bproj(p_ub, emtpy))
0081         {
0082             NDRX_LOG(log_debug, "Failed to reset buffer: %s", Bstrerror(Berror));
0083             ret=EXFAIL;
0084             goto out;
0085         }
0086 
0087         if (EXFAIL==CBchg(p_ub, T_STRING_FLD, 0, VALUE_EXPECTED, 0, BFLD_STRING))
0088         {
0089             NDRX_LOG(log_debug, "Failed to set T_STRING_FLD[0]: %s", Bstrerror(Berror));
0090             ret=EXFAIL;
0091             goto out;
0092         } 
0093 
0094         if (EXFAIL==CBchg(p_ub, T_STRING_3_FLD, 0, "HELLO", 0, BFLD_STRING))
0095         {
0096             NDRX_LOG(log_debug, "Failed to set T_STRING_3_FLD[0]: %s", Bstrerror(Berror));
0097             ret=EXFAIL;
0098             goto out;
0099         }
0100 
0101         i_res = i / 5;
0102         
0103         if (EXFAIL==CBchg(p_ub, T_STRING_2_FLD, 1, (char *)&i_res, 0, BFLD_SHORT))
0104         {
0105             NDRX_LOG(log_debug, "Failed to set T_STRING_2_FLD[1]: %s", Bstrerror(Berror));
0106             ret=EXFAIL;
0107             goto out;
0108         }
0109 
0110         if (EXFAIL==CBchg(p_ub, T_LONG_FLD, 0, "4", 0, BFLD_STRING))
0111         {
0112             NDRX_LOG(log_debug, "Failed to set T_LONG_FLD[0]: %s", Bstrerror(Berror));
0113             ret=EXFAIL;
0114             goto out;
0115         }
0116 
0117         if (EXFAIL==CBchg(p_ub, T_SHORT_FLD, 0, "3", 0, BFLD_STRING))
0118         {
0119             NDRX_LOG(log_debug, "Failed to set T_SHORT_FLD[0]: %s", Bstrerror(Berror));
0120             ret=EXFAIL;
0121             goto out;
0122         } 
0123 
0124         if (EXFAIL == tpcall("TESTSV01", (char *)p_ub, 0L, (char **)&p_ub, &rsplen,0))
0125         {
0126             NDRX_LOG(log_error, "TESTSV01 failed: %s", tpstrerror(tperrno));
0127             ret=EXFAIL;
0128             goto out;
0129         }
0130         
0131         /* Dump the reply */
0132         
0133         ndrx_debug_dump_UBF(log_debug, "Got data from service", p_ub);
0134         
0135         
0136         /* validate response... */
0137         
0138         if (EXFAIL==Bget(p_ub, T_STRING_FLD, 1, testbuf, 0))
0139         {
0140             NDRX_LOG(log_error, "TESTERROR: Failed to get T_STRING_FLD: %s", 
0141                      Bstrerror(Berror));
0142             ret=EXFAIL;
0143             goto out;
0144         }
0145 
0146         if (0!=strcmp(testbuf, VALUE_EXPECTED_RET))
0147         {
0148             NDRX_LOG(log_error, "TESTERROR: Expected: [%s] got [%s]",
0149                 VALUE_EXPECTED_RET, testbuf);
0150             ret=EXFAIL;
0151             goto out;
0152         }
0153         
0154         if (EXFAIL==Bget(p_ub, T_STRING_5_FLD, 0, tstamp, 0))
0155         {
0156             NDRX_LOG(log_error, "TESTERROR: Failed to get T_STRING_5_FLD - tstamp: %s", 
0157                      Bstrerror(Berror));
0158             ret=EXFAIL;
0159             goto out;
0160         }
0161         
0162         if (EXFAIL==i_res_prev)
0163         {
0164             /* first get cache prev */
0165             i_res_prev = i_res;
0166             NDRX_STRCPY_SAFE(tstamp_prev, tstamp);
0167         }
0168         else if (i_res_prev != i_res)
0169         {
0170             NDRX_STRCPY_SAFE(tstamp_prev, tstamp);
0171             i_res_prev = i_res;
0172         }
0173         else
0174         {
0175             /* compare with cache prev, should be the same as cached */
0176             
0177             if (0!=strcmp(tstamp, tstamp_prev))
0178             {
0179                 NDRX_LOG(log_error, "TESTERROR ! i_res = %d, tstamp [%d] != tstamp_prev [%d]",
0180                         tstamp, tstamp_prev);
0181                 EXFAIL_OUT(ret);
0182             }
0183         }
0184     }
0185     
0186 out:
0187     tpterm();
0188     fprintf(stderr, "Exit with %d\n", ret);
0189 
0190     return ret;
0191 }
0192 /* vim: set ts=4 sw=4 et smartindent: */