0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
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 <unistd.h>
0041 #include "test.fd.h"
0042 #include "ubfunit1.h"
0043 #include "ndebug.h"
0044 #include "atmi_int.h"
0045
0046
0047
0048
0049 char *ref_print[]= {
0050 "T_SHORT_FLD\t88\n",
0051 "T_SHORT_FLD\t-1\n",
0052 "T_SHORT_2_FLD\t0\n",
0053 "T_SHORT_2_FLD\t212\n",
0054 "T_LONG_FLD\t-1021\n",
0055 "T_LONG_FLD\t-2\n",
0056 "T_LONG_FLD\t0\n",
0057 "T_LONG_FLD\t0\n",
0058 "T_LONG_FLD\t-4\n",
0059 "T_LONG_2_FLD\t0\n",
0060 "T_LONG_2_FLD\t0\n",
0061 "T_LONG_2_FLD\t212\n",
0062 "T_CHAR_FLD\t\\0a\n",
0063 "T_CHAR_FLD\t.\n",
0064 "T_CHAR_2_FLD\t\\00\n",
0065 "T_CHAR_2_FLD\t\\00\n",
0066 "T_CHAR_2_FLD\t\\00\n",
0067 "T_CHAR_2_FLD\tb\n",
0068 "T_FLOAT_FLD\t17.31000\n",
0069 "T_FLOAT_FLD\t1.31000\n",
0070 "T_FLOAT_2_FLD\t0.00000\n",
0071 "T_FLOAT_2_FLD\t0.00000\n",
0072 "T_FLOAT_2_FLD\t0.00000\n",
0073 "T_FLOAT_2_FLD\t0.00000\n",
0074 "T_FLOAT_2_FLD\t1227.00000\n",
0075 "T_DOUBLE_FLD\t12312.111100\n",
0076 "T_DOUBLE_FLD\t112.110000\n",
0077 "T_DOUBLE_2_FLD\t0.000000\n",
0078 "T_DOUBLE_2_FLD\t0.000000\n",
0079 "T_DOUBLE_2_FLD\t0.000000\n",
0080 "T_DOUBLE_2_FLD\t0.000000\n",
0081 "T_DOUBLE_2_FLD\t0.000000\n",
0082 "T_DOUBLE_2_FLD\t1232.100000\n",
0083 "T_STRING_FLD\tTEST STR VAL\n",
0084 "T_STRING_FLD\tTEST STRING ARRAY2\n",
0085 "T_STRING_2_FLD\t\n",
0086 "T_STRING_2_FLD\t\n",
0087 "T_STRING_2_FLD\t\n",
0088 "T_STRING_2_FLD\t\n",
0089 "T_STRING_2_FLD\t\n",
0090 "T_STRING_2_FLD\t\n",
0091 "T_STRING_2_FLD\tMEGA STR\\\\ING \\0a \\09 \\0d\n",
0092 "T_CARRAY_FLD\t\n",
0093 "T_CARRAY_FLD\tY\\01\\02\\03AY1 TEST \\\\STRING DATA\n",
0094 "T_CARRAY_2_FLD\t\n",
0095 "T_CARRAY_2_FLD\t\n",
0096 "T_CARRAY_2_FLD\t\n",
0097 "T_CARRAY_2_FLD\t\n",
0098 "T_CARRAY_2_FLD\t\n",
0099 "T_CARRAY_2_FLD\t\n",
0100 "T_CARRAY_2_FLD\t\n",
0101 "T_CARRAY_2_FLD\t\\00\\01\\02\\03AY1 TEST \\\\STRING DATA\n",
0102 "T_PTR_FLD\t0x2329\n",
0103 "T_PTR_FLD\t0x232a\n",
0104 "T_PTR_FLD\t0x0\n",
0105 "T_PTR_FLD\t0x0\n",
0106 "T_PTR_FLD\t0x0\n",
0107 "T_PTR_FLD\t0x0\n",
0108 "T_PTR_FLD\t0x0\n",
0109 "T_PTR_FLD\t0x232b\n",
0110 "T_UBF_FLD\t\n",
0111 "\tT_STRING_2_FLD\tT\n",
0112 "T_UBF_FLD\t\n",
0113 "\tT_STRING_3_FLD\tU\n",
0114 "T_UBF_FLD\t\n",
0115 "T_UBF_FLD\t\n",
0116 "T_UBF_FLD\t\n",
0117 "T_UBF_FLD\t\n",
0118 "T_UBF_FLD\t\n",
0119 "T_UBF_FLD\t\n",
0120 "T_UBF_FLD\t\n",
0121 "\tT_STRING_4_FLD\tV\n",
0122 "T_VIEW_FLD\tUBTESTVIEW2\n",
0123 "\ttshort1\t2\n",
0124 "\ttlong1\t3\n",
0125 "\ttchar1\t4\n",
0126 "\ttfloat1\t5.00000\n",
0127 "\ttdouble1\t6.000000\n",
0128 "\ttstring1\tB\n",
0129 "\ttcarray1\tD\\00\\09\\09\\09\\09\\09\\09\\09\\09\n",
0130 "T_VIEW_FLD\tUBTESTVIEW2\n",
0131 "\ttshort1\t3\n",
0132 "\ttlong1\t4\n",
0133 "\ttchar1\t5\n",
0134 "\ttfloat1\t6.00000\n",
0135 "\ttdouble1\t7.000000\n",
0136 "\ttstring1\tC\n",
0137 "\ttcarray1\tE\\00\\09\\09\\09\\09\\09\\09\\09\\09\n",
0138 "T_VIEW_FLD\t\n",
0139 "T_VIEW_FLD\t\n",
0140 "T_VIEW_FLD\t\n",
0141 "T_VIEW_FLD\t\n",
0142 "T_VIEW_FLD\t\n",
0143 "T_VIEW_FLD\t\n",
0144 "T_VIEW_FLD\t\n",
0145 "T_VIEW_FLD\tUBTESTVIEW2\n",
0146 "\ttshort1\t4\n",
0147 "\ttlong1\t5\n",
0148 "\ttchar1\t6\n",
0149 "\ttfloat1\t7.00000\n",
0150 "\ttdouble1\t8.000000\n",
0151 "\ttstring1\tD\n",
0152 "\ttcarray1\tF\\00\\09\\09\\09\\09\\09\\09\\09\\09\n",
0153 NULL
0154 };
0155
0156
0157
0158
0159
0160 void load_print_test_data(UBFH *p_ub)
0161 {
0162 short s = 88;
0163 long l = -1021;
0164 char c = '\n';
0165 float f = 17.31;
0166 double d = 12312.1111;
0167 char carr[] = "CARRAY1 TEST \\STRING DATA";
0168 char string2[] = "MEGA STR\\ING \n \t \r";
0169 carr[0] = 0;
0170 carr[1] = 1;
0171 carr[2] = 2;
0172 carr[3] = 3;
0173 BFLDLEN len = strlen(carr);
0174
0175 assert_equal(Bchg(p_ub, T_SHORT_FLD, 0, (char *)&s, 0), EXSUCCEED);
0176 assert_equal(Bchg(p_ub, T_LONG_FLD, 0, (char *)&l, 0), EXSUCCEED);
0177 assert_equal(Bchg(p_ub, T_CHAR_FLD, 0, (char *)&c, 0), EXSUCCEED);
0178 assert_equal(Bchg(p_ub, T_FLOAT_FLD, 0, (char *)&f, 0), EXSUCCEED);
0179 assert_equal(Bchg(p_ub, T_DOUBLE_FLD, 0, (char *)&d, 0), EXSUCCEED);
0180 assert_equal(Bchg(p_ub, T_STRING_FLD, 0, (char *)"TEST STR VAL", 0), EXSUCCEED);
0181 assert_equal(Bchg(p_ub, T_CARRAY_FLD, 0, (char *)carr, len), EXSUCCEED);
0182
0183 gen_load_ptr(p_ub, 0, 1, 0);
0184 gen_load_ubf(p_ub, 0, 1, 0);
0185 gen_load_view(p_ub, 0, 1, 0);
0186
0187
0188 s = -1;
0189 l = -2;
0190 c = '.';
0191 f = 1.31;
0192 d = 112.11;
0193 carr[0] = 'Y';
0194 len = strlen(carr);
0195
0196 assert_equal(Bchg(p_ub, T_SHORT_FLD, 1, (char *)&s, 0), EXSUCCEED);
0197 assert_equal(Bchg(p_ub, T_LONG_FLD, 1, (char *)&l, 0), EXSUCCEED);
0198 assert_equal(Bchg(p_ub, T_CHAR_FLD, 1, (char *)&c, 0), EXSUCCEED);
0199 assert_equal(Bchg(p_ub, T_FLOAT_FLD, 1, (char *)&f, 0), EXSUCCEED);
0200 assert_equal(Bchg(p_ub, T_DOUBLE_FLD, 1, (char *)&d, 0), EXSUCCEED);
0201 assert_equal(Bchg(p_ub, T_STRING_FLD, 1, (char *)"TEST STRING ARRAY2", 0), EXSUCCEED);
0202 assert_equal(Bchg(p_ub, T_CARRAY_FLD, 1, (char *)carr, len), EXSUCCEED);
0203
0204 gen_load_ptr(p_ub, 1, 2, 0);
0205 gen_load_ubf(p_ub, 1, 2, 0);
0206 gen_load_view(p_ub, 1, 2, 0);
0207
0208 l = -4;
0209 assert_equal(Bchg(p_ub, T_LONG_FLD, 4, (char *)&l, 0), EXSUCCEED);
0210
0211 s = 212;
0212 l = 212;
0213 c = 'b';
0214 f = 1227;
0215 d = 1232.1;
0216 carr[0] = 0;
0217 assert_equal(Bchg(p_ub, T_SHORT_2_FLD, 1, (char *)&s, 0), EXSUCCEED);
0218 assert_equal(Bchg(p_ub, T_LONG_2_FLD, 2, (char *)&l, 0), EXSUCCEED);
0219 assert_equal(Bchg(p_ub, T_CHAR_2_FLD, 3, (char *)&c, 0), EXSUCCEED);
0220 assert_equal(Bchg(p_ub, T_FLOAT_2_FLD, 4, (char *)&f, 0), EXSUCCEED);
0221 assert_equal(Bchg(p_ub, T_DOUBLE_2_FLD, 5, (char *)&d, 0), EXSUCCEED);
0222 assert_equal(Bchg(p_ub, T_STRING_2_FLD, 6, (char *)string2, 0), EXSUCCEED);
0223 assert_equal(Bchg(p_ub, T_CARRAY_2_FLD, 7, (char *)carr, len), EXSUCCEED);
0224
0225 gen_load_ptr(p_ub, 7, 3, 0);
0226 gen_load_ubf(p_ub, 8, 3, 0);
0227 gen_load_view(p_ub, 9, 3, 0);
0228
0229 }
0230
0231
0232
0233
0234
0235 Ensure(test_bfprint)
0236 {
0237 char fb[4096];
0238 UBFH *p_ub = (UBFH *)fb;
0239 BFLDLEN len=0;
0240 FILE *f=NULL;
0241 char filename[]="/tmp/ubf-test-XXXXXX";
0242 char readbuf[1024];
0243 int line_counter=0;
0244 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0245
0246 load_print_test_data(p_ub);
0247 load_field_table();
0248 assert_not_equal(mkstemp(filename), EXFAIL);
0249 assert_not_equal((f=fopen(filename, "w")), NULL);
0250 assert_equal(Bfprint(p_ub, f), EXSUCCEED);
0251 fclose(f);
0252
0253
0254 assert_not_equal((f=fopen(filename, "r")), NULL);
0255
0256
0257 while(NULL!=fgets(readbuf, sizeof(readbuf), f))
0258 {
0259 if (NULL==ref_print[line_counter])
0260 {
0261
0262 assert_equal_with_message(0, 1, "output file too big!");
0263 break;
0264 }
0265 assert_string_equal(ref_print[line_counter], readbuf);
0266 line_counter++;
0267 }
0268 fclose(f);
0269
0270
0271 assert_equal(unlink(filename), EXSUCCEED);
0272
0273
0274 assert_equal(Bfprint(p_ub, NULL), EXFAIL);
0275 assert_equal(Berror, BEINVAL);
0276
0277 }
0278
0279
0280
0281
0282 typedef struct bfprintcb_data bfprintcb_data_t;
0283 struct bfprintcb_data
0284 {
0285 int nrlines;
0286 char lines[1024][100];
0287 };
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299 exprivate int test_bfprintcb_writef(char **buffer, long datalen, void *dataptr1,
0300 int *do_write, FILE *outf, BFLDID fid)
0301 {
0302 bfprintcb_data_t *data = (bfprintcb_data_t *)dataptr1;
0303
0304 assert_equal(strlen(*buffer)+1, datalen);
0305
0306 NDRX_STRCPY_SAFE(data->lines[data->nrlines], *buffer);
0307 data->nrlines++;
0308 return EXSUCCEED;
0309 }
0310
0311
0312
0313
0314
0315 Ensure(test_bfprintcb)
0316 {
0317 char fb[4096];
0318 UBFH *p_ub = (UBFH *)fb;
0319 bfprintcb_data_t data;
0320 int line_counter=0;
0321 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0322
0323 memset(&data, 0, sizeof(data));
0324 load_print_test_data(p_ub);
0325 load_field_table();
0326
0327 assert_equal(Bfprintcb(p_ub, test_bfprintcb_writef, (void *)&data), EXSUCCEED);
0328 UBF_LOG(log_error, "Bfprintcb: %s", Bstrerror(Berror));
0329
0330
0331 for (line_counter=0; line_counter<N_DIM(ref_print)-1; line_counter++)
0332 {
0333 UBF_LOG(log_debug, "Got line [%s]", data.lines[line_counter]);
0334 assert_string_equal(data.lines[line_counter], ref_print[line_counter]);
0335 line_counter++;
0336 }
0337
0338 assert_equal(data.nrlines, N_DIM(ref_print)-1);
0339
0340
0341 assert_equal(Bfprintcb(p_ub, NULL, NULL), EXFAIL);
0342 assert_equal(Berror, BEINVAL);
0343
0344 }
0345
0346
0347
0348
0349
0350
0351 Ensure(test_bprint)
0352 {
0353 char fb[4096];
0354 UBFH *p_ub = (UBFH *)fb;
0355 char fb2[4096];
0356 UBFH *p_ub2 = (UBFH *)fb2;
0357 BFLDLEN len=0;
0358 FILE *f;
0359 double double_val=1223234232342324323423423423423423434342343454353453243245343453243452343453243243425343453425523423423423423234234234234234234234234234234234234234234234234243234234324343.65;
0360 float float_val=1223234232342324323423423423423423434342343454353453243245343453243452343453243243425343453425523423423423423234234234234234234234234234234234234234234234234243234234324343.65;
0361 int fstdout;
0362 char filename[]="/tmp/ubf-test-XXXXXX";
0363
0364
0365 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0366 assert_equal(Bchg(p_ub, T_FLOAT_FLD, 0, (char *)&float_val, 0), EXSUCCEED);
0367 assert_equal(Bchg(p_ub, T_DOUBLE_FLD, 0, (char *)&double_val, 0), EXSUCCEED);
0368 assert_equal(Bprint(p_ub), 0);
0369
0370
0371 assert_not_equal(mkstemp(filename), EXFAIL);
0372 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0373 assert_equal(Binit(p_ub2, sizeof(fb2)), EXSUCCEED);
0374
0375 load_print_test_data(p_ub);
0376
0377 close(1);
0378 assert_not_equal((f=fopen(filename, "w")), NULL);
0379 fstdout = dup2(fileno(f), 1);
0380 assert_equal(Bprint(p_ub), 0);
0381 fclose(f);
0382
0383
0384 assert_not_equal((f=fopen(filename, "r")), NULL);
0385
0386 assert_equal(Bextread(p_ub2, f), EXSUCCEED);
0387
0388 assert_equal(Bcmp(p_ub, p_ub2), 0);
0389
0390 assert_equal(unlink(filename), EXSUCCEED);
0391
0392 }
0393
0394
0395
0396
0397 Ensure(test_bextread_bfldid)
0398 {
0399 char fb[4096];
0400 UBFH *p_ub = (UBFH *)fb;
0401 char fb2[4096];
0402 UBFH *p_ub2 = (UBFH *)fb2;
0403
0404 BFLDLEN len=0;
0405 FILE *f;
0406 char filename[]="/tmp/ubf-test-XXXXXX";
0407
0408 memset(fb, 6, sizeof(fb));
0409 memset(fb2, 6, sizeof(fb2));
0410
0411 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0412 assert_equal(Binit(p_ub2, sizeof(fb2)), EXSUCCEED);
0413
0414 UBF_LOG(log_debug, "****** load_print_test_data ******");
0415 load_print_test_data(p_ub);
0416 UBF_LOG(log_debug, "****** set_up_dummy_data ******");
0417 set_up_dummy_data(p_ub);
0418
0419 assert_not_equal(mkstemp(filename), EXFAIL);
0420
0421 assert_not_equal((f=fopen(filename, "w")), NULL);
0422
0423 UBF_LOG(log_debug, "****** Bfprint ******");
0424 assert_equal(Bfprint(p_ub, f), EXSUCCEED);
0425 fclose(f);
0426
0427
0428 assert_not_equal((f=fopen(filename, "r")), NULL);
0429 UBF_LOG(log_debug, "****** Bextread ******");
0430 assert_equal(Bextread(p_ub2, f), EXSUCCEED);
0431 fclose(f);
0432
0433
0434
0435 UBF_LOG(log_debug, "****** Bcmp ******");
0436 assert_equal(Bcmp(p_ub2, p_ub2), 0);
0437 assert_equal(Bcmp(p_ub, p_ub), 0);
0438 assert_equal(Bcmp(p_ub, p_ub2), 0);
0439
0440 assert_equal(unlink(filename), EXSUCCEED);
0441 }
0442
0443
0444
0445
0446 Ensure(test_bextread_fldnm)
0447 {
0448 char fb[4096];
0449 UBFH *p_ub = (UBFH *)fb;
0450 char fb2[4096];
0451 UBFH *p_ub2 = (UBFH *)fb2;
0452
0453 BFLDLEN len=0;
0454 FILE *f;
0455 char filename[]="/tmp/ubf-test-XXXXXX";
0456
0457 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0458 assert_equal(Binit(p_ub2, sizeof(fb2)), EXSUCCEED);
0459
0460 load_print_test_data(p_ub);
0461 set_up_dummy_data(p_ub);
0462 load_field_table();
0463
0464 assert_not_equal(mkstemp(filename), EXFAIL);
0465 assert_not_equal((f=fopen(filename, "w")), NULL);
0466 assert_equal(Bfprint(p_ub, f), EXSUCCEED);
0467 fclose(f);
0468
0469
0470 assert_not_equal((f=fopen(filename, "r")), NULL);
0471 assert_equal(Bextread(p_ub2, f), EXSUCCEED);
0472 fclose(f);
0473
0474
0475 assert_equal(Bcmp(p_ub, p_ub2), 0);
0476
0477 assert_equal(unlink(filename), EXSUCCEED);
0478 }
0479
0480
0481
0482
0483
0484
0485
0486
0487 exprivate long bextreadcb_readf(char *buffer, long bufsz, void *dataptr1)
0488 {
0489 int *idx = (int *)dataptr1;
0490
0491 char *data_buffers[]= {
0492 "T_SHORT_FLD\t88\n",
0493 "T_SHORT_FLD\t-1\n",
0494 "T_SHORT_2_FLD\t0\n",
0495 "T_SHORT_2_FLD\t212\n",
0496 "T_LONG_FLD\t-1021\n",
0497 "T_LONG_FLD\t-2\n",
0498 "T_LONG_FLD\t0\n",
0499 "T_LONG_FLD\t0\n",
0500 NULL
0501 };
0502
0503 if (NULL!=data_buffers[*idx])
0504 {
0505 NDRX_STRCPY_SAFE_DST(buffer, data_buffers[*idx], bufsz);
0506
0507 (*idx)++;
0508 return strlen(buffer)+1;
0509 }
0510 else
0511 {
0512 return 0;
0513 }
0514 }
0515
0516
0517
0518
0519 Ensure(test_bextreadcb)
0520 {
0521 char fb[2048];
0522 UBFH *p_ub = (UBFH *)fb;
0523 int idx = 0;
0524 char *tree;
0525
0526 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0527 assert_equal(Bextreadcb(p_ub, bextreadcb_readf, (void *)&idx), EXSUCCEED);
0528
0529
0530 tree = Bboolco("T_SHORT_FLD == 88 && T_SHORT_FLD[1] == -1 && T_SHORT_2_FLD==0 "
0531 "&& T_SHORT_2_FLD[1]==212 && T_LONG_FLD==-1021 && T_LONG_FLD[1]==-2 "
0532 "&& T_LONG_FLD[2]==0 && T_LONG_FLD[3]==0");
0533
0534 assert_not_equal(tree, NULL);
0535
0536 assert_equal(Bboolev(p_ub, tree), EXTRUE);
0537
0538 Btreefree(tree);
0539
0540 }
0541
0542
0543
0544
0545 Ensure(test_bextread_chk_errors)
0546 {
0547 char fb[2048];
0548 UBFH *p_ub = (UBFH *)fb;
0549
0550 char *missing_new_line_at_end[]= {
0551 "T_SHORT_FLD\t88\n",
0552 "T_SHORT_FLD\t-1\n",
0553 "T_SHORT_2_FLD\t0\n",
0554 "T_SHORT_2_FLD\t212\n",
0555 "T_LONG_FLD\t-1021\n",
0556 "T_LONG_FLD\t-2\n",
0557 "T_LONG_FLD\t0\n",
0558 "T_LONG_FLD\t0",
0559 NULL
0560 };
0561
0562 char *no_field_name[]= {
0563 "T_SHORT_FLD\t-1\n",
0564 "\t0\n",
0565 "T_SHORT_2_FLD\t212\n",
0566 "T_LONG_FLD\t-1021\n",
0567 "T_LONG_FLD\t-2\n",
0568 "T_LONG_FLD\t0\n",
0569 "T_LONG_FLD\t0\n",
0570 NULL
0571 };
0572
0573 char *no_value_seperator[]= {
0574 "T_SHORT_FLD\t-1\n",
0575 "T_SHORT_2_FLD\t212\n",
0576 "T_LONG_FLD\t-1021\n",
0577 "T_LONG_FLD -2\n",
0578 "T_LONG_FLD\t0\n",
0579 "T_LONG_FLD\t0\n",
0580 NULL
0581 };
0582
0583 char *prefix_error_hex[]= {
0584 "T_SHORT_FLD\t-1\n",
0585 "T_SHORT_2_FLD\t212\n",
0586 "T_LONG_FLD\t-1021\n",
0587 "T_LONG_FLD\t0\n",
0588 "T_LONG_FLD\t0\n",
0589 "T_STRING_FLD\t\\\n",
0590 NULL
0591 };
0592
0593 char *invalid_hex_number[]= {
0594 "T_SHORT_FLD\t-1\n",
0595 "T_SHORT_2_FLD\t212\n",
0596 "T_LONG_FLD\t-1021\n",
0597 "T_LONG_FLD\t0\n",
0598 "T_LONG_FLD\t0\n",
0599 "T_STRING_FLD\tabc\\yu123\n",
0600 NULL
0601 };
0602
0603 char *empty_line_error[]= {
0604 "\n",
0605 NULL
0606 };
0607
0608 char *invalid_field_id[]= {
0609 "T_SHORT_FLD\t-1\n",
0610 "IVALID_FIELD_NAME\t212\n",
0611 NULL
0612 };
0613
0614 char *invalid_field_id_syntax[]= {
0615 "T_SHORT_FLD\t-1\n",
0616 "((BFLDID32)4294967295)\t212\n",
0617 NULL
0618 };
0619
0620
0621 char *invalid_view[]= {
0622 "T_VIEW_FLD\tNO_SUCH_VIEW\n",
0623 NULL
0624 };
0625
0626
0627 char *invalid_sub_buffer[]= {
0628 "T_STRING_FLD\t\n",
0629 "\tT_STRING_FLD\tXXX\n",
0630 "\tT_STRING_FLD\tYYY\n",
0631 NULL
0632 };
0633
0634
0635 load_field_table();
0636
0637
0638
0639 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0640 open_test_temp("w");
0641 write_to_temp(missing_new_line_at_end);
0642 close_test_temp();
0643
0644
0645
0646
0647
0648
0649
0650
0651 open_test_temp_for_read("r");
0652 assert_equal(Bextread(p_ub, M_test_temp_file), EXFAIL);
0653 assert_equal(Berror, BSYNTAX);
0654 close_test_temp();
0655
0656
0657 remove_test_temp();
0658
0659
0660 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0661 open_test_temp("w");
0662 write_to_temp(no_field_name);
0663 close_test_temp();
0664
0665
0666 open_test_temp_for_read("r");
0667 assert_equal(Bextread(p_ub, M_test_temp_file), EXFAIL);
0668 assert_equal(Berror, BSYNTAX);
0669 close_test_temp();
0670
0671
0672 remove_test_temp();
0673
0674
0675 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0676 open_test_temp("w");
0677 write_to_temp(no_value_seperator);
0678 close_test_temp();
0679
0680
0681 open_test_temp_for_read("r");
0682 assert_equal(Bextread(p_ub, M_test_temp_file), EXFAIL);
0683 assert_equal(Berror, BSYNTAX);
0684 close_test_temp();
0685
0686
0687 remove_test_temp();
0688
0689
0690 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0691 open_test_temp("w");
0692 write_to_temp(prefix_error_hex);
0693 close_test_temp();
0694
0695
0696 open_test_temp_for_read("r");
0697 assert_equal(Bextread(p_ub, M_test_temp_file), EXFAIL);
0698 assert_equal(Berror, BSYNTAX);
0699 close_test_temp();
0700
0701
0702 remove_test_temp();
0703
0704
0705 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0706 open_test_temp("w");
0707 write_to_temp(invalid_hex_number);
0708 close_test_temp();
0709
0710
0711 open_test_temp_for_read("r");
0712 assert_equal(Bextread(p_ub, M_test_temp_file), EXFAIL);
0713 assert_equal(Berror, BSYNTAX);
0714 close_test_temp();
0715
0716
0717 remove_test_temp();
0718
0719
0720 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0721 open_test_temp("w");
0722 write_to_temp(empty_line_error);
0723 close_test_temp();
0724
0725
0726
0727 open_test_temp_for_read("r");
0728 assert_equal(Bextread(p_ub, M_test_temp_file), EXSUCCEED);
0729
0730 close_test_temp();
0731
0732 remove_test_temp();
0733
0734
0735 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0736 open_test_temp("w");
0737 write_to_temp(invalid_field_id);
0738 close_test_temp();
0739
0740
0741 open_test_temp_for_read("r");
0742 assert_equal(Bextread(p_ub, M_test_temp_file), EXFAIL);
0743 assert_equal(Berror, BBADNAME);
0744 close_test_temp();
0745
0746 remove_test_temp();
0747
0748
0749 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0750 open_test_temp("w");
0751 write_to_temp(invalid_field_id_syntax);
0752 close_test_temp();
0753
0754
0755 open_test_temp_for_read("r");
0756 assert_equal(Bextread(p_ub, M_test_temp_file), EXFAIL);
0757 assert_equal(Berror, BBADFLD);
0758 close_test_temp();
0759
0760 remove_test_temp();
0761
0762
0763
0764 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0765 open_test_temp("w");
0766 write_to_temp(invalid_view);
0767 close_test_temp();
0768
0769
0770 open_test_temp_for_read("r");
0771 assert_equal(Bextread(p_ub, M_test_temp_file), EXFAIL);
0772 assert_equal(Berror, BBADVIEW);
0773 close_test_temp();
0774
0775 remove_test_temp();
0776
0777
0778
0779
0780 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0781 open_test_temp("w");
0782 write_to_temp(invalid_sub_buffer);
0783 close_test_temp();
0784
0785
0786 open_test_temp_for_read("r");
0787 assert_equal(Bextread(p_ub, M_test_temp_file), EXFAIL);
0788 assert_equal(Berror, BSYNTAX);
0789 close_test_temp();
0790
0791 remove_test_temp();
0792
0793
0794 }
0795
0796
0797
0798
0799 Ensure(test_bextread_comments)
0800 {
0801 char fb[2048];
0802 UBFH *p_ub = (UBFH *)fb;
0803 short s;
0804 long l;
0805
0806 char *comment_test[]= {
0807 "T_SHORT_FLD\t88\n",
0808 "#T_SHORT_2_FLD\t212\n",
0809 "#T_STRING_FLD\t-1021\n",
0810 "#T_STRING_FLD\t-2\n",
0811 "T_LONG_FLD\t-1\n",
0812 NULL
0813 };
0814
0815
0816 load_field_table();
0817
0818
0819
0820 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0821 open_test_temp("w");
0822 write_to_temp(comment_test);
0823 close_test_temp();
0824
0825 open_test_temp_for_read("r");
0826 assert_equal(Bextread(p_ub, M_test_temp_file), EXSUCCEED);
0827
0828
0829 assert_equal(Bpres(p_ub, T_SHORT_2_FLD, 0), EXFALSE);
0830 assert_equal(Bpres(p_ub, T_STRING_FLD, 0), EXFALSE);
0831 assert_equal(Bpres(p_ub, T_STRING_FLD, 1), EXFALSE);
0832
0833
0834 assert_equal(Bget(p_ub, T_SHORT_FLD, 0, (char *)&s, 0), EXSUCCEED);
0835 assert_equal(s, 88);
0836 assert_equal(Bget(p_ub, T_LONG_FLD, 0, (char *)&l, 0), EXSUCCEED);
0837 assert_equal(l, -1);
0838 close_test_temp();
0839
0840
0841 remove_test_temp();
0842 }
0843
0844
0845
0846
0847 Ensure(test_bextread_minus)
0848 {
0849 char fb[2048];
0850 UBFH *p_ub = (UBFH *)fb;
0851 char fb2[2048];
0852 UBFH *p_ub2 = (UBFH *)fb2;
0853 short s;
0854 long l;
0855
0856 char *test_minus[]= {
0857 "T_SHORT_FLD\t123\n",
0858 "T_DOUBLE_FLD\t0.1\n",
0859 "T_CARRAY_FLD\tABCDE\n",
0860 "T_STRING_FLD\tTEST_STRING\n",
0861 "T_FLOAT_FLD\t1\n",
0862 "T_PTR_FLD\t0x1111\n",
0863 "T_UBF_FLD\t\n",
0864 "\tT_STRING_FLD\tHELLO\n",
0865 "T_VIEW_FLD\t\n",
0866 "- T_CARRAY_FLD\tABCDE\n",
0867 "- T_STRING_FLD\tTEST_STRING\n",
0868 "- T_PTR_FLD\t0x0\n",
0869 "- T_UBF_FLD\t\n",
0870 "- T_VIEW_FLD\t\n",
0871 NULL
0872 };
0873
0874
0875 load_field_table();
0876
0877 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0878 assert_equal(Binit(p_ub2, sizeof(fb2)), EXSUCCEED);
0879 open_test_temp("w");
0880 write_to_temp(test_minus);
0881 close_test_temp();
0882
0883 open_test_temp_for_read("r");
0884 assert_equal(Bextread(p_ub, M_test_temp_file), EXSUCCEED);
0885 close_test_temp();
0886
0887
0888 remove_test_temp();
0889
0890
0891 assert_equal(CBchg(p_ub2, T_SHORT_FLD, 0, "123", 0, BFLD_STRING), EXSUCCEED);
0892 assert_equal(CBchg(p_ub2, T_DOUBLE_FLD, 0, "0.1", 0, BFLD_STRING), EXSUCCEED);
0893 assert_equal(CBchg(p_ub2, T_FLOAT_FLD, 0, "1", 0, BFLD_STRING), EXSUCCEED);
0894
0895
0896 assert_equal(Bcmp(p_ub, p_ub2), 0);
0897 }
0898
0899
0900
0901
0902 Ensure(test_bextread_plus)
0903 {
0904 char fb[2048];
0905 UBFH *p_ub = (UBFH *)fb;
0906 char fb2[2048];
0907 UBFH *p_ub2 = (UBFH *)fb2;
0908 short s;
0909 long l;
0910
0911
0912 char *test_plus[]= {
0913 "T_SHORT_FLD\t999\n",
0914 "T_DOUBLE_FLD\t888\n",
0915 "T_FLOAT_FLD\t777.11\n",
0916 "T_STRING_FLD\tABC\n",
0917 "T_PTR_FLD\t0x0\n",
0918 "T_UBF_FLD\t\n",
0919 "T_VIEW_FLD\t\n",
0920 "+ T_SHORT_FLD\t123\n",
0921 "+ T_DOUBLE_FLD\t0.1\n",
0922 "+ T_FLOAT_FLD\t1\n",
0923 "+ T_STRING_FLD\tCDE\n",
0924 "+ T_PTR_FLD\t0x2329\n",
0925
0926 "+ T_UBF_FLD\t\n",
0927 "\tT_STRING_2_FLD\tZ\n",
0928 "\t+ T_STRING_2_FLD\tT\n",
0929 "+ T_VIEW_FLD\tUBTESTVIEW2\n",
0930 "\ttshort1\t1\n",
0931 "\ttlong1\t2\n",
0932 "\ttchar1\t3\n",
0933 "\ttfloat1\t4.00000\n",
0934 "\ttdouble1\t5.000000\n",
0935 "\ttstring1\tg\n",
0936 "\ttcarray1\tg\\00\\00\\00\\00\\00\\00\\00\\00\\00\n",
0937 "\t+ tshort1\t2\n",
0938 "\t+ tlong1\t3\n",
0939 "\t+ tchar1\t4\n",
0940 "\t+ tfloat1\t5.00000\n",
0941 "\t+ tdouble1\t6.000000\n",
0942 "\t+ tstring1\tB\n",
0943 "\t+ tcarray1\tD\\00\\09\\09\\09\\09\\09\\09\\09\\09\n",
0944 NULL
0945 };
0946
0947
0948 load_field_table();
0949
0950 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
0951 assert_equal(Binit(p_ub2, sizeof(fb2)), EXSUCCEED);
0952 open_test_temp("w");
0953 write_to_temp(test_plus);
0954 close_test_temp();
0955
0956 open_test_temp_for_read("r");
0957 assert_equal(Bextread(p_ub, M_test_temp_file), EXSUCCEED);
0958 close_test_temp();
0959
0960 remove_test_temp();
0961
0962
0963 assert_equal(CBchg(p_ub2, T_SHORT_FLD, 0, "123", 0, BFLD_STRING), EXSUCCEED);
0964 assert_equal(CBchg(p_ub2, T_DOUBLE_FLD, 0, "0.1", 0, BFLD_STRING), EXSUCCEED);
0965 assert_equal(CBchg(p_ub2, T_FLOAT_FLD, 0, "1", 0, BFLD_STRING), EXSUCCEED);
0966 assert_equal(CBchg(p_ub2, T_STRING_FLD, 0, "CDE", 0, BFLD_STRING), EXSUCCEED);
0967
0968
0969 gen_load_ptr(p_ub2, 0, 1, 0);
0970 gen_load_ubf(p_ub2, 0, 1, 0);
0971 gen_load_view(p_ub2, 0, 1, 0);
0972
0973
0974 assert_equal(Bcmp(p_ub, p_ub2), 0);
0975 }
0976
0977
0978
0979
0980
0981 Ensure(test_bextread_eq)
0982 {
0983 char fb[2048];
0984 UBFH *p_ub = (UBFH *)fb;
0985 char fb2[2048];
0986 UBFH *p_ub2 = (UBFH *)fb2;
0987 short s;
0988 long l;
0989
0990
0991 char *test_eq[]= {
0992 "T_SHORT_FLD\t999\n",
0993 "T_LONG_FLD\t124545\n",
0994 "T_CHAR_FLD\ta\n",
0995 "T_DOUBLE_FLD\t888\n",
0996 "T_FLOAT_FLD\t777.11\n",
0997 "T_STRING_FLD\tABC\n",
0998 "T_CARRAY_FLD\tEFGH\n",
0999 "T_PTR_FLD\t0x2329\n",
1000 "T_UBF_FLD\t\n",
1001 "\tT_STRING_2_FLD\tT\n",
1002 "T_VIEW_FLD\tUBTESTVIEW2\n",
1003 "\ttshort1\t2\n",
1004 "\ttlong1\t3\n",
1005 "\ttchar1\t4\n",
1006 "\ttfloat1\t5.00000\n",
1007 "\ttdouble1\t6.000000\n",
1008 "\ttstring1\tB\n",
1009 "\ttcarray1\tD\\00\\09\\09\\09\\09\\09\\09\\09\\09\n",
1010
1011 "= T_SHORT_2_FLD\tT_SHORT_FLD\n",
1012 "= T_LONG_2_FLD\tT_LONG_FLD\n",
1013 "= T_CHAR_2_FLD\tT_CHAR_FLD\n",
1014 "= T_DOUBLE_2_FLD\tT_DOUBLE_FLD\n",
1015 "= T_FLOAT_2_FLD\tT_FLOAT_FLD\n",
1016 "= T_STRING_2_FLD\tT_STRING_FLD\n",
1017 "= T_CARRAY_2_FLD\tT_CARRAY_FLD\n",
1018 "= T_PTR_2_FLD\tT_PTR_FLD\n",
1019
1020 "= T_VIEW_2_FLD\tT_VIEW_FLD\n",
1021 "= T_UBF_2_FLD\tT_UBF_FLD\n",
1022 NULL
1023 };
1024
1025
1026 load_field_table();
1027
1028 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
1029 assert_equal(Binit(p_ub2, sizeof(fb2)), EXSUCCEED);
1030 open_test_temp("w");
1031 write_to_temp(test_eq);
1032 close_test_temp();
1033
1034 open_test_temp_for_read("r");
1035 assert_equal(Bextread(p_ub, M_test_temp_file), EXSUCCEED);
1036 close_test_temp();
1037
1038 remove_test_temp();
1039
1040
1041 assert_equal(CBchg(p_ub2, T_SHORT_FLD, 0, "999", 0, BFLD_STRING), EXSUCCEED);
1042 assert_equal(CBchg(p_ub2, T_LONG_FLD, 0, "124545", 0, BFLD_STRING), EXSUCCEED);
1043 assert_equal(CBchg(p_ub2, T_CHAR_FLD, 0, "a", 0, BFLD_STRING), EXSUCCEED);
1044 assert_equal(CBchg(p_ub2, T_FLOAT_FLD, 0, "777.11", 0, BFLD_STRING), EXSUCCEED);
1045 assert_equal(CBchg(p_ub2, T_DOUBLE_FLD, 0, "888", 0, BFLD_STRING), EXSUCCEED);
1046 assert_equal(CBchg(p_ub2, T_STRING_FLD, 0, "ABC", 0, BFLD_STRING), EXSUCCEED);
1047 assert_equal(CBchg(p_ub2, T_CARRAY_FLD, 0, "EFGH", 0, BFLD_STRING), EXSUCCEED);
1048
1049 assert_equal(CBchg(p_ub2, T_SHORT_2_FLD, 0, "999", 0, BFLD_STRING), EXSUCCEED);
1050 assert_equal(CBchg(p_ub2, T_LONG_2_FLD, 0, "124545", 0, BFLD_STRING), EXSUCCEED);
1051 assert_equal(CBchg(p_ub2, T_CHAR_2_FLD, 0, "a", 0, BFLD_STRING), EXSUCCEED);
1052 assert_equal(CBchg(p_ub2, T_FLOAT_2_FLD, 0, "777.11", 0, BFLD_STRING), EXSUCCEED);
1053 assert_equal(CBchg(p_ub2, T_DOUBLE_2_FLD, 0, "888", 0, BFLD_STRING), EXSUCCEED);
1054 assert_equal(CBchg(p_ub2, T_STRING_2_FLD, 0, "ABC", 0, BFLD_STRING), EXSUCCEED);
1055 assert_equal(CBchg(p_ub2, T_CARRAY_2_FLD, 0, "EFGH", 0, BFLD_STRING), EXSUCCEED);
1056
1057
1058 gen_load_ptr(p_ub2, 0, 1, 0);
1059 gen_load_ubf(p_ub2, 0, 1, 0);
1060 gen_load_view(p_ub2, 0, 1, 0);
1061
1062 gen_load_ptr(p_ub2, 0, 1, 1);
1063 gen_load_ubf(p_ub2, 0, 1, 1);
1064 gen_load_view(p_ub2, 0, 1, 1);
1065
1066 assert_equal(Bcmp(p_ub, p_ub2), 0);
1067
1068 }
1069
1070
1071
1072
1073 Ensure(test_bextread_eq_err)
1074 {
1075 char fb[2048];
1076 UBFH *p_ub = (UBFH *)fb;
1077 short s;
1078 long l;
1079
1080
1081 char *test_eq_err[]= {
1082 "T_SHORT_FLD\t999\n",
1083 "T_LONG_FLD\t124545\n",
1084 "T_CHAR_FLD\ta\n",
1085 "T_DOUBLE_FLD\t888\n",
1086 "T_FLOAT_FLD\t777.11\n",
1087 "T_STRING_FLD\tABC\n",
1088 "T_CARRAY_FLD\tEFGH\n",
1089
1090 "= T_SHORT_2_FLD\tT_SHORT_FLD\n",
1091 "= T_LONG_2_FLD\tT_LONG_FLD\n",
1092 "= T_CHAR_2_FLD\tT_CHAR_FLD\n",
1093 "= T_DOUBLE_2_FLD\tT_DOUBLE_FLD\n",
1094 "= T_FLOAT_2_FLD\tT_FLOAT_FLD\n",
1095 "= T_STRING_2_FLD\tFIELD_NOT_PRESENT\n",
1096 "= T_CARRAY_2_FLD\tT_CARRAY_FLD\n",
1097 NULL
1098 };
1099
1100 load_field_table();
1101 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
1102 open_test_temp("w");
1103 write_to_temp(test_eq_err);
1104 close_test_temp();
1105
1106 open_test_temp_for_read("r");
1107 assert_equal(Bextread(p_ub, M_test_temp_file), EXFAIL);
1108 assert_equal(Berror, BBADNAME);
1109 close_test_temp();
1110
1111 remove_test_temp();
1112 }
1113
1114
1115
1116
1117 Ensure(test_bextread_no_ptr)
1118 {
1119 char fb[2048];
1120 UBFH *p_ub = (UBFH *)fb;
1121 char buf[128];
1122 BFLDLEN len;
1123
1124 char *test_ptr[]= {
1125 "T_STRING_FLD\tABC\n",
1126 "T_PTR_FLD\t111\n",
1127 NULL
1128 };
1129
1130
1131 unsetenv("NDRX_APIFLAGS");
1132
1133
1134 load_field_table();
1135 assert_equal(Binit(p_ub, sizeof(fb)), EXSUCCEED);
1136 open_test_temp("w");
1137 write_to_temp(test_ptr);
1138 close_test_temp();
1139
1140 open_test_temp_for_read("r");
1141 assert_equal(Bextread(p_ub, M_test_temp_file), EXSUCCEED);
1142
1143
1144 len = sizeof(buf);
1145 assert_equal(Bget(p_ub, T_STRING_FLD, 0, buf, &len), EXSUCCEED);
1146 assert_string_equal(buf, "ABC");
1147
1148 assert_equal(CBget(p_ub, T_PTR_FLD, 0, buf, &len, BFLD_STRING), EXFAIL);
1149 assert_equal(Berror, BNOTPRES);
1150
1151 close_test_temp();
1152
1153 remove_test_temp();
1154 }
1155
1156 TestSuite *ubf_print_tests(void)
1157 {
1158 TestSuite *suite = create_test_suite();
1159
1160 std_basic_setup();
1161
1162 add_test(suite, test_bfprintcb);
1163
1164 add_test(suite, test_bprint);
1165 add_test(suite, test_bfprint);
1166
1167 add_test(suite, test_bextread_bfldid);
1168 add_test(suite, test_bextread_fldnm);
1169 add_test(suite, test_bextread_chk_errors);
1170 add_test(suite, test_bextread_comments);
1171 add_test(suite, test_bextread_minus);
1172 add_test(suite, test_bextread_plus);
1173 add_test(suite, test_bextread_eq);
1174 add_test(suite, test_bextread_eq_err);
1175 add_test(suite, test_bextreadcb);
1176 add_test(suite, test_bextread_no_ptr);
1177
1178 return suite;
1179 }
1180