1 /* 2 * Copyright (c) International Business Machines Corp., 2004 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 12 * the GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19 /* 20 * TEST CASE : session.c 21 * 22 * VARIATIONS : 35 23 * 24 * API'S TESTED : dm_create_session 25 * dm_destroy_session 26 * dm_getall_sessions 27 * dm_query_session 28 */ 29 #include <string.h> 30 #include <stdio.h> 31 #include <stdlib.h> 32 #include <errno.h> 33 #include "dm_test.h" 34 35 #define NUM_SESSIONS 8 36 37 char dmMsgBuf[4096]; 38 39 void LogSessions(dm_sessid_t * sid, u_int nelem) 40 { 41 int i; 42 43 DMLOG_PRINT(DMLVL_DEBUG, "Sessions:\n"); 44 for (i = 0; i < nelem; i++) { 45 DMLOG_PRINT(DMLVL_DEBUG, " element %d: %d\n", i, sid[i]); 46 } 47 } 48 49 int main(int argc, char **argv) 50 { 51 52 char *szSessionInfo = "dm_test session info"; 53 char *szFuncName; 54 char *varstr; 55 int i; 56 int rc; 57 58 DMOPT_PARSE(argc, argv); 59 DMLOG_START(); 60 61 /* CANNOT DO ANYTHING WITHOUT SUCCESSFUL INITIALIZATION!!! */ 62 if ((rc = dm_init_service(&varstr)) != 0) { 63 DMLOG_PRINT(DMLVL_ERR, 64 "dm_init_service failed! (rc = %d, errno = %d)\n", 65 rc, errno); 66 DM_EXIT(); 67 } else { 68 int nexist; 69 rc = dm_getall_sessions(0, NULL, &nexist); 70 71 if (rc == -1 && errno == E2BIG) { 72 dm_sessid_t *psid; 73 74 DMLOG_PRINT(DMLVL_DEBUG, "%d sessions already exist\n", 75 nexist); 76 77 if ((psid = malloc(nexist * sizeof(dm_sessid_t))) != NULL) { 78 if ((rc = 79 dm_getall_sessions(nexist, psid, 80 &nexist)) == 0) { 81 for (rc = 0, i = 0; i < nexist; i++) { 82 DMLOG_PRINT(DMLVL_DEBUG, 83 "destroying session %d\n", 84 psid[i]); 85 rc |= 86 dm_destroy_session(psid[i]); 87 } 88 89 if (rc == -1) { 90 DMLOG_PRINT(DMLVL_ERR, 91 "dm_destroy_session failed, unable to destroy existing sessions\n"); 92 DM_EXIT(); 93 } 94 } else { 95 DMLOG_PRINT(DMLVL_ERR, 96 "dm_getall_sessions failed, unable to destroy existing sessions\n"); 97 DM_EXIT(); 98 } 99 100 free(psid); 101 } else { 102 DMLOG_PRINT(DMLVL_ERR, 103 "malloc failed, unable to destroy existing sessions\n"); 104 DM_EXIT(); 105 } 106 } 107 } 108 109 DMLOG_PRINT(DMLVL_DEBUG, "Starting DMAPI session tests\n"); 110 111 szFuncName = "dm_create_session"; 112 113 /* 114 * TEST : dm_create_session - invalid oldsid 115 * EXPECTED: rc = -1, errno = EINVAL 116 */ 117 if (DMVAR_EXEC(CREATE_SESSION_BASE + 1)) { 118 dm_sessid_t newsid; 119 120 /* Variation set up */ 121 122 /* Variation */ 123 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid oldsid)\n", szFuncName); 124 rc = dm_create_session(INVALID_ADDR, szSessionInfo, &newsid); 125 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 126 127 /* Variation clean up */ 128 } 129 130 /* 131 * TEST : dm_create_session - NULL sessinfop 132 * EXPECTED: rc = 0 133 */ 134 if (DMVAR_EXEC(CREATE_SESSION_BASE + 2)) { 135 dm_sessid_t newsid; 136 137 /* Variation set up */ 138 139 /* Variation */ 140 DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL sessinfop)\n", szFuncName); 141 rc = dm_create_session(DM_NO_SESSION, NULL, &newsid); 142 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 143 144 /* Variation clean up */ 145 } 146 147 /* 148 * TEST : dm_create_session - invalid sessinfop 149 * EXPECTED: rc = -1, errno = EFAULT 150 * 151 * This variation uncovered XFS BUG #2 (0 return code from strnlen_user 152 * ignored, which indicated fault) 153 */ 154 if (DMVAR_EXEC(CREATE_SESSION_BASE + 3)) { 155 dm_sessid_t newsid; 156 157 /* Variation set up */ 158 159 /* Variation */ 160 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sessinfop)\n", szFuncName); 161 rc = dm_create_session(DM_NO_SESSION, (char *)INVALID_ADDR, 162 &newsid); 163 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 164 165 /* Variation clean up */ 166 } 167 168 /* 169 * TEST : dm_create_session - NULL newsidp 170 * EXPECTED: rc = -1, errno = EFAULT 171 */ 172 if (DMVAR_EXEC(CREATE_SESSION_BASE + 4)) { 173 /* Variation set up */ 174 175 /* Variation */ 176 DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL newsidp)\n", szFuncName); 177 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, NULL); 178 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 179 180 /* Variation clean up */ 181 } 182 183 /* 184 * TEST : dm_create_session - invalid newsidp 185 * EXPECTED: rc = -1, errno = EFAULT 186 */ 187 if (DMVAR_EXEC(CREATE_SESSION_BASE + 5)) { 188 /* Variation set up */ 189 190 /* Variation */ 191 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid newsidp)\n", szFuncName); 192 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, 193 (dm_sessid_t *) INVALID_ADDR); 194 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 195 196 /* Variation clean up */ 197 } 198 199 /* 200 * TEST : dm_create_session - DM_NO_SESSION oldsid 201 * EXPECTED: rc = 0 202 */ 203 if (DMVAR_EXEC(CREATE_SESSION_BASE + 6)) { 204 dm_sessid_t newsid; 205 206 /* Variation set up */ 207 208 /* Variation */ 209 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION oldsid)\n", 210 szFuncName); 211 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 212 if (rc == 0) { 213 DMLOG_PRINT(DMLVL_DEBUG, "newsid = %d\n", newsid); 214 } 215 DMVAR_ENDPASSEXP(szFuncName, 0, rc); 216 217 /* Variation clean up */ 218 rc = dm_destroy_session(newsid); 219 if (rc == -1) { 220 DMLOG_PRINT(DMLVL_DEBUG, 221 "Unable to clean up variation! (errno = %d)\n", 222 errno); 223 } 224 } 225 226 /* 227 * TEST : dm_create_session - valid oldsid 228 * EXPECTED: rc = 0 229 */ 230 if (DMVAR_EXEC(CREATE_SESSION_BASE + 7)) { 231 dm_sessid_t newsid, oldsid; 232 233 /* Variation set up */ 234 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 235 if (rc == -1) { 236 DMLOG_PRINT(DMLVL_DEBUG, 237 "Unable to set up variation! (errno = %d)\n", 238 errno); 239 DMVAR_SKIP(); 240 } else { 241 oldsid = newsid; 242 243 /* Variation */ 244 DMLOG_PRINT(DMLVL_DEBUG, "%s(valid oldsid)\n", 245 szFuncName); 246 rc = dm_create_session(oldsid, szSessionInfo, &newsid); 247 if (rc == 0) { 248 DMLOG_PRINT(DMLVL_DEBUG, "newsid = %d\n", 249 newsid); 250 } 251 DMVAR_ENDPASSEXP(szFuncName, 0, rc); 252 253 /* Variation clean up */ 254 rc = dm_destroy_session(newsid); 255 if (rc == -1) { 256 DMLOG_PRINT(DMLVL_DEBUG, 257 "Unable to clean up variation! (errno = %d)\n", 258 errno); 259 } 260 } 261 } 262 263 /* 264 * TEST : dm_create_session - invalidated oldsid 265 * EXPECTED: rc = -1, errno = EINVAL 266 */ 267 if (DMVAR_EXEC(CREATE_SESSION_BASE + 8)) { 268 dm_sessid_t newsid, oldsid, delsid; 269 270 /* Variation set up */ 271 if ((rc = 272 dm_create_session(DM_NO_SESSION, szSessionInfo, 273 &newsid)) == -1) { 274 /* No clean up */ 275 } else 276 if ((rc = 277 dm_create_session(oldsid = 278 newsid, szSessionInfo, 279 &newsid)) == -1) { 280 dm_destroy_session(oldsid); 281 } 282 if (rc == -1) { 283 DMLOG_PRINT(DMLVL_DEBUG, 284 "Unable to set up variation! (errno = %d)\n", 285 errno); 286 DMVAR_SKIP(); 287 } else { 288 delsid = newsid; 289 290 /* Variation */ 291 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated oldsid)\n", 292 szFuncName); 293 rc = dm_create_session(oldsid, szSessionInfo, &newsid); 294 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 295 296 /* Variation clean up */ 297 rc = dm_destroy_session(delsid); 298 if (rc == -1) { 299 DMLOG_PRINT(DMLVL_DEBUG, 300 "Unable to clean up variation! (errno = %d)\n", 301 errno); 302 } 303 } 304 } 305 306 /* 307 * TEST : dm_create_session - maximum sessinfo 308 * EXPECTED: rc = 0 309 */ 310 if (DMVAR_EXEC(CREATE_SESSION_BASE + 9)) { 311 dm_sessid_t newsid; 312 char *szBig = 313 "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345"; 314 315 /* Variation set up */ 316 317 /* Variation */ 318 DMLOG_PRINT(DMLVL_DEBUG, "%s(max sessionfo)\n", szFuncName); 319 rc = dm_create_session(DM_NO_SESSION, szBig, &newsid); 320 if (rc == 0) { 321 DMLOG_PRINT(DMLVL_DEBUG, "newsid = %d\n", newsid); 322 } 323 DMVAR_ENDPASSEXP(szFuncName, 0, rc); 324 325 /* Variation clean up */ 326 rc = dm_destroy_session(newsid); 327 if (rc == -1) { 328 DMLOG_PRINT(DMLVL_DEBUG, 329 "Unable to clean up variation! (errno = %d)\n", 330 errno); 331 } 332 } 333 334 /* 335 * TEST : dm_create_session - sessinfo too big 336 * EXPECTED: rc = -1, errno = E2BIG 337 * 338 * This variation uncovered XFS BUG #1 (sessinfo simply truncated, API 339 * passed) 340 */ 341 if (DMVAR_EXEC(CREATE_SESSION_BASE + 10)) { 342 dm_sessid_t newsid; 343 char *szTooBig = 344 "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"; 345 346 /* Variation set up */ 347 348 /* Variation */ 349 DMLOG_PRINT(DMLVL_DEBUG, "%s(sessinfo too big)\n", szFuncName); 350 rc = dm_create_session(DM_NO_SESSION, szTooBig, &newsid); 351 DMVAR_ENDFAILEXP(szFuncName, -1, rc, E2BIG); 352 353 /* Variation clean up */ 354 } 355 356 /* 357 * TEST : dm_create_session - multiple sessions with same sessinfo 358 * EXPECTED: rc = 0 359 */ 360 if (DMVAR_EXEC(CREATE_SESSION_BASE + 11)) { 361 dm_sessid_t newsid1, newsid2; 362 363 /* Variation set up */ 364 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid1); 365 if (rc == -1) { 366 DMLOG_PRINT(DMLVL_DEBUG, 367 "Unable to set up variation! (errno = %d)\n", 368 errno); 369 DMVAR_SKIP(); 370 } else { 371 /* Variation */ 372 DMLOG_PRINT(DMLVL_DEBUG, "%s(same sessinfo)\n", 373 szFuncName); 374 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, 375 &newsid2); 376 if (rc == 0) { 377 DMLOG_PRINT(DMLVL_DEBUG, 378 "1st newsid = %d, 2nd newsid = %d\n", 379 newsid1, newsid2); 380 if (newsid1 != newsid2) { 381 DMLOG_PRINT(DMLVL_DEBUG, 382 "%s passed with expected rc = %d\n", 383 szFuncName, 0); 384 DMVAR_PASS(); 385 } else { 386 DMLOG_PRINT(DMLVL_ERR, 387 "%s failed with expected rc = %d but session IDs same\n", 388 szFuncName, 0); 389 DMVAR_FAIL(); 390 } 391 } else { 392 DMLOG_PRINT(DMLVL_ERR, 393 "%s failed with unexpected rc = %d (errno = %d)\n", 394 szFuncName, rc, errno); 395 DMVAR_FAIL(); 396 } 397 398 /* Variation clean up */ 399 rc = dm_destroy_session(newsid1); 400 rc |= dm_destroy_session(newsid2); 401 if (rc == -1) { 402 DMLOG_PRINT(DMLVL_DEBUG, 403 "Unable to clean up variation! (errno = %d)\n", 404 errno); 405 } 406 } 407 } 408 409 szFuncName = "dm_destroy_session"; 410 411 /* 412 * TEST : dm_destroy_session - DM_NO_SESSION sid 413 * EXPECTED: rc = -1, errno = EINVAL 414 */ 415 if (DMVAR_EXEC(DESTROY_SESSION_BASE + 1)) { 416 /* Variation set up */ 417 418 /* Variation */ 419 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName); 420 rc = dm_destroy_session(DM_NO_SESSION); 421 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 422 423 /* Variation clean up */ 424 } 425 426 /* 427 * TEST : dm_destroy_session - invalid sid 428 * EXPECTED: rc = -1, errno = EINVAL 429 */ 430 if (DMVAR_EXEC(DESTROY_SESSION_BASE + 2)) { 431 /* Variation set up */ 432 433 /* Variation */ 434 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", szFuncName); 435 rc = dm_destroy_session(INVALID_ADDR); 436 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 437 438 /* Variation clean up */ 439 } 440 441 /* 442 * TEST : dm_destroy_session - invalidated sid 443 * EXPECTED: rc = 0 444 */ 445 if (DMVAR_EXEC(DESTROY_SESSION_BASE + 3)) { 446 dm_sessid_t newsid; 447 448 /* Variation set up */ 449 if ((rc = 450 dm_create_session(DM_NO_SESSION, szSessionInfo, 451 &newsid)) != -1) { 452 rc = dm_destroy_session(newsid); 453 } 454 if (rc == -1) { 455 DMLOG_PRINT(DMLVL_DEBUG, 456 "Unable to set up variation! (errno = %d)\n", 457 errno); 458 DMVAR_SKIP(); 459 } else { 460 /* Variation */ 461 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated sid)\n", 462 szFuncName); 463 rc = dm_destroy_session(newsid); 464 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 465 466 /* Variation clean up */ 467 } 468 } 469 470 /* 471 * TEST : dm_destroy_session - valid sid 472 * EXPECTED: rc = 0 473 */ 474 if (DMVAR_EXEC(DESTROY_SESSION_BASE + 4)) { 475 dm_sessid_t newsid; 476 477 /* Variation set up */ 478 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 479 if (rc == -1) { 480 DMLOG_PRINT(DMLVL_DEBUG, 481 "Unable to set up variation! (errno = %d)\n", 482 errno); 483 DMVAR_SKIP(); 484 } else { 485 /* Variation */ 486 DMLOG_PRINT(DMLVL_DEBUG, "%s(valid sid)\n", szFuncName); 487 rc = dm_destroy_session(newsid); 488 DMVAR_ENDPASSEXP(szFuncName, 0, rc); 489 490 /* Variation clean up */ 491 } 492 } 493 494 /* 495 * TEST : dm_destroy_session - sid with oustanding events 496 * EXPECTED: rc = -1, erno = EBUSY 497 */ 498 if (DMVAR_EXEC(DESTROY_SESSION_BASE + 5)) { 499 dm_sessid_t newsid; 500 char buf[MSG_DATALEN]; 501 size_t rlen; 502 503 /* Variation set up */ 504 memcpy(buf, MSG_DATA, MSG_DATALEN); 505 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 506 rc |= dm_send_msg(newsid, DM_MSGTYPE_ASYNC, MSG_DATALEN, buf); 507 if (rc == -1) { 508 DMLOG_PRINT(DMLVL_DEBUG, 509 "Unable to set up variation! (errno = %d)\n", 510 errno); 511 DMVAR_SKIP(); 512 } else { 513 /* Variation */ 514 DMLOG_PRINT(DMLVL_DEBUG, "%s(valid sid)\n", szFuncName); 515 rc = dm_destroy_session(newsid); 516 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBUSY); 517 518 /* Variation clean up */ 519 rc = dm_get_events(newsid, 1, 0, sizeof(dmMsgBuf), 520 dmMsgBuf, &rlen); 521 rc |= dm_destroy_session(newsid); 522 if (rc == -1) { 523 DMLOG_PRINT(DMLVL_DEBUG, 524 "Unable to clean up variation! (errno = %d)\n", 525 errno); 526 } 527 } 528 } 529 530 szFuncName = "dm_getall_sessions"; 531 532 /* 533 * TEST : dm_getall_sessions - NULL sidbufp 534 * EXPECTED: rc = -1, errno EFAULT 535 */ 536 if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 1)) { 537 dm_sessid_t newsid; 538 int nelem; 539 540 /* Variation set up */ 541 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 542 if (rc == -1) { 543 DMLOG_PRINT(DMLVL_DEBUG, 544 "Unable to set up variation! (errno = %d)\n", 545 errno); 546 DMVAR_SKIP(); 547 } else { 548 /* Variation */ 549 DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL sidbufp)\n", 550 szFuncName); 551 rc = dm_getall_sessions(1, NULL, &nelem); 552 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 553 554 /* Variation clean up */ 555 rc = dm_destroy_session(newsid); 556 if (rc == -1) { 557 DMLOG_PRINT(DMLVL_DEBUG, 558 "Unable to clean up variation! (errno = %d)\n", 559 errno); 560 } 561 } 562 } 563 564 /* 565 * TEST : dm_getall_sessions - invalid sidbufp 566 * EXPECTED: rc = -1, errno EFAULT 567 */ 568 if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 2)) { 569 dm_sessid_t newsid; 570 int nelem; 571 572 /* Variation set up */ 573 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 574 if (rc == -1) { 575 DMLOG_PRINT(DMLVL_DEBUG, 576 "Unable to set up variation! (errno = %d)\n", 577 errno); 578 DMVAR_SKIP(); 579 } else { 580 /* Variation */ 581 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sidbufp)\n", 582 szFuncName); 583 rc = dm_getall_sessions(1, (dm_sessid_t *) INVALID_ADDR, 584 &nelem); 585 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 586 587 /* Variation clean up */ 588 rc = dm_destroy_session(newsid); 589 if (rc == -1) { 590 DMLOG_PRINT(DMLVL_DEBUG, 591 "Unable to clean up variation! (errno = %d)\n", 592 errno); 593 } 594 } 595 } 596 597 /* 598 * TEST : dm_getall_sessions - NULL nelemp 599 * EXPECTED: rc = -1, errno EFAULT 600 */ 601 if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 3)) { 602 dm_sessid_t newsid, sidArray[1]; 603 604 /* Variation set up */ 605 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 606 if (rc == -1) { 607 DMLOG_PRINT(DMLVL_DEBUG, 608 "Unable to set up variation! (errno = %d)\n", 609 errno); 610 DMVAR_SKIP(); 611 } else { 612 /* Variation */ 613 DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL nelemp)\n", 614 szFuncName); 615 rc = dm_getall_sessions(1, sidArray, NULL); 616 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 617 618 /* Variation clean up */ 619 rc = dm_destroy_session(newsid); 620 if (rc == -1) { 621 DMLOG_PRINT(DMLVL_DEBUG, 622 "Unable to clean up variation! (errno = %d)\n", 623 errno); 624 } 625 } 626 } 627 628 /* 629 * TEST : dm_getall_sessions - invalid nelemp 630 * EXPECTED: rc = -1, errno EFAULT 631 */ 632 if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 4)) { 633 dm_sessid_t newsid, sidArray[1]; 634 635 /* Variation set up */ 636 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 637 if (rc == -1) { 638 DMLOG_PRINT(DMLVL_DEBUG, 639 "Unable to set up variation! (errno = %d)\n", 640 errno); 641 DMVAR_SKIP(); 642 } else { 643 /* Variation */ 644 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid nelemp)\n", 645 szFuncName); 646 rc = dm_getall_sessions(1, sidArray, 647 (u_int *) INVALID_ADDR); 648 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 649 650 /* Variation clean up */ 651 rc = dm_destroy_session(newsid); 652 if (rc == -1) { 653 DMLOG_PRINT(DMLVL_DEBUG, 654 "Unable to clean up variation! (errno = %d)\n", 655 errno); 656 } 657 } 658 } 659 660 /* 661 * TEST : dm_getall_sessions - zero nelem, zero sessions 662 * EXPECTED: rc = 0 663 */ 664 if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 5)) { 665 dm_sessid_t sidArray[1]; 666 int nelem; 667 668 /* Variation set up */ 669 670 /* Variation */ 671 DMLOG_PRINT(DMLVL_DEBUG, "%s(zero nelem, zero sessions)\n", 672 szFuncName); 673 rc = dm_getall_sessions(0, sidArray, &nelem); 674 if (rc == 0) { 675 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 676 if (nelem == 0) { 677 DMLOG_PRINT(DMLVL_DEBUG, 678 "%s passed with expected rc = %d\n", 679 szFuncName, 0); 680 DMVAR_PASS(); 681 } else { 682 DMLOG_PRINT(DMLVL_ERR, 683 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 684 szFuncName, 0, nelem, 0); 685 DMVAR_FAIL(); 686 } 687 } else { 688 DMLOG_PRINT(DMLVL_ERR, 689 "%s failed with unexpected rc = %d (errno = %d)\n", 690 szFuncName, rc, errno); 691 DMVAR_FAIL(); 692 } 693 694 /* Variation clean up */ 695 } 696 697 /* 698 * TEST : dm_getall_sessions - zero nelem, one session 699 * EXPECTED: rc = -1, errno = E2BIG 700 */ 701 if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 6)) { 702 dm_sessid_t newsid, sidArray[1]; 703 int nelem; 704 705 /* Variation set up */ 706 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 707 if (rc == -1) { 708 DMLOG_PRINT(DMLVL_DEBUG, 709 "Unable to set up variation! (errno = %d)\n", 710 errno); 711 DMVAR_SKIP(); 712 } else { 713 /* Variation */ 714 DMLOG_PRINT(DMLVL_DEBUG, 715 "%s(zero nelem, one session)\n", 716 szFuncName); 717 rc = dm_getall_sessions(0, sidArray, &nelem); 718 719 if (rc == -1) { 720 if (errno == E2BIG) { 721 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", 722 nelem); 723 if (nelem == 1) { 724 DMLOG_PRINT(DMLVL_DEBUG, 725 "%s passed with expected rc = %d and expected errno = %d\n", 726 szFuncName, -1, 727 E2BIG); 728 DMVAR_PASS(); 729 } else { 730 DMLOG_PRINT(DMLVL_ERR, 731 "%s failed with expected rc = %d and expected errno = %d but unexpected nelem (%d vs %d)\n", 732 szFuncName, -1, 733 E2BIG, nelem, 1); 734 DMVAR_PASS(); 735 } 736 } else { 737 DMLOG_PRINT(DMLVL_ERR, 738 "%s failed with expected rc = %d but unexpected errno = %d\n", 739 szFuncName, -1, errno); 740 DMVAR_FAIL(); 741 } 742 } else { 743 DMLOG_PRINT(DMLVL_ERR, 744 "%s failed with unexpected rc = %d\n", 745 szFuncName, rc); 746 DMVAR_FAIL(); 747 } 748 749 /* Variation clean up */ 750 rc = dm_destroy_session(newsid); 751 if (rc == -1) { 752 DMLOG_PRINT(DMLVL_DEBUG, 753 "Unable to clean up variation! (errno = %d)\n", 754 errno); 755 } 756 } 757 } 758 759 /* 760 * TEST : dm_getall_sessions - one nelem, one session 761 * EXPECTED: rc = 0 762 */ 763 if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 7)) { 764 dm_sessid_t newsid, sidArray[1]; 765 int nelem; 766 767 /* Variation set up */ 768 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 769 if (rc == -1) { 770 DMLOG_PRINT(DMLVL_DEBUG, 771 "Unable to set up variation! (errno = %d)\n", 772 errno); 773 DMVAR_SKIP(); 774 } else { 775 /* Variation */ 776 DMLOG_PRINT(DMLVL_DEBUG, "%s(one nelem, one session)\n", 777 szFuncName); 778 rc = dm_getall_sessions(1, sidArray, &nelem); 779 if (rc == 0) { 780 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 781 782 if (nelem == 1) { 783 LogSessions(sidArray, nelem); 784 785 if (newsid == sidArray[0]) { 786 DMLOG_PRINT(DMLVL_DEBUG, 787 "%s passed with expected rc = %d\n", 788 szFuncName, 0); 789 DMVAR_PASS(); 790 } else { 791 DMLOG_PRINT(DMLVL_ERR, 792 "%s failed with expected rc = %d and nelem = %d but unexpected session ID (%d vs %d)\n", 793 szFuncName, 0, 794 nelem, newsid, 795 sidArray[0]); 796 DMVAR_FAIL(); 797 } 798 } else { 799 DMLOG_PRINT(DMLVL_ERR, 800 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 801 szFuncName, 0, nelem, 1); 802 DMVAR_FAIL(); 803 } 804 } else { 805 DMLOG_PRINT(DMLVL_ERR, 806 "%s failed with unexpected rc = %d (errno = %d)\n", 807 szFuncName, rc, errno); 808 DMVAR_FAIL(); 809 } 810 811 /* Variation clean up */ 812 rc = dm_destroy_session(newsid); 813 if (rc == -1) { 814 DMLOG_PRINT(DMLVL_DEBUG, 815 "Unable to clean up variation! (errno = %d)\n", 816 errno); 817 } 818 } 819 } 820 821 /* 822 * TEST : dm_getall_sessions - two nelem, one session 823 * EXPECTED: rc = 0 824 */ 825 if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 8)) { 826 dm_sessid_t newsid, sidArray[2]; 827 int nelem; 828 829 /* Variation set up */ 830 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 831 if (rc == -1) { 832 DMLOG_PRINT(DMLVL_DEBUG, 833 "Unable to set up variation! (errno = %d)\n", 834 errno); 835 DMVAR_SKIP(); 836 } else { 837 /* Variation */ 838 DMLOG_PRINT(DMLVL_DEBUG, "%s(two nelem, one session)\n", 839 szFuncName); 840 rc = dm_getall_sessions(2, sidArray, &nelem); 841 if (rc == 0) { 842 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 843 844 if (nelem == 1) { 845 LogSessions(sidArray, nelem); 846 847 if (newsid == sidArray[0]) { 848 DMLOG_PRINT(DMLVL_DEBUG, 849 "%s passed with expected rc = %d\n", 850 szFuncName, 0); 851 DMVAR_PASS(); 852 } else { 853 DMLOG_PRINT(DMLVL_ERR, 854 "%s failed with expected rc = %d and nelem = %d but unexpected session ID (%d vs %d)\n", 855 szFuncName, 0, 856 nelem, newsid, 857 sidArray[0]); 858 DMVAR_FAIL(); 859 } 860 } else { 861 DMLOG_PRINT(DMLVL_ERR, 862 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 863 szFuncName, 0, nelem, 1); 864 DMVAR_FAIL(); 865 } 866 } else { 867 DMLOG_PRINT(DMLVL_ERR, 868 "%s failed with unexpected rc = %d (errno = %d)\n", 869 szFuncName, rc, errno); 870 DMVAR_FAIL(); 871 } 872 873 /* Variation clean up */ 874 rc = dm_destroy_session(newsid); 875 if (rc == -1) { 876 DMLOG_PRINT(DMLVL_DEBUG, 877 "Unable to clean up variation! (errno = %d)\n", 878 errno); 879 } 880 } 881 } 882 883 /* 884 * TEST : dm_getall_sessions - ten nelem, eight sessions 885 * EXPECTED: rc = 0 886 */ 887 if (DMVAR_EXEC(GETALL_SESSIONS_BASE + 9)) { 888 dm_sessid_t sidExpected[NUM_SESSIONS], sidArray[10]; 889 int nelem; 890 891 /* Variation set up */ 892 for (i = 0, rc = 0; i < NUM_SESSIONS && rc == 0; i++) { 893 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, 894 &sidExpected[i]); 895 } 896 if (rc == -1) { 897 DMLOG_PRINT(DMLVL_DEBUG, 898 "Unable to set up variation! (errno = %d)\n", 899 errno); 900 for (i--; i >= 0; i--) { 901 dm_destroy_session(sidExpected[i]); 902 } 903 DMVAR_SKIP(); 904 } else { 905 /* Variation */ 906 DMLOG_PRINT(DMLVL_DEBUG, "%s(%d nelem, %d sessions)\n", 907 szFuncName, 908 sizeof(sidArray) / sizeof(dm_sessid_t), 909 NUM_SESSIONS); 910 rc = dm_getall_sessions(sizeof(sidArray) / 911 sizeof(dm_sessid_t), sidArray, 912 &nelem); 913 if (rc == 0) { 914 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 915 916 if (nelem == NUM_SESSIONS) { 917 LogSessions(sidArray, nelem); 918 919 if (memcmp 920 (sidArray, sidExpected, 921 NUM_SESSIONS * 922 sizeof(dm_sessid_t)) == 0) { 923 DMLOG_PRINT(DMLVL_DEBUG, 924 "%s passed with expected rc = %d\n", 925 szFuncName, 0); 926 DMVAR_PASS(); 927 } else { 928 DMLOG_PRINT(DMLVL_ERR, 929 "%s failed with expected rc = %d and nelem = %d but unexpected session ID(s)\n", 930 szFuncName, 0, 931 nelem); 932 DMVAR_FAIL(); 933 } 934 } else { 935 DMLOG_PRINT(DMLVL_ERR, 936 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 937 szFuncName, 0, nelem, 938 NUM_SESSIONS); 939 DMVAR_FAIL(); 940 } 941 } else { 942 DMLOG_PRINT(DMLVL_ERR, 943 "%s failed with unexpected rc = %d (errno = %d)\n", 944 szFuncName, rc, errno); 945 DMVAR_FAIL(); 946 } 947 948 /* Variation clean up */ 949 for (i = 0, rc = 0; i < NUM_SESSIONS; i++) { 950 rc |= dm_destroy_session(sidExpected[i]); 951 } 952 if (rc == -1) { 953 DMLOG_PRINT(DMLVL_DEBUG, 954 "Unable to clean up variation! (errno = %d)\n", 955 errno); 956 } 957 } 958 } 959 960 szFuncName = "dm_query_session"; 961 962 /* 963 * TEST : dm_query_session - DM_NO_SESSION sid 964 * EXPECTED: rc = -1, errno = EINVAL 965 */ 966 if (DMVAR_EXEC(QUERY_SESSION_BASE + 1)) { 967 char buf[64]; 968 size_t rlen; 969 970 /* Variation set up */ 971 972 /* Variation */ 973 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName); 974 rc = dm_query_session(DM_NO_SESSION, sizeof(buf), buf, &rlen); 975 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 976 977 /* Variation clean up */ 978 } 979 980 /* 981 * TEST : dm_query_session - invalid sid 982 * EXPECTED: rc = -1, errno = EINVAL 983 */ 984 if (DMVAR_EXEC(QUERY_SESSION_BASE + 2)) { 985 char buf[64]; 986 size_t rlen; 987 988 /* Variation set up */ 989 990 /* Variation */ 991 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", szFuncName); 992 rc = dm_query_session(INVALID_ADDR, sizeof(buf), buf, &rlen); 993 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 994 995 /* Variation clean up */ 996 } 997 998 /* 999 * TEST : dm_query_session - invalidated sid 1000 * EXPECTED: rc = -1, errno = EINVAL 1001 */ 1002 if (DMVAR_EXEC(QUERY_SESSION_BASE + 3)) { 1003 dm_sessid_t newsid; 1004 char buf[64]; 1005 size_t rlen; 1006 1007 /* Variation set up */ 1008 if ((rc = 1009 dm_create_session(DM_NO_SESSION, szSessionInfo, 1010 &newsid)) != -1) { 1011 rc = dm_destroy_session(newsid); 1012 } 1013 if (rc == -1) { 1014 DMLOG_PRINT(DMLVL_DEBUG, 1015 "Unable to set up variation! (errno = %d)\n", 1016 errno); 1017 DMVAR_SKIP(); 1018 } else { 1019 /* Variation */ 1020 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated sid)\n", 1021 szFuncName); 1022 rc = dm_query_session(newsid, sizeof(buf), buf, &rlen); 1023 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 1024 1025 /* Variation clean up */ 1026 } 1027 } 1028 1029 /* 1030 * TEST : dm_query_session - NULL bufp 1031 * EXPECTED: rc = -1, errno EFAULT 1032 */ 1033 if (DMVAR_EXEC(QUERY_SESSION_BASE + 4)) { 1034 dm_sessid_t newsid; 1035 char buf[64]; 1036 size_t rlen; 1037 1038 /* Variation set up */ 1039 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 1040 if (rc == -1) { 1041 DMLOG_PRINT(DMLVL_DEBUG, 1042 "Unable to set up variation! (errno = %d)\n", 1043 errno); 1044 DMVAR_SKIP(); 1045 } else { 1046 /* Variation */ 1047 DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL bufp)\n", szFuncName); 1048 rc = dm_query_session(newsid, sizeof(buf), NULL, &rlen); 1049 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 1050 1051 /* Variation clean up */ 1052 rc = dm_destroy_session(newsid); 1053 if (rc == -1) { 1054 DMLOG_PRINT(DMLVL_DEBUG, 1055 "Unable to clean up variation! (errno = %d)\n", 1056 errno); 1057 } 1058 } 1059 } 1060 1061 /* 1062 * TEST : dm_query_session - invalid bufp 1063 * EXPECTED: rc = -1, errno EFAULT 1064 */ 1065 if (DMVAR_EXEC(QUERY_SESSION_BASE + 5)) { 1066 dm_sessid_t newsid; 1067 char buf[64]; 1068 size_t rlen; 1069 1070 /* Variation set up */ 1071 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 1072 if (rc == -1) { 1073 DMLOG_PRINT(DMLVL_DEBUG, 1074 "Unable to set up variation! (errno = %d)\n", 1075 errno); 1076 DMVAR_SKIP(); 1077 } else { 1078 /* Variation */ 1079 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid bufp)\n", 1080 szFuncName); 1081 rc = dm_query_session(newsid, sizeof(buf), 1082 (void *)INVALID_ADDR, &rlen); 1083 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 1084 1085 /* Variation clean up */ 1086 rc = dm_destroy_session(newsid); 1087 if (rc == -1) { 1088 DMLOG_PRINT(DMLVL_DEBUG, 1089 "Unable to clean up variation! (errno = %d)\n", 1090 errno); 1091 } 1092 } 1093 } 1094 1095 /* 1096 * TEST : dm_query_session - NULL rlenp 1097 * EXPECTED: rc = -1, errno EFAULT 1098 */ 1099 if (DMVAR_EXEC(QUERY_SESSION_BASE + 6)) { 1100 dm_sessid_t newsid; 1101 char buf[64]; 1102 1103 /* Variation set up */ 1104 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 1105 if (rc == -1) { 1106 DMLOG_PRINT(DMLVL_DEBUG, 1107 "Unable to set up variation! (errno = %d)\n", 1108 errno); 1109 DMVAR_SKIP(); 1110 } else { 1111 /* Variation */ 1112 DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL rlenp)\n", 1113 szFuncName); 1114 rc = dm_query_session(newsid, sizeof(buf), buf, NULL); 1115 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 1116 1117 /* Variation clean up */ 1118 rc = dm_destroy_session(newsid); 1119 if (rc == -1) { 1120 DMLOG_PRINT(DMLVL_DEBUG, 1121 "Unable to clean up variation! (errno = %d)\n", 1122 errno); 1123 } 1124 } 1125 } 1126 1127 /* 1128 * TEST : dm_query_session - invalid rlenp 1129 * EXPECTED: rc = -1, errno EFAULT 1130 */ 1131 if (DMVAR_EXEC(QUERY_SESSION_BASE + 7)) { 1132 dm_sessid_t newsid; 1133 char buf[64]; 1134 1135 /* Variation set up */ 1136 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 1137 if (rc == -1) { 1138 DMLOG_PRINT(DMLVL_DEBUG, 1139 "Unable to set up variation! (errno = %d)\n", 1140 errno); 1141 DMVAR_SKIP(); 1142 } else { 1143 /* Variation */ 1144 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid rlenp)\n", 1145 szFuncName); 1146 rc = dm_query_session(newsid, sizeof(buf), buf, 1147 (size_t *) INVALID_ADDR); 1148 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 1149 1150 /* Variation clean up */ 1151 rc = dm_destroy_session(newsid); 1152 if (rc == -1) { 1153 DMLOG_PRINT(DMLVL_DEBUG, 1154 "Unable to clean up variation! (errno = %d)\n", 1155 errno); 1156 } 1157 } 1158 } 1159 1160 /* 1161 * TEST : dm_query_session - zero buflen 1162 * EXPECTED: rc = -1, errno = E2BIG 1163 */ 1164 if (DMVAR_EXEC(QUERY_SESSION_BASE + 8)) { 1165 dm_sessid_t newsid; 1166 char buf[64]; 1167 size_t rlen; 1168 1169 /* Variation set up */ 1170 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 1171 if (rc == -1) { 1172 DMLOG_PRINT(DMLVL_DEBUG, 1173 "Unable to set up variation! (errno = %d)\n", 1174 errno); 1175 DMVAR_SKIP(); 1176 } else { 1177 /* Variation */ 1178 DMLOG_PRINT(DMLVL_DEBUG, "%s(buflen zero)\n", 1179 szFuncName); 1180 rc = dm_query_session(newsid, 0, buf, &rlen); 1181 if (rc == -1) { 1182 if (errno == E2BIG) { 1183 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", 1184 rlen); 1185 1186 if (rlen == strlen(szSessionInfo) + 1) { 1187 DMLOG_PRINT(DMLVL_DEBUG, 1188 "%s passed with expected rc = %d and expected errno = %d\n", 1189 szFuncName, -1, 1190 E2BIG); 1191 DMVAR_PASS(); 1192 } else { 1193 DMLOG_PRINT(DMLVL_ERR, 1194 "%s failed with expected rc = %d and expected errno = %d but unexpected rlen (%d vs %d)\n", 1195 szFuncName, -1, 1196 E2BIG, rlen, 1197 strlen 1198 (szSessionInfo) + 1199 1); 1200 DMVAR_FAIL(); 1201 } 1202 } else { 1203 DMLOG_PRINT(DMLVL_ERR, 1204 "%s failed with expected rc = %d but unexpected errno = %d\n", 1205 szFuncName, -1, errno); 1206 DMVAR_FAIL(); 1207 } 1208 } else { 1209 DMLOG_PRINT(DMLVL_ERR, 1210 "%s failed with unexpected rc = %d\n", 1211 szFuncName, rc); 1212 DMVAR_FAIL(); 1213 } 1214 1215 /* Variation clean up */ 1216 rc = dm_destroy_session(newsid); 1217 if (rc == -1) { 1218 DMLOG_PRINT(DMLVL_DEBUG, 1219 "Unable to clean up variation! (errno = %d)\n", 1220 errno); 1221 } 1222 } 1223 } 1224 1225 /* 1226 * TEST : dm_query_session - valid 1227 * EXPECTED: rc = 0 1228 */ 1229 if (DMVAR_EXEC(QUERY_SESSION_BASE + 9)) { 1230 dm_sessid_t newsid; 1231 char buf[64]; 1232 size_t rlen; 1233 1234 /* Variation set up */ 1235 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 1236 if (rc == -1) { 1237 DMLOG_PRINT(DMLVL_DEBUG, 1238 "Unable to set up variation! (errno = %d)\n", 1239 errno); 1240 DMVAR_SKIP(); 1241 } else { 1242 /* Variation */ 1243 DMLOG_PRINT(DMLVL_DEBUG, "%s(valid)\n", szFuncName, 1244 sizeof(buf)); 1245 rc = dm_query_session(newsid, sizeof(buf), buf, &rlen); 1246 if (rc == 0) { 1247 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen); 1248 1249 if (rlen == strlen(szSessionInfo) + 1) { 1250 DMLOG_PRINT(DMLVL_DEBUG, 1251 "buf = \"%s\"\n", buf); 1252 1253 if (strcmp(buf, szSessionInfo) == 0) { 1254 DMLOG_PRINT(DMLVL_DEBUG, 1255 "%s passed with expected rc = %d\n", 1256 szFuncName, 0); 1257 DMVAR_PASS(); 1258 } else { 1259 DMLOG_PRINT(DMLVL_ERR, 1260 "%s failed with expected rc = %d and rlen = %d but unexpected session info (\"%s\" vs \"%s\")\n", 1261 szFuncName, 0, rlen, 1262 buf, szSessionInfo); 1263 DMVAR_FAIL(); 1264 } 1265 } else { 1266 DMLOG_PRINT(DMLVL_ERR, 1267 "%s failed with expected rc = %d but unexpected rlen (%d vs %d)\n", 1268 szFuncName, 0, rlen, 1269 strlen(szSessionInfo) + 1); 1270 DMVAR_FAIL(); 1271 } 1272 } else { 1273 DMLOG_PRINT(DMLVL_ERR, 1274 "%s failed with unexpected rc = %d (errno = %d)\n", 1275 szFuncName, rc, errno); 1276 DMVAR_FAIL(); 1277 } 1278 1279 /* Variation clean up */ 1280 rc = dm_destroy_session(newsid); 1281 if (rc == -1) { 1282 DMLOG_PRINT(DMLVL_DEBUG, 1283 "Unable to clean up variation! (errno = %d)\n", 1284 errno); 1285 } 1286 } 1287 } 1288 1289 /* 1290 * TEST : dm_query_session - maximum sessionfo 1291 * sessioninfo 1292 * EXPECTED: rc = 0 1293 */ 1294 if (DMVAR_EXEC(QUERY_SESSION_BASE + 10)) { 1295 dm_sessid_t newsid; 1296 char buf[512]; 1297 size_t rlen; 1298 char *szBig = 1299 "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345"; 1300 1301 /* Variation set up */ 1302 rc = dm_create_session(DM_NO_SESSION, szBig, &newsid); 1303 if (rc == -1) { 1304 DMLOG_PRINT(DMLVL_DEBUG, 1305 "Unable to set up variation! (errno = %d)\n", 1306 errno); 1307 DMVAR_SKIP(); 1308 } else { 1309 /* Variation */ 1310 DMLOG_PRINT(DMLVL_DEBUG, "%s(max sessinfo)\n", 1311 szFuncName, sizeof(buf)); 1312 rc = dm_query_session(newsid, sizeof(buf), buf, &rlen); 1313 if (rc == 0) { 1314 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen); 1315 1316 if (rlen == DM_SESSION_INFO_LEN) { 1317 DMLOG_PRINT(DMLVL_DEBUG, 1318 "buf = \"%s\"\n", buf); 1319 1320 if (strncmp 1321 (buf, szBig, 1322 DM_SESSION_INFO_LEN - 1) == 0) { 1323 DMLOG_PRINT(DMLVL_DEBUG, 1324 "%s passed with expected rc = %d\n", 1325 szFuncName, 0); 1326 DMVAR_PASS(); 1327 } else { 1328 DMLOG_PRINT(DMLVL_ERR, 1329 "%s failed with expected rc = %d and rlen = %d but unexpected session info (\"%s\" vs \"%s\")\n", 1330 szFuncName, 0, rlen, 1331 buf, szSessionInfo); 1332 DMVAR_FAIL(); 1333 } 1334 } else { 1335 DMLOG_PRINT(DMLVL_ERR, 1336 "%s failed with expected rc = %d but unexpected rlen (%d vs %d)\n", 1337 szFuncName, 0, rlen, 1338 DM_SESSION_INFO_LEN); 1339 DMVAR_FAIL(); 1340 } 1341 } else { 1342 DMLOG_PRINT(DMLVL_ERR, 1343 "%s failed with unexpected rc = %d (errno = %d)\n", 1344 szFuncName, rc, errno); 1345 DMVAR_FAIL(); 1346 } 1347 1348 /* Variation clean up */ 1349 rc = dm_destroy_session(newsid); 1350 if (rc == -1) { 1351 DMLOG_PRINT(DMLVL_DEBUG, 1352 "Unable to clean up variation! (errno = %d)\n", 1353 errno); 1354 } 1355 } 1356 } 1357 1358 DMLOG_STOP(); 1359 1360 tst_exit(); 1361 1362 } 1363