Back to home page

Enduro/X

 
 

    


0001 /**
0002  *
0003  * @file test_bupdate.c
0004  */
0005 /* -----------------------------------------------------------------------------
0006  * Enduro/X Middleware Platform for Distributed Transaction Processing
0007  * Copyright (C) 2009-2016, ATR Baltic, Ltd. All Rights Reserved.
0008  * Copyright (C) 2017-2023, Mavimax, Ltd. All Rights Reserved.
0009  * This software is released under one of the following licenses:
0010  * AGPL (with Java and Go exceptions) or Mavimax's license for commercial use.
0011  * See LICENSE file for full text.
0012  * -----------------------------------------------------------------------------
0013  * AGPL license:
0014  *
0015  * This program is free software; you can redistribute it and/or modify it under
0016  * the terms of the GNU Affero General Public License, version 3 as published
0017  * by the Free Software Foundation;
0018  *
0019  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
0020  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0021  * PARTICULAR PURPOSE. See the GNU Affero General Public License, version 3
0022  * for more details.
0023  *
0024  * You should have received a copy of the GNU Affero General Public License along 
0025  * with this program; if not, write to the Free Software Foundation, Inc.,
0026  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0027  *
0028  * -----------------------------------------------------------------------------
0029  * A commercial use license is available from Mavimax, Ltd
0030  * contact@mavimax.com
0031  * -----------------------------------------------------------------------------
0032  */
0033 
0034 #include <stdio.h>
0035 #include <stdlib.h>
0036 #include <cgreen/cgreen.h>
0037 #include <ubf.h>
0038 #include <ndrstandard.h>
0039 #include <string.h>
0040 #include "test.fd.h"
0041 #include "ubfunit1.h"
0042 
0043 void load_update_test_data(UBFH *p_ub)
0044 {
0045     short s = 88;
0046     long l = -1021;
0047     char c = 'c';
0048     float f = 17.31;
0049     double d = 12312.1111;
0050     char carr[] = "CARRAY1 TEST STRING DATA";
0051     BFLDLEN len = strlen(carr);
0052 
0053     /* block 1 */
0054     assert_equal(Bchg(p_ub, T_SHORT_FLD, 0, (char *)&s, 0), EXSUCCEED);
0055     assert_equal(Bchg(p_ub, T_LONG_FLD, 0, (char *)&l, 0), EXSUCCEED);
0056     assert_equal(Bchg(p_ub, T_CHAR_FLD, 0, (char *)&c, 0), EXSUCCEED);
0057     assert_equal(Bchg(p_ub, T_FLOAT_FLD, 0, (char *)&f, 0), EXSUCCEED);
0058     assert_equal(Bchg(p_ub, T_DOUBLE_FLD, 0, (char *)&d, 0), EXSUCCEED);
0059     assert_equal(Bchg(p_ub, T_STRING_FLD, 0, (char *)"TEST STR VAL", 0), EXSUCCEED);
0060     assert_equal(Bchg(p_ub, T_CARRAY_FLD, 0, (char *)carr, len), EXSUCCEED);
0061 
0062     gen_load_ubf(p_ub, 0, 1, 0);
0063     gen_load_view(p_ub, 0, 1, 0);
0064     gen_load_ptr(p_ub, 0, 1, 0);
0065     
0066     /* block 2 */
0067     /* Make second copy of field data (another for not equal test)*/
0068     s = 8;
0069     l = -21;
0070     c = '.';
0071     f = 1.31;
0072     d = 1231.1111;
0073     carr[0] = 'Y';
0074     len = strlen(carr);
0075 
0076     assert_equal(Bchg(p_ub, T_SHORT_FLD, 5, (char *)&s, 0), EXSUCCEED);
0077     assert_equal(Bchg(p_ub, T_LONG_FLD, 5, (char *)&l, 0), EXSUCCEED);
0078     assert_equal(Bchg(p_ub, T_CHAR_FLD, 5, (char *)&c, 0), EXSUCCEED);
0079     assert_equal(Bchg(p_ub, T_FLOAT_FLD, 5, (char *)&f, 0), EXSUCCEED);
0080     assert_equal(Bchg(p_ub, T_DOUBLE_FLD, 5, (char *)&d, 0), EXSUCCEED);
0081     assert_equal(Bchg(p_ub, T_STRING_FLD, 5, (char *)"TEST STRING ARRAY2", 0), EXSUCCEED);
0082     assert_equal(Bchg(p_ub, T_CARRAY_FLD, 5, (char *)carr, len), EXSUCCEED);
0083     
0084     gen_load_ubf(p_ub, 5, 2, 0);
0085     gen_load_view(p_ub, 5, 2, 0);
0086     gen_load_ptr(p_ub, 5, 2, 0);
0087 
0088     /* block 3 */
0089     s = 212;
0090     l = 212;
0091     c = 'b';
0092     f = 12127;
0093     d = 1231232.1;
0094     carr[0] = 'X';
0095     assert_equal(Bchg(p_ub, T_SHORT_2_FLD, 8, (char *)&s, 0), EXSUCCEED);
0096     assert_equal(Bchg(p_ub, T_LONG_2_FLD, 8, (char *)&l, 0), EXSUCCEED);
0097     assert_equal(Bchg(p_ub, T_CHAR_2_FLD, 8, (char *)&c, 0), EXSUCCEED);
0098     assert_equal(Bchg(p_ub, T_FLOAT_2_FLD, 8, (char *)&f, 0), EXSUCCEED);
0099     assert_equal(Bchg(p_ub, T_DOUBLE_2_FLD, 8, (char *)&d, 0), EXSUCCEED);
0100     assert_equal(Bchg(p_ub, T_STRING_2_FLD, 8, (char *)"XTEST STR VAL", 0), EXSUCCEED);
0101     assert_equal(Bchg(p_ub, T_CARRAY_2_FLD, 8, (char *)carr, len), EXSUCCEED);
0102     
0103     gen_load_ubf(p_ub, 8, 3, 1);
0104     gen_load_view(p_ub, 8, 3, 1);
0105     gen_load_ptr(p_ub, 8, 3, 1);
0106     
0107 }
0108 
0109 void test_update_data_1(UBFH *p_ub)
0110 {
0111     short s;
0112     long l;
0113     char c;
0114     float f;
0115     double d;
0116     char buf[100];
0117     BFLDLEN len;
0118     char carr[] = "CARRAY1 TEST STRING DATA";
0119 
0120     /* test block 1 */
0121     /* OCC 0 */
0122     assert_equal(Bget(p_ub, T_SHORT_FLD, 0, (char *)&s, 0), EXSUCCEED);
0123     assert_equal(s, 88);
0124     assert_equal(Bget(p_ub, T_LONG_FLD, 0, (char *)&l, 0), EXSUCCEED);
0125     assert_equal(l, -1021);
0126     assert_equal(Bget(p_ub, T_CHAR_FLD, 0, (char *)&c, 0), EXSUCCEED);
0127     assert_equal(c, 'c');
0128     assert_equal(Bget(p_ub, T_FLOAT_FLD, 0, (char *)&f, 0), EXSUCCEED);
0129     assert_double_equal(f, 17.31);
0130     assert_equal(Bget(p_ub, T_DOUBLE_FLD, 0, (char *)&d, 0), EXSUCCEED);
0131     assert_double_equal(d, 12312.1111);
0132     assert_equal(Bget(p_ub, T_STRING_FLD, 0, (char *)buf, 0), EXSUCCEED);
0133     assert_string_equal(buf, "TEST STR VAL");
0134 
0135     len = sizeof(buf);
0136     assert_equal(Bget(p_ub, T_CARRAY_FLD, 0, (char *)buf, &len), EXSUCCEED);
0137     assert_equal(strncmp(buf, carr, strlen(carr)), 0);
0138     
0139     gen_test_ubf(p_ub, 0, 1, 0);
0140     gen_test_view(p_ub, 0, 1, 0);
0141     gen_test_ptr(p_ub, 0, 1, 0);
0142 
0143 
0144     /* test block 2 */
0145     /* OCC 1 */
0146     assert_equal(Bget(p_ub, T_SHORT_FLD, 5, (char *)&s, 0), EXSUCCEED);
0147     assert_equal(s, 8);
0148     assert_equal(Bget(p_ub, T_LONG_FLD, 5, (char *)&l, 0), EXSUCCEED);
0149     assert_equal(l, -21);
0150     assert_equal(Bget(p_ub, T_CHAR_FLD, 5, (char *)&c, 0), EXSUCCEED);
0151     assert_equal(c, '.');
0152     assert_equal(Bget(p_ub, T_FLOAT_FLD, 5, (char *)&f, 0), EXSUCCEED);
0153     assert_double_equal(f, 1.31);
0154     assert_equal(Bget(p_ub, T_DOUBLE_FLD, 5, (char *)&d, 0), EXSUCCEED);
0155     assert_double_equal(d, 1231.1111);
0156     assert_equal(Bget(p_ub, T_STRING_FLD, 5, (char *)buf, 0), EXSUCCEED);
0157     assert_string_equal(buf, "TEST STRING ARRAY2");
0158 
0159     len = sizeof(buf);
0160     carr[0] = 'Y';
0161     assert_equal(Bget(p_ub, T_CARRAY_FLD, 5, (char *)buf, &len), EXSUCCEED);
0162     assert_equal(strncmp(buf, carr, strlen(carr)), 0);
0163     
0164     
0165     gen_test_ubf(p_ub, 5, 2, 0);
0166     gen_test_view(p_ub, 5, 2, 0);
0167     gen_test_ptr(p_ub, 5, 2, 0);
0168 
0169 
0170     /* test block 3 */
0171     
0172     /* Test FLD2 */
0173     assert_equal(Bget(p_ub, T_SHORT_2_FLD, 8, (char *)&s, 0), EXSUCCEED);
0174     assert_equal(s, 212);
0175     assert_equal(Bget(p_ub, T_LONG_2_FLD, 8, (char *)&l, 0), EXSUCCEED);
0176     assert_equal(l, 212);
0177     assert_equal(Bget(p_ub, T_CHAR_2_FLD, 8, (char *)&c, 0), EXSUCCEED);
0178     assert_equal(c, 'b');
0179     assert_equal(Bget(p_ub, T_FLOAT_2_FLD, 8, (char *)&f, 0), EXSUCCEED);
0180     assert_double_equal(f, 12127);
0181     assert_equal(Bget(p_ub, T_DOUBLE_2_FLD, 8, (char *)&d, 0), EXSUCCEED);
0182     assert_double_equal(d, 1231232.1);
0183     assert_equal(Bget(p_ub, T_STRING_2_FLD, 8, (char *)buf, 0), EXSUCCEED);
0184     assert_string_equal(buf, "XTEST STR VAL");
0185 
0186     len = sizeof(buf);
0187     carr[0] = 'X';
0188     assert_equal(Bget(p_ub, T_CARRAY_2_FLD, 8, (char *)buf, &len), EXSUCCEED);
0189     assert_equal(strncmp(buf, carr, strlen(carr)), 0);
0190     
0191     gen_test_ubf(p_ub, 8, 3, 1);
0192     gen_test_view(p_ub, 8, 3, 1);
0193     gen_test_ptr(p_ub, 8, 3, 1);
0194 
0195 }
0196 
0197 /**
0198  * Load alternate data, which after
0199  * @param p_ub
0200  */
0201 void load_update_test_data_2(UBFH *p_ub)
0202 {
0203     short s = 881;
0204     long l = -10211;
0205     char c = '1';
0206     float f = 117.31;
0207     double d = 112312.1111;
0208     char carr[] = "CARRAY1 TEST STRING DATA1 --- SOME --- LONG - STUFF";
0209     BFLDLEN len = strlen(carr);
0210 
0211     /* block 4 */
0212     assert_equal(Bchg(p_ub, T_SHORT_FLD, 0, (char *)&s, 0), EXSUCCEED);
0213     assert_equal(Bchg(p_ub, T_LONG_FLD, 0, (char *)&l, 0), EXSUCCEED);
0214     assert_equal(Bchg(p_ub, T_CHAR_FLD, 0, (char *)&c, 0), EXSUCCEED);
0215     assert_equal(Bchg(p_ub, T_FLOAT_FLD, 0, (char *)&f, 0), EXSUCCEED);
0216     assert_equal(Bchg(p_ub, T_DOUBLE_FLD, 0, (char *)&d, 0), EXSUCCEED);
0217     assert_equal(Bchg(p_ub, T_STRING_FLD, 0, (char *)"TEST STR VAL1M THIS IS LOGN STRING", 0), EXSUCCEED);
0218     assert_equal(Bchg(p_ub, T_CARRAY_FLD, 0, (char *)carr, len), EXSUCCEED);
0219     
0220     
0221     gen_load_ubf(p_ub, 0, 4, 0);
0222     gen_load_view(p_ub, 0, 4, 0);
0223     gen_load_ptr(p_ub, 0, 4, 0);
0224 
0225 
0226     /* block 5 */
0227     /* Make second copy of field data (another for not equal test)*/
0228     s = 81;
0229     l = -211;
0230     c = '.';
0231     f = 11.31;
0232     d = 11231.1111;
0233     carr[0] = '2';
0234     len = strlen(carr);
0235 
0236     assert_equal(Bchg(p_ub, T_SHORT_FLD, 6, (char *)&s, 0), EXSUCCEED);
0237     assert_equal(Bchg(p_ub, T_LONG_FLD, 6, (char *)&l, 0), EXSUCCEED);
0238     assert_equal(Bchg(p_ub, T_CHAR_FLD, 6, (char *)&c, 0), EXSUCCEED);
0239     assert_equal(Bchg(p_ub, T_FLOAT_FLD, 6, (char *)&f, 0), EXSUCCEED);
0240     assert_equal(Bchg(p_ub, T_DOUBLE_FLD, 6, (char *)&d, 0), EXSUCCEED);
0241     assert_equal(Bchg(p_ub, T_STRING_FLD, 6, (char *)"3EST STRING ARRAY2 THIS IS EVEN MORE LONGER", 0), EXSUCCEED);
0242     assert_equal(Bchg(p_ub, T_CARRAY_FLD, 6, (char *)carr, len), EXSUCCEED);
0243     
0244     gen_load_ubf(p_ub, 6, 5, 0);
0245     gen_load_view(p_ub, 6, 5, 0);
0246     gen_load_ptr(p_ub, 6, 5, 0);
0247 
0248     /* block 6 */
0249     /* This part we will keep the same */
0250     s = 2121;
0251     l = 2121;
0252     c = 'c';
0253     f = 1227;
0254     d = 1232.1;
0255     carr[0] = 'G';
0256     assert_equal(Bchg(p_ub, T_SHORT_2_FLD, 1, (char *)&s, 0), EXSUCCEED);
0257     assert_equal(Bchg(p_ub, T_LONG_2_FLD, 1, (char *)&l, 0), EXSUCCEED);
0258     assert_equal(Bchg(p_ub, T_CHAR_2_FLD, 1, (char *)&c, 0), EXSUCCEED);
0259     assert_equal(Bchg(p_ub, T_FLOAT_2_FLD, 1, (char *)&f, 0), EXSUCCEED);
0260     assert_equal(Bchg(p_ub, T_DOUBLE_2_FLD, 1, (char *)&d, 0), EXSUCCEED);
0261     assert_equal(Bchg(p_ub, T_STRING_2_FLD, 1, (char *)"XTEST STR VAL", 0), EXSUCCEED);
0262     assert_equal(Bchg(p_ub, T_CARRAY_2_FLD, 1, (char *)carr, len), EXSUCCEED);
0263     
0264     
0265     gen_load_ubf(p_ub, 1, 6, 1);
0266     gen_load_view(p_ub, 1, 6, 1);
0267     gen_load_ptr(p_ub, 1, 6, 1);
0268 }
0269 
0270 void test_update_data_2(UBFH *p_ub)
0271 {
0272     short s;
0273     long l;
0274     char c;
0275     float f;
0276     double d;
0277     char buf[100];
0278     BFLDLEN len;
0279     char carr[] = "CARRAY1 TEST STRING DATA1 --- SOME --- LONG - STUFF";
0280 
0281     /* test block 4 */
0282     /* OCC 0 */
0283     assert_equal(Bget(p_ub, T_SHORT_FLD, 0, (char *)&s, 0), EXSUCCEED);
0284     assert_equal(s, 881);
0285     assert_equal(Bget(p_ub, T_LONG_FLD, 0, (char *)&l, 0), EXSUCCEED);
0286     assert_equal(l, -10211);
0287     assert_equal(Bget(p_ub, T_CHAR_FLD, 0, (char *)&c, 0), EXSUCCEED);
0288     assert_equal(c, '1');
0289     assert_equal(Bget(p_ub, T_FLOAT_FLD, 0, (char *)&f, 0), EXSUCCEED);
0290     assert_double_equal(f, 117.31);
0291     assert_equal(Bget(p_ub, T_DOUBLE_FLD, 0, (char *)&d, 0), EXSUCCEED);
0292     assert_double_equal(d, 112312.1111);
0293     assert_equal(Bget(p_ub, T_STRING_FLD, 0, (char *)buf, 0), EXSUCCEED);
0294     assert_string_equal(buf, "TEST STR VAL1M THIS IS LOGN STRING");
0295 
0296     len = sizeof(buf);
0297     assert_equal(Bget(p_ub, T_CARRAY_FLD, 0, (char *)buf, &len), EXSUCCEED);
0298     assert_equal(strncmp(buf, carr, strlen(carr)), 0);
0299     
0300     gen_test_ubf(p_ub, 0, 4, 0);
0301     gen_test_view(p_ub, 0, 4, 0);
0302     gen_test_ptr(p_ub, 0, 4, 0);
0303 
0304     /* test block 5 */
0305     /* OCC 1 */
0306     assert_equal(Bget(p_ub, T_SHORT_FLD, 6, (char *)&s, 0), EXSUCCEED);
0307     assert_equal(s, 81);
0308     assert_equal(Bget(p_ub, T_LONG_FLD, 6, (char *)&l, 0), EXSUCCEED);
0309     assert_equal(l, -211);
0310     assert_equal(Bget(p_ub, T_CHAR_FLD, 6, (char *)&c, 0), EXSUCCEED);
0311     assert_equal(c, '.');
0312     assert_equal(Bget(p_ub, T_FLOAT_FLD, 6, (char *)&f, 0), EXSUCCEED);
0313     assert_double_equal(f, 11.31);
0314     assert_equal(Bget(p_ub, T_DOUBLE_FLD, 6, (char *)&d, 0), EXSUCCEED);
0315     assert_double_equal(d, 11231.1111);
0316     assert_equal(Bget(p_ub, T_STRING_FLD, 6, (char *)buf, 0), EXSUCCEED);
0317     assert_string_equal(buf, "3EST STRING ARRAY2 THIS IS EVEN MORE LONGER");
0318 
0319     len = sizeof(buf);
0320     carr[0] = '2';
0321     assert_equal(Bget(p_ub, T_CARRAY_FLD, 6, (char *)buf, &len), EXSUCCEED);
0322     assert_equal(strncmp(buf, carr, strlen(carr)), 0);
0323     
0324     gen_test_ubf(p_ub, 6, 5, 0);
0325     gen_test_view(p_ub, 6, 5, 0);
0326     gen_test_ptr(p_ub, 6, 5, 0);
0327 
0328 
0329     /* test block 6 */
0330     /* Test FLD2 */
0331     assert_equal(Bget(p_ub, T_SHORT_2_FLD, 1, (char *)&s, 0), EXSUCCEED);
0332     assert_equal(s, 2121);
0333     assert_equal(Bget(p_ub, T_LONG_2_FLD, 1, (char *)&l, 0), EXSUCCEED);
0334     assert_equal(l, 2121);
0335     assert_equal(Bget(p_ub, T_CHAR_2_FLD, 1, (char *)&c, 0), EXSUCCEED);
0336     assert_equal(c, 'c');
0337     assert_equal(Bget(p_ub, T_FLOAT_2_FLD, 1, (char *)&f, 0), EXSUCCEED);
0338     assert_double_equal(f, 1227);
0339     assert_equal(Bget(p_ub, T_DOUBLE_2_FLD, 1, (char *)&d, 0), EXSUCCEED);
0340     assert_double_equal(d, 1232.1);
0341     assert_equal(Bget(p_ub, T_STRING_2_FLD, 1, (char *)buf, 0), EXSUCCEED);
0342     assert_string_equal(buf, "XTEST STR VAL");
0343 
0344     len = sizeof(buf);
0345     carr[0] = 'G';
0346     assert_equal(Bget(p_ub, T_CARRAY_2_FLD, 1, (char *)buf, &len), EXSUCCEED);
0347     assert_equal(strncmp(buf, carr, strlen(carr)), 0);
0348     
0349     gen_test_ubf(p_ub, 1, 6, 1);
0350     gen_test_view(p_ub, 1, 6, 1);
0351     gen_test_ptr(p_ub, 1, 6, 1);
0352 }
0353 
0354 
0355 /**
0356  * This simply reads all field and adds them to another buffer, then do compare
0357  */
0358 Ensure(test_fupdate)
0359 {
0360     char fb[9000];
0361     UBFH *p_ub = (UBFH *)fb;
0362 
0363     char fb2[9000];
0364     UBFH *p_ub2 = (UBFH *)fb2;
0365 
0366     assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0367     assert_equal(Binit(p_ub2, sizeof(fb2)), EXSUCCEED);
0368 
0369     load_update_test_data(p_ub);
0370     /* Do the full copy - output should be the same */
0371     assert_equal(Bupdate(p_ub2, p_ub), EXSUCCEED);
0372     assert_equal(Bcmp(p_ub2, p_ub), 0);
0373     /* Do the update over again - should be the same */
0374     assert_equal(Bcmp(p_ub2, p_ub), 0);
0375     test_update_data_1(p_ub2);
0376     /* -------------------------------------------------------- */
0377     assert_equal(Binit(p_ub2, sizeof(fb2)), EXSUCCEED);
0378     load_update_test_data_2(p_ub2);
0379     test_update_data_2(p_ub2);
0380     assert_equal(Bupdate(p_ub2, p_ub), EXSUCCEED);
0381     test_update_data_1(p_ub2);
0382 }
0383 
0384 TestSuite *ubf_fupdate_tests(void)
0385 {
0386     TestSuite *suite = create_test_suite();
0387 
0388     add_test(suite, test_fupdate);
0389 
0390     return suite;
0391 }
0392 
0393 /* vim: set ts=4 sw=4 et smartindent: */