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 : disp.c 21 * 22 * VARIATIONS : 155 23 * 24 * API'S TESTED : dm_get_config_events 25 * dm_set_disp 26 * dm_getall_disp 27 * dm_set_eventlist 28 * dm_get_eventlist 29 */ 30 #include <string.h> 31 #include <stdio.h> 32 #include <stdlib.h> 33 #include <errno.h> 34 #include <pthread.h> 35 #include <unistd.h> 36 #include <sys/stat.h> 37 #include <sys/mount.h> 38 #include <fcntl.h> 39 #include "dm_test.h" 40 41 #define TMP_FILELEN 1000 42 43 pthread_t tid; 44 dm_sessid_t sid; 45 char dmMsgBuf[4096]; 46 char command[4096]; 47 char *mountPt; 48 char *deviceNm; 49 char DummyFile[FILENAME_MAX]; 50 char DummyFile2[FILENAME_MAX]; 51 char DummySubdir[FILENAME_MAX]; 52 53 void *Thread(void *); 54 55 int main(int argc, char **argv) 56 { 57 58 char *szFuncName; 59 char *varstr; 60 int i; 61 int rc; 62 char *szSessionInfo = "dm_test session info"; 63 dm_eventset_t events, maxEvents, minEvents; 64 void *fshanp; 65 size_t fshlen; 66 int varNum; 67 68 DMOPT_PARSE(argc, argv); 69 DMLOG_START(); 70 71 DMEV_ZERO(events); 72 DMEV_SET(DM_EVENT_MOUNT, events); 73 74 /* CANNOT DO ANYTHING WITHOUT SUCCESSFUL INITIALIZATION!!! */ 75 if ((rc = dm_init_service(&varstr)) != 0) { 76 DMLOG_PRINT(DMLVL_ERR, 77 "dm_init_service failed! (rc = %d, errno = %d)\n", 78 rc, errno); 79 DM_EXIT(); 80 } else if ((rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &sid)) 81 == -1) { 82 DMLOG_PRINT(DMLVL_ERR, 83 "dm_create_session failed! (rc = %d, errno = %d)\n", 84 rc, errno); 85 DM_EXIT(); 86 } else 87 if ((rc = 88 dm_set_disp(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, DM_NO_TOKEN, 89 &events, DM_EVENT_MAX)) == -1) { 90 DMLOG_PRINT(DMLVL_ERR, 91 "dm_set_disp failed! (rc = %d, errno = %d)\n", rc, 92 errno); 93 dm_destroy_session(sid); 94 DM_EXIT(); 95 } else if ((rc = pthread_create(&tid, NULL, Thread, NULL)) != 0) { 96 DMLOG_PRINT(DMLVL_ERR, 97 "pthread_create failed! (rc = %d, errno = %d)\n", 98 rc, errno); 99 dm_destroy_session(sid); 100 DM_EXIT(); 101 } else if ((rc = dmimpl_mount(&mountPt, &deviceNm)) == -1) { 102 DMLOG_PRINT(DMLVL_ERR, 103 "dmimpl_mount failed! (rc = %d, errno = %d)\n", rc, 104 errno); 105 dm_destroy_session(sid); 106 DM_EXIT(); 107 } else { 108 int fd; 109 110 sprintf(DummyFile, "%s/%s", mountPt, DUMMY_FILE); 111 sprintf(DummyFile2, "%s/%s", mountPt, DUMMY_FILE2); 112 sprintf(DummySubdir, "%s/%s", mountPt, DUMMY_SUBDIR); 113 114 remove(DummyFile); 115 remove(DummyFile2); 116 rmdir(DummySubdir); 117 118 EVENT_DELIVERY_DELAY; 119 fd = open(DummyFile, O_RDWR | O_CREAT, DUMMY_FILE_RW_MODE); 120 if (fd != -1) { 121 for (i = 0; i < TMP_FILELEN / DUMMY_STRLEN; i++) { 122 if (write(fd, DUMMY_STRING, DUMMY_STRLEN) != 123 DUMMY_STRLEN) { 124 rc = -1; 125 break; 126 } 127 } 128 } else { 129 rc = -1; 130 } 131 if (rc != -1) { 132 rc = fsync(fd); 133 } 134 if (rc != -1) { 135 rc = close(fd); 136 } 137 if (rc == -1) { 138 DMLOG_PRINT(DMLVL_ERR, 139 "creating dummy file failed! (rc = %d, errno = %d)\n", 140 rc, errno); 141 dm_destroy_session(sid); 142 DM_EXIT(); 143 } 144 145 rc = mkdir(DummySubdir, DUMMY_DIR_RW_MODE); 146 if (rc == -1) { 147 DMLOG_PRINT(DMLVL_ERR, 148 "creating dummy dir failed! (rc = %d, errno = %d)\n", 149 rc, errno); 150 dm_destroy_session(sid); 151 DM_EXIT(); 152 } 153 154 DMEV_ZERO(maxEvents); 155 DMEV_SET(DM_EVENT_PREUNMOUNT, maxEvents); 156 DMEV_SET(DM_EVENT_UNMOUNT, maxEvents); 157 DMEV_SET(DM_EVENT_CREATE, maxEvents); 158 DMEV_SET(DM_EVENT_CLOSE, maxEvents); 159 DMEV_SET(DM_EVENT_POSTCREATE, maxEvents); 160 DMEV_SET(DM_EVENT_REMOVE, maxEvents); 161 DMEV_SET(DM_EVENT_POSTREMOVE, maxEvents); 162 DMEV_SET(DM_EVENT_RENAME, maxEvents); 163 DMEV_SET(DM_EVENT_POSTRENAME, maxEvents); 164 DMEV_SET(DM_EVENT_LINK, maxEvents); 165 DMEV_SET(DM_EVENT_POSTLINK, maxEvents); 166 DMEV_SET(DM_EVENT_SYMLINK, maxEvents); 167 DMEV_SET(DM_EVENT_POSTSYMLINK, maxEvents); 168 DMEV_SET(DM_EVENT_ATTRIBUTE, maxEvents); 169 DMEV_SET(DM_EVENT_DESTROY, maxEvents); 170 DMEV_SET(DM_EVENT_NOSPACE, maxEvents); 171 172 DMEV_ZERO(minEvents); 173 DMEV_SET(DM_EVENT_PREUNMOUNT, minEvents); 174 DMEV_SET(DM_EVENT_UNMOUNT, minEvents); 175 } 176 177 DMLOG_PRINT(DMLVL_DEBUG, 178 "Starting DMAPI disposition/eventlist tests\n"); 179 180 szFuncName = "dm_get_config_events"; 181 182 /* 183 * TEST : dm_get_config_events - invalid hanp 184 * EXPECTED: rc = -1, errno = EFAULT 185 */ 186 if (DMVAR_EXEC(GET_CONFIG_EVENTS_BASE + 1)) { 187 void *hanp; 188 size_t hlen; 189 dm_eventset_t eventset; 190 u_int nelem; 191 192 /* Variation set up */ 193 rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen); 194 if (rc == -1) { 195 DMLOG_PRINT(DMLVL_DEBUG, 196 "Unable to set up variation! (errno = %d)\n", 197 errno); 198 DMVAR_SKIP(); 199 } else { 200 /* Variation */ 201 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n", 202 szFuncName); 203 rc = dm_get_config_events((void *)INVALID_ADDR, hlen, 204 DM_EVENT_MAX, &eventset, 205 &nelem); 206 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 207 208 /* Variation clean up */ 209 dm_handle_free(hanp, hlen); 210 } 211 } 212 213 /* 214 * TEST : dm_get_config_events - invalid hlen 215 * EXPECTED: rc = -1, errno = EBADF 216 */ 217 if (DMVAR_EXEC(GET_CONFIG_EVENTS_BASE + 2)) { 218 void *hanp; 219 size_t hlen; 220 dm_eventset_t eventset; 221 u_int nelem; 222 223 /* Variation set up */ 224 rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen); 225 if (rc == -1) { 226 DMLOG_PRINT(DMLVL_DEBUG, 227 "Unable to set up variation! (errno = %d)\n", 228 errno); 229 DMVAR_SKIP(); 230 } else { 231 /* Variation */ 232 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n", 233 szFuncName); 234 rc = dm_get_config_events(hanp, INVALID_ADDR, 235 DM_EVENT_MAX, &eventset, 236 &nelem); 237 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF); 238 239 /* Variation clean up */ 240 dm_handle_free(hanp, hlen); 241 } 242 } 243 244 /* 245 * TEST : dm_get_config_events - invalid nelem 246 * EXPECTED: rc = -1, errno = E2BIG 247 * 248 * This variation uncovered XFS BUG #18 (nelem not updated) 249 */ 250 if (DMVAR_EXEC(GET_CONFIG_EVENTS_BASE + 3)) { 251 void *hanp; 252 size_t hlen; 253 dm_eventset_t eventset; 254 u_int nelem; 255 256 /* Variation set up */ 257 rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen); 258 if (rc == -1) { 259 DMLOG_PRINT(DMLVL_DEBUG, 260 "Unable to set up variation! (errno = %d)\n", 261 errno); 262 DMVAR_SKIP(); 263 } else { 264 /* Variation */ 265 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid nelem)\n", 266 szFuncName); 267 rc = dm_get_config_events(hanp, hlen, 0, &eventset, 268 &nelem); 269 if (rc == -1) { 270 if (errno == E2BIG) { 271 if (nelem == DM_EVENT_MAX) { 272 DMLOG_PRINT(DMLVL_DEBUG, 273 "%s passed with expected rc = %d and expected errno = %d (nelem = %d)\n", 274 szFuncName, rc, 275 errno, nelem); 276 DMVAR_PASS(); 277 } else { 278 DMLOG_PRINT(DMLVL_ERR, 279 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 280 szFuncName, rc, 281 nelem, 282 DM_EVENT_MAX); 283 DMVAR_FAIL(); 284 } 285 } else { 286 DMLOG_PRINT(DMLVL_ERR, 287 "%s failed with expected rc = %d but unexpected errno = %d\n", 288 szFuncName, rc, errno); 289 DMVAR_FAIL(); 290 } 291 } else { 292 DMLOG_PRINT(DMLVL_ERR, 293 "%s failed with unexpected rc = %d\n", 294 szFuncName, rc); 295 DMVAR_FAIL(); 296 } 297 298 /* Variation clean up */ 299 dm_handle_free(hanp, hlen); 300 } 301 } 302 303 /* 304 * TEST : dm_get_config_events - invalid eventsetp 305 * EXPECTED: rc = -1, errno = EFAULT 306 */ 307 if (DMVAR_EXEC(GET_CONFIG_EVENTS_BASE + 4)) { 308 void *hanp; 309 size_t hlen; 310 u_int nelem; 311 312 /* Variation set up */ 313 rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen); 314 if (rc == -1) { 315 DMLOG_PRINT(DMLVL_DEBUG, 316 "Unable to set up variation! (errno = %d)\n", 317 errno); 318 DMVAR_SKIP(); 319 } else { 320 /* Variation */ 321 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid eventsetp)\n", 322 szFuncName); 323 rc = dm_get_config_events(hanp, hlen, DM_EVENT_MAX, 324 (dm_eventset_t *) 325 INVALID_ADDR, &nelem); 326 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 327 328 /* Variation clean up */ 329 dm_handle_free(hanp, hlen); 330 } 331 } 332 333 /* 334 * TEST : dm_get_config_events - invalid nelemp 335 * EXPECTED: rc = -1, errno = EFAULT 336 */ 337 if (DMVAR_EXEC(GET_CONFIG_EVENTS_BASE + 5)) { 338 void *hanp; 339 size_t hlen; 340 dm_eventset_t eventset; 341 342 /* Variation set up */ 343 rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen); 344 if (rc == -1) { 345 DMLOG_PRINT(DMLVL_DEBUG, 346 "Unable to set up variation! (errno = %d)\n", 347 errno); 348 DMVAR_SKIP(); 349 } else { 350 /* Variation */ 351 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid nelemp)\n", 352 szFuncName); 353 rc = dm_get_config_events(hanp, hlen, DM_EVENT_MAX, 354 &eventset, 355 (u_int *) INVALID_ADDR); 356 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 357 358 /* Variation clean up */ 359 dm_handle_free(hanp, hlen); 360 } 361 } 362 363 /* 364 * TEST : dm_get_config_events - fs handle 365 * EXPECTED: rc = 0 366 * 367 * This variation uncovered XFS BUG #19 (DM_EVENT_USER not returned) 368 */ 369 if (DMVAR_EXEC(GET_CONFIG_EVENTS_BASE + 6)) { 370 void *hanp; 371 size_t hlen; 372 dm_eventset_t eventset; 373 u_int nelem; 374 375 /* Variation set up */ 376 rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen); 377 if (rc == -1) { 378 DMLOG_PRINT(DMLVL_DEBUG, 379 "Unable to set up variation! (errno = %d)\n", 380 errno); 381 DMVAR_SKIP(); 382 } else { 383 /* Variation */ 384 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle)\n", szFuncName); 385 rc = dm_get_config_events(hanp, hlen, DM_EVENT_MAX, 386 &eventset, &nelem); 387 if (rc == 0) { 388 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 389 if (nelem == DM_EVENT_MAX) { 390 if (memcmp 391 (&eventset, &dmimpl_eventset, 392 sizeof(dm_eventset_t)) == 0) { 393 DMLOG_PRINT(DMLVL_DEBUG, 394 "%s passed with expected rc = %d\n", 395 szFuncName, 0); 396 DMVAR_PASS(); 397 } else { 398 DMLOG_PRINT(DMLVL_ERR, 399 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 400 szFuncName, 0, 401 eventset, 402 dmimpl_eventset); 403 DMVAR_FAIL(); 404 } 405 } else { 406 DMLOG_PRINT(DMLVL_ERR, 407 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 408 szFuncName, 0, nelem, 409 DM_EVENT_DESTROY + 1); 410 DMVAR_FAIL(); 411 } 412 } else { 413 DMLOG_PRINT(DMLVL_ERR, 414 "%s failed with unexpected rc = %d (errno = %d)\n", 415 szFuncName, rc, errno); 416 DMVAR_FAIL(); 417 } 418 419 /* Variation clean up */ 420 dm_handle_free(hanp, hlen); 421 } 422 } 423 424 /* 425 * TEST : dm_get_config_events - file handle 426 * EXPECTED: rc = 0 427 */ 428 if (DMVAR_EXEC(GET_CONFIG_EVENTS_BASE + 7)) { 429 void *hanp; 430 size_t hlen; 431 dm_eventset_t eventset; 432 u_int nelem; 433 434 /* Variation set up */ 435 rc = dm_path_to_handle(DummyFile, &hanp, &hlen); 436 if (rc == -1) { 437 DMLOG_PRINT(DMLVL_DEBUG, 438 "Unable to set up variation! (errno = %d)\n", 439 errno); 440 DMVAR_SKIP(); 441 } else { 442 /* Variation */ 443 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n", 444 szFuncName); 445 rc = dm_get_config_events(hanp, hlen, DM_EVENT_MAX, 446 &eventset, &nelem); 447 if (rc == 0) { 448 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 449 if (nelem == DM_EVENT_MAX) { 450 if (memcmp 451 (&eventset, &dmimpl_eventset, 452 sizeof(dm_eventset_t)) == 0) { 453 DMLOG_PRINT(DMLVL_DEBUG, 454 "%s passed with expected rc = %d\n", 455 szFuncName, 0); 456 DMVAR_PASS(); 457 } else { 458 DMLOG_PRINT(DMLVL_ERR, 459 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 460 szFuncName, 0, 461 eventset, 462 dmimpl_eventset); 463 DMVAR_FAIL(); 464 } 465 } else { 466 DMLOG_PRINT(DMLVL_ERR, 467 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 468 szFuncName, 0, nelem, 469 DM_EVENT_DESTROY + 1); 470 DMVAR_FAIL(); 471 } 472 } else { 473 DMLOG_PRINT(DMLVL_ERR, 474 "%s failed with unexpected rc = %d (errno = %d)\n", 475 szFuncName, rc, errno); 476 DMVAR_FAIL(); 477 } 478 479 /* Variation clean up */ 480 dm_handle_free(hanp, hlen); 481 } 482 } 483 484 /* 485 * TEST : dm_get_config_events - dir handle 486 * EXPECTED: rc = 0 487 */ 488 if (DMVAR_EXEC(GET_CONFIG_EVENTS_BASE + 8)) { 489 void *hanp; 490 size_t hlen; 491 dm_eventset_t eventset; 492 u_int nelem; 493 494 /* Variation set up */ 495 rc = dm_path_to_handle(DummySubdir, &hanp, &hlen); 496 if (rc == -1) { 497 DMLOG_PRINT(DMLVL_DEBUG, 498 "Unable to set up variation! (errno = %d)\n", 499 errno); 500 DMVAR_SKIP(); 501 } else { 502 /* Variation */ 503 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir handle)\n", 504 szFuncName); 505 rc = dm_get_config_events(hanp, hlen, DM_EVENT_MAX, 506 &eventset, &nelem); 507 if (rc == 0) { 508 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 509 if (nelem == DM_EVENT_MAX) { 510 if (memcmp 511 (&eventset, &dmimpl_eventset, 512 sizeof(dm_eventset_t)) == 0) { 513 DMLOG_PRINT(DMLVL_DEBUG, 514 "%s passed with expected rc = %d\n", 515 szFuncName, 0); 516 DMVAR_PASS(); 517 } else { 518 DMLOG_PRINT(DMLVL_ERR, 519 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 520 szFuncName, 0, 521 eventset, 522 dmimpl_eventset); 523 DMVAR_FAIL(); 524 } 525 } else { 526 DMLOG_PRINT(DMLVL_ERR, 527 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 528 szFuncName, 0, nelem, 529 DM_EVENT_DESTROY + 1); 530 DMVAR_FAIL(); 531 } 532 } else { 533 DMLOG_PRINT(DMLVL_ERR, 534 "%s failed with unexpected rc = %d (errno = %d)\n", 535 szFuncName, rc, errno); 536 DMVAR_FAIL(); 537 } 538 539 /* Variation clean up */ 540 dm_handle_free(hanp, hlen); 541 } 542 } 543 544 /* 545 * TEST : dm_get_config_events - global handle 546 * EXPECTED: rc = -1, errno = EBADF 547 */ 548 if (DMVAR_EXEC(GET_CONFIG_EVENTS_BASE + 9)) { 549 dm_eventset_t eventset; 550 u_int nelem; 551 552 /* Variation set up */ 553 554 /* Variation */ 555 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", szFuncName); 556 rc = dm_get_config_events(DM_GLOBAL_HANP, DM_GLOBAL_HLEN, 557 DM_EVENT_MAX, &eventset, &nelem); 558 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF); 559 560 /* Variation clean up */ 561 } 562 563 /* 564 * TEST : dm_get_config_events - invalidated handle 565 * EXPECTED: rc = -1, errno = EBADF 566 */ 567 if (DMVAR_EXEC(GET_CONFIG_EVENTS_BASE + 10)) { 568 void *hanp; 569 size_t hlen; 570 dm_eventset_t eventset; 571 u_int nelem; 572 573 /* Variation set up */ 574 sprintf(command, "cp %s %s", DummyFile, DummyFile2); 575 if ((rc = system(command)) == -1) { 576 /* No clean up */ 577 } else if ((rc = dm_path_to_handle(DummyFile2, &hanp, &hlen)) == 578 -1) { 579 remove(DummyFile2); 580 } else if ((rc = remove(DummyFile2)) == -1) { 581 dm_handle_free(hanp, hlen); 582 } 583 if (rc == -1) { 584 DMLOG_PRINT(DMLVL_DEBUG, 585 "Unable to set up variation! (errno = %d)\n", 586 errno); 587 DMVAR_SKIP(); 588 } else { 589 /* Variation */ 590 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated handle)\n", 591 szFuncName); 592 rc = dm_get_config_events(hanp, hlen, DM_EVENT_MAX, 593 &eventset, &nelem); 594 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF); 595 596 /* Variation clean up */ 597 dm_handle_free(hanp, hlen); 598 } 599 } 600 601 szFuncName = "dm_set_disp"; 602 603 /* 604 * TEST : dm_set_disp - DM_NO_SESSION sid 605 * EXPECTED: rc = -1, errno = EINVAL 606 */ 607 if (DMVAR_EXEC(SET_DISP_BASE + 1)) { 608 dm_sessid_t newsid; 609 void *hanp; 610 size_t hlen; 611 dm_eventset_t eventset = minEvents; 612 613 /* Variation set up */ 614 if ((rc = 615 dm_create_session(DM_NO_SESSION, szSessionInfo, 616 &newsid)) == -1) { 617 /* No clean up */ 618 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 619 == -1) { 620 dm_destroy_session(newsid); 621 } 622 if (rc == -1) { 623 DMLOG_PRINT(DMLVL_DEBUG, 624 "Unable to set up variation! (errno = %d)\n", 625 errno); 626 DMVAR_SKIP(); 627 } else { 628 /* Variation */ 629 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", 630 szFuncName); 631 rc = dm_set_disp(DM_NO_SESSION, hanp, hlen, DM_NO_TOKEN, 632 &eventset, DM_EVENT_MAX); 633 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 634 635 /* Variation clean up */ 636 rc = dm_destroy_session(newsid); 637 if (rc == -1) { 638 DMLOG_PRINT(DMLVL_DEBUG, 639 "Unable to clean up variation! (errno = %d)\n", 640 errno); 641 } 642 dm_handle_free(hanp, hlen); 643 } 644 } 645 646 /* 647 * TEST : dm_set_disp - invalid sid 648 * EXPECTED: rc = -1, errno = EINVAL 649 */ 650 if (DMVAR_EXEC(SET_DISP_BASE + 2)) { 651 dm_sessid_t newsid; 652 void *hanp; 653 size_t hlen; 654 dm_eventset_t eventset = minEvents; 655 656 /* Variation set up */ 657 if ((rc = 658 dm_create_session(DM_NO_SESSION, szSessionInfo, 659 &newsid)) == -1) { 660 /* No clean up */ 661 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 662 == -1) { 663 dm_destroy_session(newsid); 664 } 665 if (rc == -1) { 666 DMLOG_PRINT(DMLVL_DEBUG, 667 "Unable to set up variation! (errno = %d)\n", 668 errno); 669 DMVAR_SKIP(); 670 } else { 671 /* Variation */ 672 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", 673 szFuncName); 674 rc = dm_set_disp(INVALID_ADDR, hanp, hlen, DM_NO_TOKEN, 675 &eventset, DM_EVENT_MAX); 676 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 677 678 /* Variation clean up */ 679 rc = dm_destroy_session(newsid); 680 if (rc == -1) { 681 DMLOG_PRINT(DMLVL_DEBUG, 682 "Unable to clean up variation! (errno = %d)\n", 683 errno); 684 } 685 dm_handle_free(hanp, hlen); 686 } 687 } 688 689 /* 690 * TEST : dm_set_disp - invalid hanp 691 * EXPECTED: rc = -1, errno = EFAULT 692 */ 693 if (DMVAR_EXEC(SET_DISP_BASE + 3)) { 694 dm_sessid_t newsid; 695 void *hanp; 696 size_t hlen; 697 dm_eventset_t eventset = minEvents; 698 699 /* Variation set up */ 700 if ((rc = 701 dm_create_session(DM_NO_SESSION, szSessionInfo, 702 &newsid)) == -1) { 703 /* No clean up */ 704 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 705 == -1) { 706 dm_destroy_session(newsid); 707 } 708 if (rc == -1) { 709 DMLOG_PRINT(DMLVL_DEBUG, 710 "Unable to set up variation! (errno = %d)\n", 711 errno); 712 DMVAR_SKIP(); 713 } else { 714 /* Variation */ 715 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n", 716 szFuncName); 717 rc = dm_set_disp(newsid, (void *)INVALID_ADDR, hlen, 718 DM_NO_TOKEN, &eventset, DM_EVENT_MAX); 719 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 720 721 /* Variation clean up */ 722 rc = dm_destroy_session(newsid); 723 if (rc == -1) { 724 DMLOG_PRINT(DMLVL_DEBUG, 725 "Unable to clean up variation! (errno = %d)\n", 726 errno); 727 } 728 dm_handle_free(hanp, hlen); 729 } 730 } 731 732 /* 733 * TEST : dm_set_disp - invalid hlen 734 * EXPECTED: rc = -1, errno = EBADF 735 */ 736 if (DMVAR_EXEC(SET_DISP_BASE + 4)) { 737 dm_sessid_t newsid; 738 void *hanp; 739 size_t hlen; 740 dm_eventset_t eventset = minEvents; 741 742 /* Variation set up */ 743 if ((rc = 744 dm_create_session(DM_NO_SESSION, szSessionInfo, 745 &newsid)) == -1) { 746 /* No clean up */ 747 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 748 == -1) { 749 dm_destroy_session(newsid); 750 } 751 if (rc == -1) { 752 DMLOG_PRINT(DMLVL_DEBUG, 753 "Unable to set up variation! (errno = %d)\n", 754 errno); 755 DMVAR_SKIP(); 756 } else { 757 /* Variation */ 758 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n", 759 szFuncName); 760 rc = dm_set_disp(newsid, hanp, INVALID_ADDR, 761 DM_NO_TOKEN, &eventset, DM_EVENT_MAX); 762 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF); 763 764 /* Variation clean up */ 765 rc = dm_destroy_session(newsid); 766 if (rc == -1) { 767 DMLOG_PRINT(DMLVL_DEBUG, 768 "Unable to clean up variation! (errno = %d)\n", 769 errno); 770 } 771 dm_handle_free(hanp, hlen); 772 } 773 } 774 775 /* 776 * TEST : dm_set_disp - invalid token 777 * EXPECTED: rc = -1, errno = EINVAL 778 */ 779 if (DMVAR_EXEC(SET_DISP_BASE + 5)) { 780 dm_sessid_t newsid; 781 void *hanp; 782 size_t hlen; 783 dm_eventset_t eventset = minEvents; 784 785 /* Variation set up */ 786 if ((rc = 787 dm_create_session(DM_NO_SESSION, szSessionInfo, 788 &newsid)) == -1) { 789 /* No clean up */ 790 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 791 == -1) { 792 dm_destroy_session(newsid); 793 } 794 if (rc == -1) { 795 DMLOG_PRINT(DMLVL_DEBUG, 796 "Unable to set up variation! (errno = %d)\n", 797 errno); 798 DMVAR_SKIP(); 799 } else { 800 /* Variation */ 801 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n", 802 szFuncName); 803 rc = dm_set_disp(newsid, hanp, hlen, INVALID_ADDR, 804 &eventset, DM_EVENT_MAX); 805 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 806 807 /* Variation clean up */ 808 rc = dm_destroy_session(newsid); 809 if (rc == -1) { 810 DMLOG_PRINT(DMLVL_DEBUG, 811 "Unable to clean up variation! (errno = %d)\n", 812 errno); 813 } 814 dm_handle_free(hanp, hlen); 815 } 816 } 817 818 /* 819 * TEST : dm_set_disp - invalid eventsetp 820 * EXPECTED: rc = -1, errno = EFAULT 821 */ 822 if (DMVAR_EXEC(SET_DISP_BASE + 6)) { 823 dm_sessid_t newsid; 824 void *hanp; 825 size_t hlen; 826 827 /* Variation set up */ 828 if ((rc = 829 dm_create_session(DM_NO_SESSION, szSessionInfo, 830 &newsid)) == -1) { 831 /* No clean up */ 832 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 833 == -1) { 834 dm_destroy_session(newsid); 835 } 836 if (rc == -1) { 837 DMLOG_PRINT(DMLVL_DEBUG, 838 "Unable to set up variation! (errno = %d)\n", 839 errno); 840 DMVAR_SKIP(); 841 } else { 842 /* Variation */ 843 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid eventsetp)\n", 844 szFuncName); 845 rc = dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 846 (dm_eventset_t *) INVALID_ADDR, 847 DM_EVENT_MAX); 848 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 849 850 /* Variation clean up */ 851 rc = dm_destroy_session(newsid); 852 if (rc == -1) { 853 DMLOG_PRINT(DMLVL_DEBUG, 854 "Unable to clean up variation! (errno = %d)\n", 855 errno); 856 } 857 dm_handle_free(hanp, hlen); 858 } 859 } 860 861 /* 862 * TEST : dm_set_disp - invalid maxevent 863 * EXPECTED: rc = -1, errno = EINVAL 864 */ 865 if (DMVAR_EXEC(SET_DISP_BASE + 7)) { 866 dm_sessid_t newsid; 867 void *hanp; 868 size_t hlen; 869 dm_eventset_t eventset = minEvents; 870 871 /* Variation set up */ 872 if ((rc = 873 dm_create_session(DM_NO_SESSION, szSessionInfo, 874 &newsid)) == -1) { 875 /* No clean up */ 876 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 877 == -1) { 878 dm_destroy_session(newsid); 879 } 880 if (rc == -1) { 881 DMLOG_PRINT(DMLVL_DEBUG, 882 "Unable to set up variation! (errno = %d)\n", 883 errno); 884 DMVAR_SKIP(); 885 } else { 886 /* Variation */ 887 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid maxevent)\n", 888 szFuncName); 889 rc = dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 890 &eventset, DM_EVENT_MAX + 1); 891 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 892 893 /* Variation clean up */ 894 rc = dm_destroy_session(newsid); 895 if (rc == -1) { 896 DMLOG_PRINT(DMLVL_DEBUG, 897 "Unable to clean up variation! (errno = %d)\n", 898 errno); 899 } 900 dm_handle_free(hanp, hlen); 901 } 902 } 903 904 /* 905 * TEST : dm_set_disp - file handle 906 * EXPECTED: rc = -1, errno = EINVAL 907 */ 908 if (DMVAR_EXEC(SET_DISP_BASE + 8)) { 909 dm_sessid_t newsid; 910 void *hanp; 911 size_t hlen; 912 dm_eventset_t eventset = minEvents; 913 914 /* Variation set up */ 915 if ((rc = 916 dm_create_session(DM_NO_SESSION, szSessionInfo, 917 &newsid)) == -1) { 918 /* No clean up */ 919 } else if ((rc = dm_path_to_handle(DummyFile, &hanp, &hlen)) == 920 -1) { 921 dm_destroy_session(newsid); 922 } 923 if (rc == -1) { 924 DMLOG_PRINT(DMLVL_DEBUG, 925 "Unable to set up variation! (errno = %d)\n", 926 errno); 927 DMVAR_SKIP(); 928 } else { 929 /* Variation */ 930 DMLOG_PRINT(DMLVL_DEBUG, "%s(file handle)\n", 931 szFuncName); 932 rc = dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 933 &eventset, DM_EVENT_MAX); 934 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 935 936 /* Variation clean up */ 937 rc = dm_destroy_session(newsid); 938 if (rc == -1) { 939 DMLOG_PRINT(DMLVL_DEBUG, 940 "Unable to clean up variation! (errno = %d)\n", 941 errno); 942 } 943 dm_handle_free(hanp, hlen); 944 } 945 } 946 947 /* 948 * TEST : dm_set_disp - directory handle 949 * EXPECTED: rc = -1, errno = EINVAL 950 */ 951 if (DMVAR_EXEC(SET_DISP_BASE + 9)) { 952 dm_sessid_t newsid; 953 void *hanp; 954 size_t hlen; 955 dm_eventset_t eventset = minEvents; 956 957 /* Variation set up */ 958 if ((rc = 959 dm_create_session(DM_NO_SESSION, szSessionInfo, 960 &newsid)) == -1) { 961 /* No clean up */ 962 } else if ((rc = dm_path_to_handle(DummySubdir, &hanp, &hlen)) 963 == -1) { 964 dm_destroy_session(newsid); 965 } 966 if (rc == -1) { 967 DMLOG_PRINT(DMLVL_DEBUG, 968 "Unable to set up variation! (errno = %d)\n", 969 errno); 970 DMVAR_SKIP(); 971 } else { 972 /* Variation */ 973 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir handle)\n", 974 szFuncName); 975 rc = dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 976 &eventset, DM_EVENT_MAX); 977 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 978 979 /* Variation clean up */ 980 rc = dm_destroy_session(newsid); 981 if (rc == -1) { 982 DMLOG_PRINT(DMLVL_DEBUG, 983 "Unable to clean up variation! (errno = %d)\n", 984 errno); 985 } 986 dm_handle_free(hanp, hlen); 987 } 988 } 989 990 /* 991 * TEST : dm_set_disp - invalid global handle event 992 * EXPECTED: rc = -1, errno = EINVAL 993 */ 994 if (DMVAR_EXEC(SET_DISP_BASE + 10)) { 995 dm_sessid_t newsid; 996 dm_eventset_t eventset; 997 998 /* Variation set up */ 999 DMEV_ZERO(eventset); 1000 DMEV_SET(DM_EVENT_POSTCREATE, eventset); 1001 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 1002 if (rc == -1) { 1003 DMLOG_PRINT(DMLVL_DEBUG, 1004 "Unable to set up variation! (errno = %d)\n", 1005 errno); 1006 DMVAR_SKIP(); 1007 } else { 1008 /* Variation */ 1009 DMLOG_PRINT(DMLVL_DEBUG, 1010 "%s(invalid global handle event)\n", 1011 szFuncName); 1012 rc = dm_set_disp(newsid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, 1013 DM_NO_TOKEN, &eventset, DM_EVENT_MAX); 1014 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 1015 1016 /* Variation clean up */ 1017 rc = dm_destroy_session(newsid); 1018 if (rc == -1) { 1019 DMLOG_PRINT(DMLVL_DEBUG, 1020 "Unable to clean up variation! (errno = %d)\n", 1021 errno); 1022 } 1023 } 1024 } 1025 1026 /* 1027 * TEST : dm_set_disp - invalid fs handle event 1028 * EXPECTED: rc = -1, errno = EINVAL 1029 */ 1030 if (DMVAR_EXEC(SET_DISP_BASE + 11)) { 1031 dm_sessid_t newsid; 1032 void *hanp; 1033 size_t hlen; 1034 dm_eventset_t eventset; 1035 1036 /* Variation set up */ 1037 DMEV_ZERO(eventset); 1038 DMEV_SET(DM_EVENT_MOUNT, eventset); 1039 if ((rc = 1040 dm_create_session(DM_NO_SESSION, szSessionInfo, 1041 &newsid)) == -1) { 1042 /* No clean up */ 1043 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1044 == -1) { 1045 dm_destroy_session(newsid); 1046 } 1047 if (rc == -1) { 1048 DMLOG_PRINT(DMLVL_DEBUG, 1049 "Unable to set up variation! (errno = %d)\n", 1050 errno); 1051 DMVAR_SKIP(); 1052 } else { 1053 /* Variation */ 1054 DMLOG_PRINT(DMLVL_DEBUG, 1055 "%s(invalid fs handle event)\n", 1056 szFuncName); 1057 rc = dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 1058 &eventset, DM_EVENT_MAX); 1059 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 1060 1061 /* Variation clean up */ 1062 rc = dm_destroy_session(newsid); 1063 if (rc == -1) { 1064 DMLOG_PRINT(DMLVL_DEBUG, 1065 "Unable to clean up variation! (errno = %d)\n", 1066 errno); 1067 } 1068 dm_handle_free(hanp, hlen); 1069 } 1070 } 1071 1072 /* 1073 * TEST : dm_set_disp - valid global handle event 1074 * EXPECTED: rc = 0 1075 */ 1076 if (DMVAR_EXEC(SET_DISP_BASE + 12)) { 1077 dm_sessid_t newsid; 1078 dm_eventset_t eventset; 1079 1080 /* Variation set up */ 1081 DMEV_ZERO(eventset); 1082 DMEV_SET(DM_EVENT_MOUNT, eventset); 1083 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 1084 if (rc == -1) { 1085 DMLOG_PRINT(DMLVL_DEBUG, 1086 "Unable to set up variation! (errno = %d)\n", 1087 errno); 1088 DMVAR_SKIP(); 1089 } else { 1090 /* Variation */ 1091 DMLOG_PRINT(DMLVL_DEBUG, 1092 "%s(valid global handle event)\n", 1093 szFuncName); 1094 rc = dm_set_disp(newsid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, 1095 DM_NO_TOKEN, &eventset, DM_EVENT_MAX); 1096 DMVAR_ENDPASSEXP(szFuncName, 0, rc); 1097 1098 /* Variation clean up */ 1099 rc = dm_destroy_session(newsid); 1100 if (rc == -1) { 1101 DMLOG_PRINT(DMLVL_DEBUG, 1102 "Unable to clean up variation! (errno = %d)\n", 1103 errno); 1104 } 1105 } 1106 } 1107 1108 /* 1109 * TEST : dm_set_disp - valid fs handle event 1110 * EXPECTED: rc = 0 1111 */ 1112 if (DMVAR_EXEC(SET_DISP_BASE + 13)) { 1113 dm_sessid_t newsid; 1114 void *hanp; 1115 size_t hlen; 1116 dm_eventset_t eventset; 1117 1118 /* Variation set up */ 1119 DMEV_ZERO(eventset); 1120 DMEV_SET(DM_EVENT_POSTCREATE, eventset); 1121 if ((rc = 1122 dm_create_session(DM_NO_SESSION, szSessionInfo, 1123 &newsid)) == -1) { 1124 /* No clean up */ 1125 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1126 == -1) { 1127 dm_destroy_session(newsid); 1128 } 1129 if (rc == -1) { 1130 DMLOG_PRINT(DMLVL_DEBUG, 1131 "Unable to set up variation! (errno = %d)\n", 1132 errno); 1133 DMVAR_SKIP(); 1134 } else { 1135 /* Variation */ 1136 DMLOG_PRINT(DMLVL_DEBUG, "%s(valid fs handle event)\n", 1137 szFuncName); 1138 rc = dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 1139 &eventset, DM_EVENT_MAX); 1140 DMVAR_ENDPASSEXP(szFuncName, 0, rc); 1141 1142 /* Variation clean up */ 1143 rc = dm_destroy_session(newsid); 1144 if (rc == -1) { 1145 DMLOG_PRINT(DMLVL_DEBUG, 1146 "Unable to clean up variation! (errno = %d)\n", 1147 errno); 1148 } 1149 dm_handle_free(hanp, hlen); 1150 } 1151 } 1152 1153 szFuncName = "dm_getall_disp"; 1154 1155 /* 1156 * TEST : dm_getall_disp - DM_NO_SESSION sid 1157 * EXPECTED: rc = -1, errno = EINVAL 1158 */ 1159 if (DMVAR_EXEC(GETALL_DISP_BASE + 1)) { 1160 char buf[64]; 1161 size_t rlen; 1162 1163 /* Variation set up */ 1164 1165 /* Variation */ 1166 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", szFuncName); 1167 rc = dm_getall_disp(DM_NO_SESSION, sizeof(buf), buf, &rlen); 1168 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 1169 1170 /* Variation clean up */ 1171 } 1172 1173 /* 1174 * TEST : dm_getall_disp - invalid sid 1175 * EXPECTED: rc = -1, errno = EINVAL 1176 */ 1177 if (DMVAR_EXEC(GETALL_DISP_BASE + 2)) { 1178 char buf[64]; 1179 size_t rlen; 1180 1181 /* Variation set up */ 1182 1183 /* Variation */ 1184 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", szFuncName); 1185 rc = dm_getall_disp(INVALID_ADDR, sizeof(buf), buf, &rlen); 1186 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 1187 1188 /* Variation clean up */ 1189 } 1190 1191 /* 1192 * TEST : dm_getall_disp - invalidated sid 1193 * EXPECTED: rc = -1, errno = EINVAL 1194 */ 1195 if (DMVAR_EXEC(GETALL_DISP_BASE + 3)) { 1196 dm_sessid_t newsid; 1197 char buf[64]; 1198 size_t rlen; 1199 void *hanp; 1200 size_t hlen; 1201 1202 /* Variation set up */ 1203 if ((rc = 1204 dm_create_session(DM_NO_SESSION, szSessionInfo, 1205 &newsid)) == -1) { 1206 /* No clean up */ 1207 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1208 == -1) { 1209 dm_destroy_session(newsid); 1210 } else 1211 if ((rc = 1212 dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 1213 &maxEvents, DM_EVENT_MAX)) == -1) { 1214 dm_handle_free(hanp, hlen); 1215 dm_destroy_session(newsid); 1216 } else if ((rc = dm_destroy_session(newsid)) == -1) { 1217 dm_handle_free(hanp, hlen); 1218 } 1219 if (rc == -1) { 1220 DMLOG_PRINT(DMLVL_DEBUG, 1221 "Unable to set up variation! (errno = %d)\n", 1222 errno); 1223 DMVAR_SKIP(); 1224 } else { 1225 /* Variation */ 1226 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalidated sid)\n", 1227 szFuncName); 1228 rc = dm_getall_disp(newsid, sizeof(buf), buf, &rlen); 1229 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 1230 1231 /* Variation clean up */ 1232 dm_handle_free(hanp, hlen); 1233 } 1234 } 1235 1236 /* 1237 * TEST : dm_getall_disp - NULL bufp 1238 * EXPECTED: rc = -1, errno EFAULT 1239 */ 1240 if (DMVAR_EXEC(GETALL_DISP_BASE + 4)) { 1241 dm_sessid_t newsid; 1242 char buf[64]; 1243 size_t rlen; 1244 void *hanp; 1245 size_t hlen; 1246 1247 /* Variation set up */ 1248 if ((rc = 1249 dm_create_session(DM_NO_SESSION, szSessionInfo, 1250 &newsid)) == -1) { 1251 /* No clean up */ 1252 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1253 == -1) { 1254 dm_destroy_session(newsid); 1255 } else 1256 if ((rc = 1257 dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 1258 &maxEvents, DM_EVENT_MAX)) == -1) { 1259 dm_handle_free(hanp, hlen); 1260 dm_destroy_session(newsid); 1261 } 1262 if (rc == -1) { 1263 DMLOG_PRINT(DMLVL_DEBUG, 1264 "Unable to set up variation! (errno = %d)\n", 1265 errno); 1266 DMVAR_SKIP(); 1267 } else { 1268 /* Variation */ 1269 DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL bufp)\n", szFuncName); 1270 rc = dm_getall_disp(newsid, sizeof(buf), NULL, &rlen); 1271 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 1272 1273 /* Variation clean up */ 1274 rc = dm_destroy_session(newsid); 1275 if (rc == -1) { 1276 DMLOG_PRINT(DMLVL_DEBUG, 1277 "Unable to clean up variation! (errno = %d)\n", 1278 errno); 1279 } 1280 dm_handle_free(hanp, hlen); 1281 } 1282 } 1283 1284 /* 1285 * TEST : dm_getall_disp - invalid bufp 1286 * EXPECTED: rc = -1, errno EFAULT 1287 */ 1288 if (DMVAR_EXEC(GETALL_DISP_BASE + 5)) { 1289 dm_sessid_t newsid; 1290 char buf[64]; 1291 size_t rlen; 1292 void *hanp; 1293 size_t hlen; 1294 1295 /* Variation set up */ 1296 if ((rc = 1297 dm_create_session(DM_NO_SESSION, szSessionInfo, 1298 &newsid)) == -1) { 1299 /* No clean up */ 1300 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1301 == -1) { 1302 dm_destroy_session(newsid); 1303 } else 1304 if ((rc = 1305 dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 1306 &maxEvents, DM_EVENT_MAX)) == -1) { 1307 dm_handle_free(hanp, hlen); 1308 dm_destroy_session(newsid); 1309 } 1310 if (rc == -1) { 1311 DMLOG_PRINT(DMLVL_DEBUG, 1312 "Unable to set up variation! (errno = %d)\n", 1313 errno); 1314 DMVAR_SKIP(); 1315 } else { 1316 /* Variation */ 1317 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid bufp)\n", 1318 szFuncName); 1319 rc = dm_getall_disp(newsid, sizeof(buf), 1320 (void *)INVALID_ADDR, &rlen); 1321 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 1322 1323 /* Variation clean up */ 1324 rc = dm_destroy_session(newsid); 1325 if (rc == -1) { 1326 DMLOG_PRINT(DMLVL_DEBUG, 1327 "Unable to clean up variation! (errno = %d)\n", 1328 errno); 1329 } 1330 dm_handle_free(hanp, hlen); 1331 } 1332 } 1333 1334 /* 1335 * TEST : dm_getall_disp - NULL rlenp 1336 * EXPECTED: rc = -1, errno EFAULT 1337 */ 1338 if (DMVAR_EXEC(GETALL_DISP_BASE + 6)) { 1339 dm_sessid_t newsid; 1340 char buf[64]; 1341 void *hanp; 1342 size_t hlen; 1343 1344 /* Variation set up */ 1345 if ((rc = 1346 dm_create_session(DM_NO_SESSION, szSessionInfo, 1347 &newsid)) == -1) { 1348 /* No clean up */ 1349 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1350 == -1) { 1351 dm_destroy_session(newsid); 1352 } else 1353 if ((rc = 1354 dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 1355 &maxEvents, DM_EVENT_MAX)) == -1) { 1356 dm_handle_free(hanp, hlen); 1357 dm_destroy_session(newsid); 1358 } 1359 if (rc == -1) { 1360 DMLOG_PRINT(DMLVL_DEBUG, 1361 "Unable to set up variation! (errno = %d)\n", 1362 errno); 1363 DMVAR_SKIP(); 1364 } else { 1365 /* Variation */ 1366 DMLOG_PRINT(DMLVL_DEBUG, "%s(NULL rlenp)\n", 1367 szFuncName); 1368 rc = dm_getall_disp(newsid, sizeof(buf), buf, NULL); 1369 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 1370 1371 /* Variation clean up */ 1372 rc = dm_destroy_session(newsid); 1373 if (rc == -1) { 1374 DMLOG_PRINT(DMLVL_DEBUG, 1375 "Unable to clean up variation! (errno = %d)\n", 1376 errno); 1377 } 1378 dm_handle_free(hanp, hlen); 1379 } 1380 } 1381 1382 /* 1383 * TEST : dm_getall_disp - invalid rlenp 1384 * EXPECTED: rc = -1, errno EFAULT 1385 */ 1386 if (DMVAR_EXEC(GETALL_DISP_BASE + 7)) { 1387 dm_sessid_t newsid; 1388 char buf[64]; 1389 void *hanp; 1390 size_t hlen; 1391 1392 /* Variation set up */ 1393 if ((rc = 1394 dm_create_session(DM_NO_SESSION, szSessionInfo, 1395 &newsid)) == -1) { 1396 /* No clean up */ 1397 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1398 == -1) { 1399 dm_destroy_session(newsid); 1400 } else 1401 if ((rc = 1402 dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 1403 &maxEvents, DM_EVENT_MAX)) == -1) { 1404 dm_handle_free(hanp, hlen); 1405 dm_destroy_session(newsid); 1406 } 1407 if (rc == -1) { 1408 DMLOG_PRINT(DMLVL_DEBUG, 1409 "Unable to set up variation! (errno = %d)\n", 1410 errno); 1411 DMVAR_SKIP(); 1412 } else { 1413 /* Variation */ 1414 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid rlenp)\n", 1415 szFuncName); 1416 rc = dm_getall_disp(newsid, sizeof(buf), buf, 1417 (size_t *) INVALID_ADDR); 1418 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 1419 1420 /* Variation clean up */ 1421 rc = dm_destroy_session(newsid); 1422 if (rc == -1) { 1423 DMLOG_PRINT(DMLVL_DEBUG, 1424 "Unable to clean up variation! (errno = %d)\n", 1425 errno); 1426 } 1427 dm_handle_free(hanp, hlen); 1428 } 1429 } 1430 1431 /* 1432 * TEST : dm_getall_disp - zero buflen 1433 * EXPECTED: rc = -1, errno = E2BIG 1434 */ 1435 if (DMVAR_EXEC(GETALL_DISP_BASE + 8)) { 1436 dm_sessid_t newsid; 1437 char buf[64]; 1438 size_t rlen; 1439 void *hanp; 1440 size_t hlen; 1441 1442 /* Variation set up */ 1443 if ((rc = 1444 dm_create_session(DM_NO_SESSION, szSessionInfo, 1445 &newsid)) == -1) { 1446 /* No clean up */ 1447 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1448 == -1) { 1449 dm_destroy_session(newsid); 1450 } else 1451 if ((rc = 1452 dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 1453 &maxEvents, DM_EVENT_MAX)) == -1) { 1454 dm_handle_free(hanp, hlen); 1455 dm_destroy_session(newsid); 1456 } 1457 if (rc == -1) { 1458 DMLOG_PRINT(DMLVL_DEBUG, 1459 "Unable to set up variation! (errno = %d)\n", 1460 errno); 1461 DMVAR_SKIP(); 1462 } else { 1463 /* Variation */ 1464 DMLOG_PRINT(DMLVL_DEBUG, "%s(buflen zero)\n", 1465 szFuncName); 1466 rc = dm_getall_disp(newsid, 0, buf, &rlen); 1467 if (rc == -1 && errno == E2BIG) { 1468 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen); 1469 } 1470 DMVAR_ENDFAILEXP(szFuncName, -1, rc, E2BIG); 1471 1472 /* Variation clean up */ 1473 rc = dm_destroy_session(newsid); 1474 if (rc == -1) { 1475 DMLOG_PRINT(DMLVL_DEBUG, 1476 "Unable to clean up variation! (errno = %d)\n", 1477 errno); 1478 } 1479 dm_handle_free(hanp, hlen); 1480 } 1481 } 1482 1483 /* 1484 * TEST : dm_getall_disp - valid 1485 * EXPECTED: rc = 0 1486 */ 1487 if (DMVAR_EXEC(GETALL_DISP_BASE + 9)) { 1488 dm_sessid_t newsid; 1489 char buf[64]; 1490 size_t rlen; 1491 void *hanp; 1492 size_t hlen; 1493 1494 /* Variation set up */ 1495 if ((rc = 1496 dm_create_session(DM_NO_SESSION, szSessionInfo, 1497 &newsid)) == -1) { 1498 /* No clean up */ 1499 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1500 == -1) { 1501 dm_destroy_session(newsid); 1502 } else 1503 if ((rc = 1504 dm_set_disp(newsid, hanp, hlen, DM_NO_TOKEN, 1505 &maxEvents, DM_EVENT_MAX)) == -1) { 1506 dm_handle_free(hanp, hlen); 1507 dm_destroy_session(newsid); 1508 } 1509 if (rc == -1) { 1510 DMLOG_PRINT(DMLVL_DEBUG, 1511 "Unable to set up variation! (errno = %d)\n", 1512 errno); 1513 DMVAR_SKIP(); 1514 } else { 1515 /* Variation */ 1516 DMLOG_PRINT(DMLVL_DEBUG, "%s(valid)\n", szFuncName); 1517 rc = dm_getall_disp(newsid, sizeof(buf), buf, &rlen); 1518 if (rc == 0) { 1519 DMLOG_PRINT(DMLVL_DEBUG, "rlen = %d\n", rlen); 1520 dm_dispinfo_t *di = (dm_dispinfo_t *) buf; 1521 if (rlen == sizeof(dm_dispinfo_t) + hlen) { 1522 if (dm_handle_cmp 1523 (hanp, hlen, 1524 DM_GET_VALUE(di, di_fshandle, 1525 void *), 1526 DM_GET_LEN(di, 1527 di_fshandle)) == 0) { 1528 if (di->di_eventset == 1529 maxEvents) { 1530 DMLOG_PRINT(DMLVL_DEBUG, 1531 "%s passed with expected rc = %d\n", 1532 szFuncName, 1533 0); 1534 DMVAR_PASS(); 1535 } else { 1536 DMLOG_PRINT(DMLVL_ERR, 1537 "%s failed with expected rc = %d but unexpected eventset (%llx vs %llx)\n", 1538 szFuncName, 1539 0, 1540 di-> 1541 di_eventset, 1542 maxEvents); 1543 DMVAR_FAIL(); 1544 } 1545 } else { 1546 DMLOG_PRINT(DMLVL_ERR, 1547 "%s failed with expected rc = %d but unexpected fs handle (%llx vs %llx)\n", 1548 szFuncName, 0, 1549 *(__u64 *) hanp, 1550 *(__u64 *) 1551 DM_GET_VALUE(di, 1552 di_fshandle, 1553 void 1554 *)); 1555 DMVAR_FAIL(); 1556 } 1557 } else { 1558 DMLOG_PRINT(DMLVL_ERR, 1559 "%s failed with expected rc = %d but unexpected rlen (%d vs %d)\n", 1560 szFuncName, 0, rlen, 1561 sizeof(dm_dispinfo_t) + 1562 hlen); 1563 DMVAR_FAIL(); 1564 } 1565 } else { 1566 DMLOG_PRINT(DMLVL_ERR, 1567 "%s failed with unexpected rc = %d (errno = %d)\n", 1568 szFuncName, rc, errno); 1569 DMVAR_FAIL(); 1570 } 1571 1572 /* Variation clean up */ 1573 rc = dm_destroy_session(newsid); 1574 if (rc == -1) { 1575 DMLOG_PRINT(DMLVL_DEBUG, 1576 "Unable to clean up variation! (errno = %d)\n", 1577 errno); 1578 } 1579 dm_handle_free(hanp, hlen); 1580 } 1581 } 1582 1583 szFuncName = "dm_set_eventlist"; 1584 1585 /* 1586 * TEST : dm_set_eventlist - DM_NO_SESSION sid 1587 * EXPECTED: rc = -1, errno = EINVAL 1588 */ 1589 if (DMVAR_EXEC(SET_EVENTLIST_BASE + 1)) { 1590 dm_sessid_t newsid; 1591 void *hanp; 1592 size_t hlen; 1593 dm_eventset_t eventset = minEvents; 1594 1595 /* Variation set up */ 1596 if ((rc = 1597 dm_create_session(DM_NO_SESSION, szSessionInfo, 1598 &newsid)) == -1) { 1599 /* No clean up */ 1600 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1601 == -1) { 1602 dm_destroy_session(newsid); 1603 } 1604 if (rc == -1) { 1605 DMLOG_PRINT(DMLVL_DEBUG, 1606 "Unable to set up variation! (errno = %d)\n", 1607 errno); 1608 DMVAR_SKIP(); 1609 } else { 1610 /* Variation */ 1611 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", 1612 szFuncName); 1613 rc = dm_set_eventlist(DM_NO_SESSION, hanp, hlen, 1614 DM_NO_TOKEN, &eventset, 1615 DM_EVENT_MAX); 1616 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 1617 1618 /* Variation clean up */ 1619 rc = dm_destroy_session(newsid); 1620 if (rc == -1) { 1621 DMLOG_PRINT(DMLVL_DEBUG, 1622 "Unable to clean up variation! (errno = %d)\n", 1623 errno); 1624 } 1625 dm_handle_free(hanp, hlen); 1626 } 1627 } 1628 1629 /* 1630 * TEST : dm_set_eventlist - invalid sid 1631 * EXPECTED: rc = -1, errno = EINVAL 1632 */ 1633 if (DMVAR_EXEC(SET_EVENTLIST_BASE + 2)) { 1634 dm_sessid_t newsid; 1635 void *hanp; 1636 size_t hlen; 1637 dm_eventset_t eventset = minEvents; 1638 1639 /* Variation set up */ 1640 if ((rc = 1641 dm_create_session(DM_NO_SESSION, szSessionInfo, 1642 &newsid)) == -1) { 1643 /* No clean up */ 1644 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1645 == -1) { 1646 dm_destroy_session(newsid); 1647 } 1648 if (rc == -1) { 1649 DMLOG_PRINT(DMLVL_DEBUG, 1650 "Unable to set up variation! (errno = %d)\n", 1651 errno); 1652 DMVAR_SKIP(); 1653 } else { 1654 /* Variation */ 1655 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", 1656 szFuncName); 1657 rc = dm_set_eventlist(INVALID_ADDR, hanp, hlen, 1658 DM_NO_TOKEN, &eventset, 1659 DM_EVENT_MAX); 1660 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 1661 1662 /* Variation clean up */ 1663 rc = dm_destroy_session(newsid); 1664 if (rc == -1) { 1665 DMLOG_PRINT(DMLVL_DEBUG, 1666 "Unable to clean up variation! (errno = %d)\n", 1667 errno); 1668 } 1669 dm_handle_free(hanp, hlen); 1670 } 1671 } 1672 1673 /* 1674 * TEST : dm_set_eventlist - invalid hanp 1675 * EXPECTED: rc = -1, errno = EFAULT 1676 */ 1677 if (DMVAR_EXEC(SET_EVENTLIST_BASE + 3)) { 1678 dm_sessid_t newsid; 1679 void *hanp; 1680 size_t hlen; 1681 dm_eventset_t eventset = minEvents; 1682 1683 /* Variation set up */ 1684 if ((rc = 1685 dm_create_session(DM_NO_SESSION, szSessionInfo, 1686 &newsid)) == -1) { 1687 /* No clean up */ 1688 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1689 == -1) { 1690 dm_destroy_session(newsid); 1691 } 1692 if (rc == -1) { 1693 DMLOG_PRINT(DMLVL_DEBUG, 1694 "Unable to set up variation! (errno = %d)\n", 1695 errno); 1696 DMVAR_SKIP(); 1697 } else { 1698 /* Variation */ 1699 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n", 1700 szFuncName); 1701 rc = dm_set_eventlist(newsid, (void *)INVALID_ADDR, 1702 hlen, DM_NO_TOKEN, &eventset, 1703 DM_EVENT_MAX); 1704 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 1705 1706 /* Variation clean up */ 1707 rc = dm_destroy_session(newsid); 1708 if (rc == -1) { 1709 DMLOG_PRINT(DMLVL_DEBUG, 1710 "Unable to clean up variation! (errno = %d)\n", 1711 errno); 1712 } 1713 dm_handle_free(hanp, hlen); 1714 } 1715 } 1716 1717 /* 1718 * TEST : dm_set_eventlist - invalid hlen 1719 * EXPECTED: rc = -1, errno = EBADF 1720 */ 1721 if (DMVAR_EXEC(SET_EVENTLIST_BASE + 4)) { 1722 dm_sessid_t newsid; 1723 void *hanp; 1724 size_t hlen; 1725 dm_eventset_t eventset = minEvents; 1726 1727 /* Variation set up */ 1728 if ((rc = 1729 dm_create_session(DM_NO_SESSION, szSessionInfo, 1730 &newsid)) == -1) { 1731 /* No clean up */ 1732 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1733 == -1) { 1734 dm_destroy_session(newsid); 1735 } 1736 if (rc == -1) { 1737 DMLOG_PRINT(DMLVL_DEBUG, 1738 "Unable to set up variation! (errno = %d)\n", 1739 errno); 1740 DMVAR_SKIP(); 1741 } else { 1742 /* Variation */ 1743 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n", 1744 szFuncName); 1745 rc = dm_set_eventlist(newsid, hanp, INVALID_ADDR, 1746 DM_NO_TOKEN, &eventset, 1747 DM_EVENT_MAX); 1748 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF); 1749 1750 /* Variation clean up */ 1751 rc = dm_destroy_session(newsid); 1752 if (rc == -1) { 1753 DMLOG_PRINT(DMLVL_DEBUG, 1754 "Unable to clean up variation! (errno = %d)\n", 1755 errno); 1756 } 1757 dm_handle_free(hanp, hlen); 1758 } 1759 } 1760 1761 /* 1762 * TEST : dm_set_eventlist - invalid token 1763 * EXPECTED: rc = -1, errno = EINVAL 1764 */ 1765 if (DMVAR_EXEC(SET_EVENTLIST_BASE + 5)) { 1766 dm_sessid_t newsid; 1767 void *hanp; 1768 size_t hlen; 1769 dm_eventset_t eventset = minEvents; 1770 1771 /* Variation set up */ 1772 if ((rc = 1773 dm_create_session(DM_NO_SESSION, szSessionInfo, 1774 &newsid)) == -1) { 1775 /* No clean up */ 1776 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1777 == -1) { 1778 dm_destroy_session(newsid); 1779 } 1780 if (rc == -1) { 1781 DMLOG_PRINT(DMLVL_DEBUG, 1782 "Unable to set up variation! (errno = %d)\n", 1783 errno); 1784 DMVAR_SKIP(); 1785 } else { 1786 /* Variation */ 1787 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n", 1788 szFuncName); 1789 rc = dm_set_eventlist(newsid, hanp, hlen, INVALID_ADDR, 1790 &eventset, DM_EVENT_MAX); 1791 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 1792 1793 /* Variation clean up */ 1794 rc = dm_destroy_session(newsid); 1795 if (rc == -1) { 1796 DMLOG_PRINT(DMLVL_DEBUG, 1797 "Unable to clean up variation! (errno = %d)\n", 1798 errno); 1799 } 1800 dm_handle_free(hanp, hlen); 1801 } 1802 } 1803 1804 /* 1805 * TEST : dm_set_eventlist - invalid eventsetp 1806 * EXPECTED: rc = -1, errno = EFAULT 1807 */ 1808 if (DMVAR_EXEC(SET_EVENTLIST_BASE + 6)) { 1809 dm_sessid_t newsid; 1810 void *hanp; 1811 size_t hlen; 1812 1813 /* Variation set up */ 1814 if ((rc = 1815 dm_create_session(DM_NO_SESSION, szSessionInfo, 1816 &newsid)) == -1) { 1817 /* No clean up */ 1818 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1819 == -1) { 1820 dm_destroy_session(newsid); 1821 } 1822 if (rc == -1) { 1823 DMLOG_PRINT(DMLVL_DEBUG, 1824 "Unable to set up variation! (errno = %d)\n", 1825 errno); 1826 DMVAR_SKIP(); 1827 } else { 1828 /* Variation */ 1829 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid eventsetp)\n", 1830 szFuncName); 1831 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 1832 (dm_eventset_t *) INVALID_ADDR, 1833 DM_EVENT_MAX); 1834 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 1835 1836 /* Variation clean up */ 1837 rc = dm_destroy_session(newsid); 1838 if (rc == -1) { 1839 DMLOG_PRINT(DMLVL_DEBUG, 1840 "Unable to clean up variation! (errno = %d)\n", 1841 errno); 1842 } 1843 dm_handle_free(hanp, hlen); 1844 } 1845 } 1846 1847 /* 1848 * TEST : dm_set_eventlist - invalid maxevent 1849 * EXPECTED: rc = -1, errno = EINVAL 1850 */ 1851 if (DMVAR_EXEC(SET_EVENTLIST_BASE + 7)) { 1852 dm_sessid_t newsid; 1853 void *hanp; 1854 size_t hlen; 1855 dm_eventset_t eventset = minEvents; 1856 1857 /* Variation set up */ 1858 if ((rc = 1859 dm_create_session(DM_NO_SESSION, szSessionInfo, 1860 &newsid)) == -1) { 1861 /* No clean up */ 1862 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1863 == -1) { 1864 dm_destroy_session(newsid); 1865 } 1866 if (rc == -1) { 1867 DMLOG_PRINT(DMLVL_DEBUG, 1868 "Unable to set up variation! (errno = %d)\n", 1869 errno); 1870 DMVAR_SKIP(); 1871 } else { 1872 /* Variation */ 1873 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid maxevent)\n", 1874 szFuncName); 1875 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 1876 &eventset, DM_EVENT_MAX + 1); 1877 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 1878 1879 /* Variation clean up */ 1880 rc = dm_destroy_session(newsid); 1881 if (rc == -1) { 1882 DMLOG_PRINT(DMLVL_DEBUG, 1883 "Unable to clean up variation! (errno = %d)\n", 1884 errno); 1885 } 1886 dm_handle_free(hanp, hlen); 1887 } 1888 } 1889 1890 /* 1891 * TEST : dm_set_eventlist - maxevent < high set event 1892 * EXPECTED: rc = 0 1893 */ 1894 if (DMVAR_EXEC(SET_EVENTLIST_BASE + 8)) { 1895 dm_sessid_t newsid; 1896 void *hanp; 1897 size_t hlen; 1898 dm_eventset_t eventset; 1899 u_int nelem; 1900 1901 /* Variation set up */ 1902 DMEV_ZERO(eventset); 1903 DMEV_SET(DM_EVENT_ATTRIBUTE, eventset); 1904 if ((rc = 1905 dm_create_session(DM_NO_SESSION, szSessionInfo, 1906 &newsid)) == -1) { 1907 /* No clean up */ 1908 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1909 == -1) { 1910 dm_destroy_session(newsid); 1911 } else 1912 if ((rc = 1913 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 1914 &eventset, DM_EVENT_MAX)) == -1) { 1915 dm_handle_free(hanp, hlen); 1916 dm_destroy_session(newsid); 1917 } 1918 if (rc == -1) { 1919 DMLOG_PRINT(DMLVL_DEBUG, 1920 "Unable to set up variation! (errno = %d)\n", 1921 errno); 1922 DMVAR_SKIP(); 1923 } else { 1924 /* Variation */ 1925 eventset = minEvents; 1926 DMLOG_PRINT(DMLVL_DEBUG, 1927 "%s(maxevent < high set event)\n", 1928 szFuncName); 1929 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 1930 &eventset, DM_EVENT_ATTRIBUTE); 1931 if (rc == 0) { 1932 if ((dm_get_eventlist 1933 (newsid, hanp, hlen, DM_NO_TOKEN, 1934 DM_EVENT_MAX, &eventset, &nelem) == 0) 1935 && (nelem == DM_EVENT_ATTRIBUTE + 1) 1936 && 1937 (DMEV_ISSET(DM_EVENT_ATTRIBUTE, eventset))) 1938 { 1939 DMLOG_PRINT(DMLVL_DEBUG, 1940 "%s passed with expected rc = %d\n", 1941 szFuncName, 0); 1942 DMVAR_PASS(); 1943 } else { 1944 DMLOG_PRINT(DMLVL_ERR, 1945 "%s failed with expected rc = %d but high set event cleared\n", 1946 szFuncName, 0); 1947 DMVAR_FAIL(); 1948 } 1949 } else { 1950 DMLOG_PRINT(DMLVL_ERR, 1951 "%s failed with unexpected rc = %d (errno = %d)\n", 1952 szFuncName, rc, errno); 1953 DMVAR_FAIL(); 1954 } 1955 1956 /* Variation clean up */ 1957 rc = dm_destroy_session(newsid); 1958 if (rc == -1) { 1959 DMLOG_PRINT(DMLVL_DEBUG, 1960 "Unable to clean up variation! (errno = %d)\n", 1961 errno); 1962 } 1963 dm_handle_free(hanp, hlen); 1964 } 1965 } 1966 1967 /* 1968 * TEST : dm_set_eventlist - maxevent > high set event 1969 * EXPECTED: rc = 0 1970 */ 1971 if (DMVAR_EXEC(SET_EVENTLIST_BASE + 9)) { 1972 dm_sessid_t newsid; 1973 void *hanp; 1974 size_t hlen; 1975 dm_eventset_t eventset; 1976 u_int nelem; 1977 1978 /* Variation set up */ 1979 DMEV_ZERO(eventset); 1980 DMEV_SET(DM_EVENT_ATTRIBUTE, eventset); 1981 if ((rc = 1982 dm_create_session(DM_NO_SESSION, szSessionInfo, 1983 &newsid)) == -1) { 1984 /* No clean up */ 1985 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 1986 == -1) { 1987 dm_destroy_session(newsid); 1988 } else 1989 if ((rc = 1990 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 1991 &eventset, DM_EVENT_MAX)) == -1) { 1992 dm_handle_free(hanp, hlen); 1993 dm_destroy_session(newsid); 1994 } 1995 if (rc == -1) { 1996 DMLOG_PRINT(DMLVL_DEBUG, 1997 "Unable to set up variation! (errno = %d)\n", 1998 errno); 1999 DMVAR_SKIP(); 2000 } else { 2001 /* Variation */ 2002 eventset = minEvents; 2003 DMLOG_PRINT(DMLVL_DEBUG, 2004 "%s(maxevent > high set event)\n", 2005 szFuncName); 2006 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2007 &eventset, DM_EVENT_MAX); 2008 if (rc == 0) { 2009 if ((dm_get_eventlist 2010 (newsid, hanp, hlen, DM_NO_TOKEN, 2011 DM_EVENT_MAX, &eventset, &nelem) == 0) 2012 && (nelem == DM_EVENT_UNMOUNT + 1) 2013 && 2014 (!DMEV_ISSET(DM_EVENT_ATTRIBUTE, eventset))) 2015 { 2016 DMLOG_PRINT(DMLVL_DEBUG, 2017 "%s passed with expected rc = %d\n", 2018 szFuncName, 0); 2019 DMVAR_PASS(); 2020 } else { 2021 DMLOG_PRINT(DMLVL_ERR, 2022 "%s failed with expected rc = %d but high set event still set\n", 2023 szFuncName, 0); 2024 DMVAR_FAIL(); 2025 } 2026 } else { 2027 DMLOG_PRINT(DMLVL_ERR, 2028 "%s failed with unexpected rc = %d (errno = %d)\n", 2029 szFuncName, rc, errno); 2030 DMVAR_FAIL(); 2031 } 2032 2033 /* Variation clean up */ 2034 rc = dm_destroy_session(newsid); 2035 if (rc == -1) { 2036 DMLOG_PRINT(DMLVL_DEBUG, 2037 "Unable to clean up variation! (errno = %d)\n", 2038 errno); 2039 } 2040 dm_handle_free(hanp, hlen); 2041 } 2042 } 2043 2044 /* 2045 * Global handle dm_set_eventlist variations 2046 * 2047 * This variation uncovered XFS BUG #15 (EBADF errno returned instead 2048 * of EINVAL) 2049 */ 2050 for (i = 0, varNum = SET_EVENTLIST_BASE + 10; i < DM_EVENT_MAX; 2051 i++, varNum++) { 2052 if (DMVAR_EXEC(varNum)) { 2053 dm_sessid_t newsid; 2054 dm_eventset_t eventset; 2055 2056 /* Variation set up */ 2057 DMEV_ZERO(eventset); 2058 DMEV_SET(i, eventset); 2059 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, 2060 &newsid); 2061 if (rc == -1) { 2062 DMLOG_PRINT(DMLVL_DEBUG, 2063 "Unable to set up variation! (errno = %d)\n", 2064 errno); 2065 DMVAR_SKIP(); 2066 } else { 2067 /* Variation */ 2068 DMLOG_PRINT(DMLVL_DEBUG, 2069 "%s(global handle, %s)\n", 2070 szFuncName, 2071 dmimpl_validEvents[i].name); 2072 rc = dm_set_eventlist(newsid, DM_GLOBAL_HANP, 2073 DM_GLOBAL_HLEN, 2074 DM_NO_TOKEN, &eventset, 2075 DM_EVENT_MAX); 2076 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 2077 2078 /* Variation clean up */ 2079 rc = dm_destroy_session(newsid); 2080 if (rc == -1) { 2081 DMLOG_PRINT(DMLVL_DEBUG, 2082 "Unable to clean up variation! (errno = %d)\n", 2083 errno); 2084 } 2085 } 2086 } 2087 } 2088 2089 /* 2090 * File system handle dm_set_eventlist variations 2091 */ 2092 for (i = 0; i < DM_EVENT_MAX; i++, varNum++) { 2093 if (DMVAR_EXEC(varNum)) { 2094 dm_sessid_t newsid; 2095 void *hanp; 2096 size_t hlen; 2097 dm_eventset_t eventset; 2098 2099 /* Variation set up */ 2100 DMEV_ZERO(eventset); 2101 DMEV_SET(i, eventset); 2102 if ((rc = 2103 dm_create_session(DM_NO_SESSION, szSessionInfo, 2104 &newsid)) == -1) { 2105 /* No clean up */ 2106 } else 2107 if ((rc = 2108 dm_path_to_fshandle(DummyFile, &hanp, 2109 &hlen)) == -1) { 2110 dm_destroy_session(newsid); 2111 } 2112 if (rc == -1) { 2113 DMLOG_PRINT(DMLVL_DEBUG, 2114 "Unable to set up variation! (errno = %d)\n", 2115 errno); 2116 DMVAR_SKIP(); 2117 } else { 2118 /* Variation */ 2119 DMLOG_PRINT(DMLVL_DEBUG, "%s(fs handle, %s)\n", 2120 szFuncName, 2121 dmimpl_validEvents[i].name); 2122 rc = dm_set_eventlist(newsid, hanp, hlen, 2123 DM_NO_TOKEN, &eventset, 2124 DM_EVENT_MAX); 2125 if (dmimpl_validEvents[i].bFSHandle) 2126 DMVAR_ENDPASSEXP(szFuncName, 0, rc); 2127 else 2128 DMVAR_ENDFAILEXP(szFuncName, -1, rc, 2129 EINVAL); 2130 2131 /* Variation clean up */ 2132 rc = dm_destroy_session(newsid); 2133 if (rc == -1) { 2134 DMLOG_PRINT(DMLVL_DEBUG, 2135 "Unable to clean up variation! (errno = %d)\n", 2136 errno); 2137 } 2138 dm_handle_free(hanp, hlen); 2139 } 2140 } 2141 } 2142 2143 /* 2144 * Directory handle dm_set_eventlist variations 2145 */ 2146 for (i = 0; i < DM_EVENT_MAX; i++, varNum++) { 2147 if (DMVAR_EXEC(varNum)) { 2148 dm_sessid_t newsid; 2149 void *hanp; 2150 size_t hlen; 2151 dm_eventset_t eventset; 2152 2153 /* Variation set up */ 2154 DMEV_ZERO(eventset); 2155 DMEV_SET(i, eventset); 2156 if ((rc = 2157 dm_create_session(DM_NO_SESSION, szSessionInfo, 2158 &newsid)) == -1) { 2159 /* No clean up */ 2160 } else 2161 if ((rc = 2162 dm_path_to_handle(DummySubdir, &hanp, 2163 &hlen)) == -1) { 2164 dm_destroy_session(newsid); 2165 } 2166 if (rc == -1) { 2167 DMLOG_PRINT(DMLVL_DEBUG, 2168 "Unable to set up variation! (errno = %d)\n", 2169 errno); 2170 DMVAR_SKIP(); 2171 } else { 2172 /* Variation */ 2173 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir handle, %s)\n", 2174 szFuncName, 2175 dmimpl_validEvents[i].name); 2176 rc = dm_set_eventlist(newsid, hanp, hlen, 2177 DM_NO_TOKEN, &eventset, 2178 DM_EVENT_MAX); 2179 if (dmimpl_validEvents[i].bDirHandle) 2180 DMVAR_ENDPASSEXP(szFuncName, 0, rc); 2181 else 2182 DMVAR_ENDFAILEXP(szFuncName, -1, rc, 2183 EINVAL); 2184 2185 /* Variation clean up */ 2186 rc = dm_destroy_session(newsid); 2187 if (rc == -1) { 2188 DMLOG_PRINT(DMLVL_DEBUG, 2189 "Unable to clean up variation! (errno = %d)\n", 2190 errno); 2191 } 2192 dm_handle_free(hanp, hlen); 2193 } 2194 } 2195 } 2196 2197 /* 2198 * File handle dm_set_eventlist variations 2199 */ 2200 for (i = 0; i < DM_EVENT_MAX; i++, varNum++) { 2201 if (DMVAR_EXEC(varNum)) { 2202 dm_sessid_t newsid; 2203 void *hanp; 2204 size_t hlen; 2205 dm_eventset_t eventset; 2206 2207 /* Variation set up */ 2208 DMEV_ZERO(eventset); 2209 DMEV_SET(i, eventset); 2210 if ((rc = 2211 dm_create_session(DM_NO_SESSION, szSessionInfo, 2212 &newsid)) == -1) { 2213 /* No clean up */ 2214 } else 2215 if ((rc = 2216 dm_path_to_handle(DummyFile, &hanp, 2217 &hlen)) == -1) { 2218 dm_destroy_session(newsid); 2219 } 2220 if (rc == -1) { 2221 DMLOG_PRINT(DMLVL_DEBUG, 2222 "Unable to set up variation! (errno = %d)\n", 2223 errno); 2224 DMVAR_SKIP(); 2225 } else { 2226 /* Variation */ 2227 DMLOG_PRINT(DMLVL_DEBUG, 2228 "%s(file handle, %s)\n", szFuncName, 2229 dmimpl_validEvents[i].name); 2230 rc = dm_set_eventlist(newsid, hanp, hlen, 2231 DM_NO_TOKEN, &eventset, 2232 DM_EVENT_MAX); 2233 if (dmimpl_validEvents[i].bFileHandle) 2234 DMVAR_ENDPASSEXP(szFuncName, 0, rc); 2235 else 2236 DMVAR_ENDFAILEXP(szFuncName, -1, rc, 2237 EINVAL); 2238 2239 /* Variation clean up */ 2240 rc = dm_destroy_session(newsid); 2241 if (rc == -1) { 2242 DMLOG_PRINT(DMLVL_DEBUG, 2243 "Unable to clean up variation! (errno = %d)\n", 2244 errno); 2245 } 2246 dm_handle_free(hanp, hlen); 2247 } 2248 } 2249 } 2250 2251 szFuncName = "dm_get_eventlist"; 2252 2253 /* 2254 * TEST : dm_get_eventlist - DM_NO_SESSION sid 2255 * EXPECTED: rc = -1, errno = EINVAL 2256 */ 2257 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 1)) { 2258 dm_sessid_t newsid; 2259 void *hanp; 2260 size_t hlen; 2261 dm_eventset_t ineventset, outeventset; 2262 u_int nelem; 2263 2264 /* Variation set up */ 2265 DMEV_ZERO(ineventset); 2266 DMEV_ZERO(outeventset); 2267 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 2268 if ((rc = 2269 dm_create_session(DM_NO_SESSION, szSessionInfo, 2270 &newsid)) == -1) { 2271 /* No clean up */ 2272 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 2273 == -1) { 2274 dm_destroy_session(newsid); 2275 } else 2276 if ((rc = 2277 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2278 &ineventset, DM_EVENT_MAX)) == -1) { 2279 dm_handle_free(hanp, hlen); 2280 dm_destroy_session(newsid); 2281 } 2282 if (rc == -1) { 2283 DMLOG_PRINT(DMLVL_DEBUG, 2284 "Unable to set up variation! (errno = %d)\n", 2285 errno); 2286 DMVAR_SKIP(); 2287 } else { 2288 /* Variation */ 2289 DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION sid)\n", 2290 szFuncName); 2291 rc = dm_get_eventlist(DM_NO_SESSION, hanp, hlen, 2292 DM_NO_TOKEN, DM_EVENT_MAX, 2293 &outeventset, &nelem); 2294 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 2295 2296 /* Variation clean up */ 2297 DMEV_ZERO(ineventset); 2298 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2299 &ineventset, DM_EVENT_MAX); 2300 rc |= dm_destroy_session(newsid); 2301 if (rc == -1) { 2302 DMLOG_PRINT(DMLVL_DEBUG, 2303 "Unable to clean up variation! (errno = %d)\n", 2304 errno); 2305 } 2306 dm_handle_free(hanp, hlen); 2307 } 2308 } 2309 2310 /* 2311 * TEST : dm_get_eventlist - invalid sid 2312 * EXPECTED: rc = -1, errno = EINVAL 2313 */ 2314 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 2)) { 2315 dm_sessid_t newsid; 2316 void *hanp; 2317 size_t hlen; 2318 dm_eventset_t ineventset, outeventset; 2319 u_int nelem; 2320 2321 /* Variation set up */ 2322 DMEV_ZERO(ineventset); 2323 DMEV_ZERO(outeventset); 2324 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 2325 if ((rc = 2326 dm_create_session(DM_NO_SESSION, szSessionInfo, 2327 &newsid)) == -1) { 2328 /* No clean up */ 2329 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 2330 == -1) { 2331 dm_destroy_session(newsid); 2332 } else 2333 if ((rc = 2334 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2335 &ineventset, DM_EVENT_MAX)) == -1) { 2336 dm_handle_free(hanp, hlen); 2337 dm_destroy_session(newsid); 2338 } 2339 if (rc == -1) { 2340 DMLOG_PRINT(DMLVL_DEBUG, 2341 "Unable to set up variation! (errno = %d)\n", 2342 errno); 2343 DMVAR_SKIP(); 2344 } else { 2345 /* Variation */ 2346 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", 2347 szFuncName); 2348 rc = dm_get_eventlist(INVALID_ADDR, hanp, hlen, 2349 DM_NO_TOKEN, DM_EVENT_MAX, 2350 &outeventset, &nelem); 2351 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 2352 2353 /* Variation clean up */ 2354 DMEV_ZERO(ineventset); 2355 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2356 &ineventset, DM_EVENT_MAX); 2357 rc |= dm_destroy_session(newsid); 2358 if (rc == -1) { 2359 DMLOG_PRINT(DMLVL_DEBUG, 2360 "Unable to clean up variation! (errno = %d)\n", 2361 errno); 2362 } 2363 dm_handle_free(hanp, hlen); 2364 } 2365 } 2366 2367 /* 2368 * TEST : dm_get_eventlist - invalid hanp 2369 * EXPECTED: rc = -1, errno = EFAULT 2370 */ 2371 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 3)) { 2372 dm_sessid_t newsid; 2373 void *hanp; 2374 size_t hlen; 2375 dm_eventset_t ineventset, outeventset; 2376 u_int nelem; 2377 2378 /* Variation set up */ 2379 DMEV_ZERO(ineventset); 2380 DMEV_ZERO(outeventset); 2381 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 2382 if ((rc = 2383 dm_create_session(DM_NO_SESSION, szSessionInfo, 2384 &newsid)) == -1) { 2385 /* No clean up */ 2386 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 2387 == -1) { 2388 dm_destroy_session(newsid); 2389 } else 2390 if ((rc = 2391 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2392 &ineventset, DM_EVENT_MAX)) == -1) { 2393 dm_handle_free(hanp, hlen); 2394 dm_destroy_session(newsid); 2395 } 2396 if (rc == -1) { 2397 DMLOG_PRINT(DMLVL_DEBUG, 2398 "Unable to set up variation! (errno = %d)\n", 2399 errno); 2400 DMVAR_SKIP(); 2401 } else { 2402 /* Variation */ 2403 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hanp)\n", 2404 szFuncName); 2405 rc = dm_get_eventlist(newsid, (void *)INVALID_ADDR, 2406 hlen, DM_NO_TOKEN, DM_EVENT_MAX, 2407 &outeventset, &nelem); 2408 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 2409 2410 /* Variation clean up */ 2411 DMEV_ZERO(ineventset); 2412 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2413 &ineventset, DM_EVENT_MAX); 2414 rc |= dm_destroy_session(newsid); 2415 if (rc == -1) { 2416 DMLOG_PRINT(DMLVL_DEBUG, 2417 "Unable to clean up variation! (errno = %d)\n", 2418 errno); 2419 } 2420 dm_handle_free(hanp, hlen); 2421 } 2422 } 2423 2424 /* 2425 * TEST : dm_get_eventlist - invalid hlen 2426 * EXPECTED: rc = -1, errno = EBADF 2427 */ 2428 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 4)) { 2429 dm_sessid_t newsid; 2430 void *hanp; 2431 size_t hlen; 2432 dm_eventset_t ineventset, outeventset; 2433 u_int nelem; 2434 2435 /* Variation set up */ 2436 DMEV_ZERO(ineventset); 2437 DMEV_ZERO(outeventset); 2438 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 2439 if ((rc = 2440 dm_create_session(DM_NO_SESSION, szSessionInfo, 2441 &newsid)) == -1) { 2442 /* No clean up */ 2443 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 2444 == -1) { 2445 dm_destroy_session(newsid); 2446 } else 2447 if ((rc = 2448 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2449 &ineventset, DM_EVENT_MAX)) == -1) { 2450 dm_handle_free(hanp, hlen); 2451 dm_destroy_session(newsid); 2452 } 2453 if (rc == -1) { 2454 DMLOG_PRINT(DMLVL_DEBUG, 2455 "Unable to set up variation! (errno = %d)\n", 2456 errno); 2457 DMVAR_SKIP(); 2458 } else { 2459 /* Variation */ 2460 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid hlen)\n", 2461 szFuncName); 2462 rc = dm_get_eventlist(newsid, hanp, INVALID_ADDR, 2463 DM_NO_TOKEN, DM_EVENT_MAX, 2464 &outeventset, &nelem); 2465 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF); 2466 2467 /* Variation clean up */ 2468 DMEV_ZERO(ineventset); 2469 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2470 &ineventset, DM_EVENT_MAX); 2471 rc |= dm_destroy_session(newsid); 2472 if (rc == -1) { 2473 DMLOG_PRINT(DMLVL_DEBUG, 2474 "Unable to clean up variation! (errno = %d)\n", 2475 errno); 2476 } 2477 dm_handle_free(hanp, hlen); 2478 } 2479 } 2480 2481 /* 2482 * TEST : dm_get_eventlist - invalid token 2483 * EXPECTED: rc = -1, errno = EINVAL 2484 */ 2485 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 5)) { 2486 dm_sessid_t newsid; 2487 void *hanp; 2488 size_t hlen; 2489 dm_eventset_t ineventset, outeventset; 2490 u_int nelem; 2491 2492 /* Variation set up */ 2493 DMEV_ZERO(ineventset); 2494 DMEV_ZERO(outeventset); 2495 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 2496 if ((rc = 2497 dm_create_session(DM_NO_SESSION, szSessionInfo, 2498 &newsid)) == -1) { 2499 /* No clean up */ 2500 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 2501 == -1) { 2502 dm_destroy_session(newsid); 2503 } else 2504 if ((rc = 2505 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2506 &ineventset, DM_EVENT_MAX)) == -1) { 2507 dm_handle_free(hanp, hlen); 2508 dm_destroy_session(newsid); 2509 } 2510 if (rc == -1) { 2511 DMLOG_PRINT(DMLVL_DEBUG, 2512 "Unable to set up variation! (errno = %d)\n", 2513 errno); 2514 DMVAR_SKIP(); 2515 } else { 2516 /* Variation */ 2517 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid token)\n", 2518 szFuncName); 2519 rc = dm_get_eventlist(newsid, hanp, hlen, INVALID_ADDR, 2520 DM_EVENT_MAX, &outeventset, 2521 &nelem); 2522 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 2523 2524 /* Variation clean up */ 2525 DMEV_ZERO(ineventset); 2526 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2527 &ineventset, DM_EVENT_MAX); 2528 rc |= dm_destroy_session(newsid); 2529 if (rc == -1) { 2530 DMLOG_PRINT(DMLVL_DEBUG, 2531 "Unable to clean up variation! (errno = %d)\n", 2532 errno); 2533 } 2534 dm_handle_free(hanp, hlen); 2535 } 2536 } 2537 2538 /* 2539 * TEST : dm_get_eventlist - directory handle 2540 * EXPECTED: rc = -1, errno = EINVAL 2541 * 2542 * This variation uncovered XFS BUG #16 (0 returned instead of -1 and 2543 * errno EINVAL) 2544 */ 2545 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 6)) { 2546 dm_sessid_t newsid; 2547 void *hanp; 2548 size_t hlen; 2549 dm_eventset_t ineventset, outeventset; 2550 u_int nelem; 2551 2552 /* Variation set up */ 2553 DMEV_ZERO(ineventset); 2554 DMEV_ZERO(outeventset); 2555 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 2556 if ((rc = 2557 dm_create_session(DM_NO_SESSION, szSessionInfo, 2558 &newsid)) == -1) { 2559 /* No clean up */ 2560 } else if ((rc = dm_path_to_handle(DummySubdir, &hanp, &hlen)) 2561 == -1) { 2562 dm_destroy_session(newsid); 2563 } else 2564 if ((rc = 2565 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2566 &ineventset, DM_EVENT_MAX)) == -1) { 2567 dm_handle_free(hanp, hlen); 2568 dm_destroy_session(newsid); 2569 } 2570 if (rc == -1) { 2571 DMLOG_PRINT(DMLVL_DEBUG, 2572 "Unable to set up variation! (errno = %d)\n", 2573 errno); 2574 DMVAR_SKIP(); 2575 } else { 2576 /* Variation */ 2577 DMLOG_PRINT(DMLVL_DEBUG, "%s(dir handle)\n", 2578 szFuncName); 2579 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2580 DM_EVENT_MAX, &outeventset, 2581 &nelem); 2582 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 2583 2584 /* Variation clean up */ 2585 DMEV_ZERO(ineventset); 2586 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2587 &ineventset, DM_EVENT_MAX); 2588 rc |= dm_destroy_session(newsid); 2589 if (rc == -1) { 2590 DMLOG_PRINT(DMLVL_DEBUG, 2591 "Unable to clean up variation! (errno = %d)\n", 2592 errno); 2593 } 2594 dm_handle_free(hanp, hlen); 2595 } 2596 } 2597 2598 /* 2599 * TEST : dm_get_eventlist - invalid nelem, fs handle 2600 * EXPECTED: rc = -1, errno = E2BIG 2601 * 2602 * This variation uncovered XFS BUG #17 (EINVAL errno returned instead 2603 * of E2BIG, nelemp not updated) 2604 */ 2605 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 7)) { 2606 dm_sessid_t newsid; 2607 void *hanp; 2608 size_t hlen; 2609 dm_eventset_t ineventset, outeventset; 2610 u_int nelem; 2611 2612 /* Variation set up */ 2613 DMEV_ZERO(ineventset); 2614 DMEV_ZERO(outeventset); 2615 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 2616 if ((rc = 2617 dm_create_session(DM_NO_SESSION, szSessionInfo, 2618 &newsid)) == -1) { 2619 /* No clean up */ 2620 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 2621 == -1) { 2622 dm_destroy_session(newsid); 2623 } else 2624 if ((rc = 2625 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2626 &ineventset, DM_EVENT_MAX)) == -1) { 2627 dm_handle_free(hanp, hlen); 2628 dm_destroy_session(newsid); 2629 } 2630 if (rc == -1) { 2631 DMLOG_PRINT(DMLVL_DEBUG, 2632 "Unable to set up variation! (errno = %d)\n", 2633 errno); 2634 DMVAR_SKIP(); 2635 } else { 2636 /* Variation */ 2637 DMLOG_PRINT(DMLVL_DEBUG, 2638 "%s(invalid nelem, fs handle)\n", 2639 szFuncName); 2640 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2641 0, &outeventset, &nelem); 2642 if (rc == -1) { 2643 if (errno == E2BIG) { 2644 if (nelem == DM_EVENT_ATTRIBUTE + 1) { 2645 DMLOG_PRINT(DMLVL_DEBUG, 2646 "%s passed with expected rc = %d and expected errno = %d (nelem = %d)\n", 2647 szFuncName, rc, 2648 errno, nelem); 2649 DMVAR_PASS(); 2650 } else { 2651 DMLOG_PRINT(DMLVL_ERR, 2652 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 2653 szFuncName, rc, 2654 nelem, 2655 DM_EVENT_ATTRIBUTE + 2656 1); 2657 DMVAR_FAIL(); 2658 } 2659 } else { 2660 DMLOG_PRINT(DMLVL_ERR, 2661 "%s failed with expected rc = %d but unexpected errno = %d\n", 2662 szFuncName, rc, errno); 2663 DMVAR_FAIL(); 2664 } 2665 } else { 2666 DMLOG_PRINT(DMLVL_ERR, 2667 "%s failed with unexpected rc = %d\n", 2668 szFuncName, rc); 2669 DMVAR_FAIL(); 2670 } 2671 2672 /* Variation clean up */ 2673 DMEV_ZERO(ineventset); 2674 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2675 &ineventset, DM_EVENT_MAX); 2676 rc |= dm_destroy_session(newsid); 2677 if (rc == -1) { 2678 DMLOG_PRINT(DMLVL_DEBUG, 2679 "Unable to clean up variation! (errno = %d)\n", 2680 errno); 2681 } 2682 dm_handle_free(hanp, hlen); 2683 } 2684 } 2685 2686 /* 2687 * TEST : dm_get_eventlist - invalid nelem, file handle 2688 * EXPECTED: rc = -1, errno = E2BIG 2689 */ 2690 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 8)) { 2691 dm_sessid_t newsid; 2692 void *hanp; 2693 size_t hlen; 2694 dm_eventset_t ineventset, outeventset; 2695 u_int nelem; 2696 2697 /* Variation set up */ 2698 DMEV_ZERO(ineventset); 2699 DMEV_ZERO(outeventset); 2700 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 2701 if ((rc = 2702 dm_create_session(DM_NO_SESSION, szSessionInfo, 2703 &newsid)) == -1) { 2704 /* No clean up */ 2705 } else if ((rc = dm_path_to_handle(DummyFile, &hanp, &hlen)) == 2706 -1) { 2707 dm_destroy_session(newsid); 2708 } else 2709 if ((rc = 2710 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2711 &ineventset, DM_EVENT_MAX)) == -1) { 2712 dm_handle_free(hanp, hlen); 2713 dm_destroy_session(newsid); 2714 } 2715 if (rc == -1) { 2716 DMLOG_PRINT(DMLVL_DEBUG, 2717 "Unable to set up variation! (errno = %d)\n", 2718 errno); 2719 DMVAR_SKIP(); 2720 } else { 2721 /* Variation */ 2722 DMLOG_PRINT(DMLVL_DEBUG, 2723 "%s(invalid nelem, file handle)\n", 2724 szFuncName); 2725 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2726 0, &outeventset, &nelem); 2727 if (rc == -1) { 2728 if (errno == E2BIG) { 2729 if (nelem == DM_EVENT_ATTRIBUTE + 1) { 2730 DMLOG_PRINT(DMLVL_DEBUG, 2731 "%s passed with expected rc = %d and expected errno = %d (nelem = %d)\n", 2732 szFuncName, rc, 2733 errno, nelem); 2734 DMVAR_PASS(); 2735 } else { 2736 DMLOG_PRINT(DMLVL_ERR, 2737 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 2738 szFuncName, rc, 2739 nelem, 2740 DM_EVENT_ATTRIBUTE + 2741 1); 2742 DMVAR_FAIL(); 2743 } 2744 } else { 2745 DMLOG_PRINT(DMLVL_ERR, 2746 "%s failed with expected rc = %d but unexpected errno = %d\n", 2747 szFuncName, rc, errno); 2748 DMVAR_FAIL(); 2749 } 2750 } else { 2751 DMLOG_PRINT(DMLVL_ERR, 2752 "%s failed with unexpected rc = %d\n", 2753 szFuncName, rc); 2754 DMVAR_FAIL(); 2755 } 2756 2757 /* Variation clean up */ 2758 DMEV_ZERO(ineventset); 2759 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2760 &ineventset, DM_EVENT_MAX); 2761 rc |= dm_destroy_session(newsid); 2762 if (rc == -1) { 2763 DMLOG_PRINT(DMLVL_DEBUG, 2764 "Unable to clean up variation! (errno = %d)\n", 2765 errno); 2766 } 2767 dm_handle_free(hanp, hlen); 2768 } 2769 } 2770 2771 /* 2772 * TEST : dm_get_eventlist - invalid eventsetp 2773 * EXPECTED: rc = -1, errno = EFAULT 2774 */ 2775 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 9)) { 2776 dm_sessid_t newsid; 2777 void *hanp; 2778 size_t hlen; 2779 dm_eventset_t ineventset, outeventset; 2780 u_int nelem; 2781 2782 /* Variation set up */ 2783 DMEV_ZERO(ineventset); 2784 DMEV_ZERO(outeventset); 2785 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 2786 if ((rc = 2787 dm_create_session(DM_NO_SESSION, szSessionInfo, 2788 &newsid)) == -1) { 2789 /* No clean up */ 2790 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 2791 == -1) { 2792 dm_destroy_session(newsid); 2793 } else 2794 if ((rc = 2795 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2796 &ineventset, DM_EVENT_MAX)) == -1) { 2797 dm_handle_free(hanp, hlen); 2798 dm_destroy_session(newsid); 2799 } 2800 if (rc == -1) { 2801 DMLOG_PRINT(DMLVL_DEBUG, 2802 "Unable to set up variation! (errno = %d)\n", 2803 errno); 2804 DMVAR_SKIP(); 2805 } else { 2806 /* Variation */ 2807 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid eventsetp)\n", 2808 szFuncName); 2809 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2810 DM_EVENT_MAX, 2811 (dm_eventset_t *) INVALID_ADDR, 2812 &nelem); 2813 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 2814 2815 /* Variation clean up */ 2816 DMEV_ZERO(ineventset); 2817 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2818 &ineventset, DM_EVENT_MAX); 2819 rc |= dm_destroy_session(newsid); 2820 if (rc == -1) { 2821 DMLOG_PRINT(DMLVL_DEBUG, 2822 "Unable to clean up variation! (errno = %d)\n", 2823 errno); 2824 } 2825 dm_handle_free(hanp, hlen); 2826 } 2827 } 2828 2829 /* 2830 * TEST : dm_get_eventlist - invalid nelemp 2831 * EXPECTED: rc = -1, errno = EFAULT 2832 */ 2833 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 10)) { 2834 dm_sessid_t newsid; 2835 void *hanp; 2836 size_t hlen; 2837 dm_eventset_t ineventset, outeventset; 2838 2839 /* Variation set up */ 2840 DMEV_ZERO(ineventset); 2841 DMEV_ZERO(outeventset); 2842 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 2843 if ((rc = 2844 dm_create_session(DM_NO_SESSION, szSessionInfo, 2845 &newsid)) == -1) { 2846 /* No clean up */ 2847 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 2848 == -1) { 2849 dm_destroy_session(newsid); 2850 } else 2851 if ((rc = 2852 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2853 &ineventset, DM_EVENT_MAX)) == -1) { 2854 dm_handle_free(hanp, hlen); 2855 dm_destroy_session(newsid); 2856 } 2857 if (rc == -1) { 2858 DMLOG_PRINT(DMLVL_DEBUG, 2859 "Unable to set up variation! (errno = %d)\n", 2860 errno); 2861 DMVAR_SKIP(); 2862 } else { 2863 /* Variation */ 2864 DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid nelemp)\n", 2865 szFuncName); 2866 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2867 DM_EVENT_MAX, &outeventset, 2868 (u_int *) INVALID_ADDR); 2869 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 2870 2871 /* Variation clean up */ 2872 DMEV_ZERO(ineventset); 2873 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2874 &ineventset, DM_EVENT_MAX); 2875 rc |= dm_destroy_session(newsid); 2876 if (rc == -1) { 2877 DMLOG_PRINT(DMLVL_DEBUG, 2878 "Unable to clean up variation! (errno = %d)\n", 2879 errno); 2880 } 2881 dm_handle_free(hanp, hlen); 2882 } 2883 } 2884 2885 /* 2886 * TEST : dm_get_eventlist - zero event, fs handle 2887 * EXPECTED: rc = 0 2888 */ 2889 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 11)) { 2890 dm_sessid_t newsid; 2891 void *hanp; 2892 size_t hlen; 2893 dm_eventset_t ineventset, outeventset; 2894 u_int nelem; 2895 2896 /* Variation set up */ 2897 DMEV_ZERO(ineventset); 2898 DMEV_ZERO(outeventset); 2899 if ((rc = 2900 dm_create_session(DM_NO_SESSION, szSessionInfo, 2901 &newsid)) == -1) { 2902 /* No clean up */ 2903 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 2904 == -1) { 2905 dm_destroy_session(newsid); 2906 } 2907 if (rc == -1) { 2908 DMLOG_PRINT(DMLVL_DEBUG, 2909 "Unable to set up variation! (errno = %d)\n", 2910 errno); 2911 DMVAR_SKIP(); 2912 } else { 2913 /* Variation */ 2914 DMLOG_PRINT(DMLVL_DEBUG, "%s(zero event, fs handle)\n", 2915 szFuncName); 2916 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2917 DM_EVENT_MAX, &outeventset, 2918 &nelem); 2919 if (rc == 0) { 2920 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 2921 if (nelem == 0) { 2922 if (memcmp 2923 (&ineventset, &outeventset, 2924 sizeof(dm_eventset_t)) == 0) { 2925 DMLOG_PRINT(DMLVL_DEBUG, 2926 "%s passed with expected rc = %d\n", 2927 szFuncName, 0); 2928 DMVAR_PASS(); 2929 } else { 2930 DMLOG_PRINT(DMLVL_ERR, 2931 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 2932 szFuncName, 0, 2933 ineventset, 2934 outeventset); 2935 DMVAR_FAIL(); 2936 } 2937 } else { 2938 DMLOG_PRINT(DMLVL_ERR, 2939 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 2940 szFuncName, 0, nelem, 0); 2941 DMVAR_FAIL(); 2942 } 2943 } else { 2944 DMLOG_PRINT(DMLVL_ERR, 2945 "%s failed with unexpected rc = %d (errno = %d)\n", 2946 szFuncName, rc, errno); 2947 DMVAR_FAIL(); 2948 } 2949 2950 /* Variation clean up */ 2951 rc = dm_destroy_session(newsid); 2952 if (rc == -1) { 2953 DMLOG_PRINT(DMLVL_DEBUG, 2954 "Unable to clean up variation! (errno = %d)\n", 2955 errno); 2956 } 2957 dm_handle_free(hanp, hlen); 2958 } 2959 } 2960 2961 /* 2962 * TEST : dm_get_eventlist - zero event, file handle 2963 * EXPECTED: rc = 0 2964 */ 2965 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 12)) { 2966 dm_sessid_t newsid; 2967 void *hanp; 2968 size_t hlen; 2969 dm_eventset_t ineventset, outeventset; 2970 u_int nelem; 2971 2972 /* Variation set up */ 2973 DMEV_ZERO(ineventset); 2974 DMEV_ZERO(outeventset); 2975 if ((rc = 2976 dm_create_session(DM_NO_SESSION, szSessionInfo, 2977 &newsid)) == -1) { 2978 /* No clean up */ 2979 } else if ((rc = dm_path_to_handle(DummyFile, &hanp, &hlen)) == 2980 -1) { 2981 dm_destroy_session(newsid); 2982 } 2983 if (rc == -1) { 2984 DMLOG_PRINT(DMLVL_DEBUG, 2985 "Unable to set up variation! (errno = %d)\n", 2986 errno); 2987 DMVAR_SKIP(); 2988 } else { 2989 /* Variation */ 2990 DMLOG_PRINT(DMLVL_DEBUG, 2991 "%s(zero event, file handle)\n", 2992 szFuncName); 2993 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 2994 DM_EVENT_MAX, &outeventset, 2995 &nelem); 2996 if (rc == 0) { 2997 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 2998 if (nelem == 0) { 2999 if (memcmp 3000 (&ineventset, &outeventset, 3001 sizeof(dm_eventset_t)) == 0) { 3002 DMLOG_PRINT(DMLVL_DEBUG, 3003 "%s passed with expected rc = %d\n", 3004 szFuncName, 0); 3005 DMVAR_PASS(); 3006 } else { 3007 DMLOG_PRINT(DMLVL_ERR, 3008 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 3009 szFuncName, 0, 3010 ineventset, 3011 outeventset); 3012 DMVAR_FAIL(); 3013 } 3014 } else { 3015 DMLOG_PRINT(DMLVL_ERR, 3016 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 3017 szFuncName, 0, nelem, 0); 3018 DMVAR_FAIL(); 3019 } 3020 } else { 3021 DMLOG_PRINT(DMLVL_ERR, 3022 "%s failed with unexpected rc = %d (errno = %d)\n", 3023 szFuncName, rc, errno); 3024 DMVAR_FAIL(); 3025 } 3026 3027 /* Variation clean up */ 3028 rc = dm_destroy_session(newsid); 3029 if (rc == -1) { 3030 DMLOG_PRINT(DMLVL_DEBUG, 3031 "Unable to clean up variation! (errno = %d)\n", 3032 errno); 3033 } 3034 dm_handle_free(hanp, hlen); 3035 } 3036 } 3037 3038 /* 3039 * TEST : dm_get_eventlist - one event, fs handle 3040 * EXPECTED: rc = 0 3041 */ 3042 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 13)) { 3043 dm_sessid_t newsid; 3044 void *hanp; 3045 size_t hlen; 3046 dm_eventset_t ineventset, outeventset; 3047 u_int nelem; 3048 3049 /* Variation set up */ 3050 DMEV_ZERO(ineventset); 3051 DMEV_ZERO(outeventset); 3052 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 3053 if ((rc = 3054 dm_create_session(DM_NO_SESSION, szSessionInfo, 3055 &newsid)) == -1) { 3056 /* No clean up */ 3057 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 3058 == -1) { 3059 dm_destroy_session(newsid); 3060 } else 3061 if ((rc = 3062 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3063 &ineventset, DM_EVENT_MAX)) == -1) { 3064 dm_handle_free(hanp, hlen); 3065 dm_destroy_session(newsid); 3066 } 3067 if (rc == -1) { 3068 DMLOG_PRINT(DMLVL_DEBUG, 3069 "Unable to set up variation! (errno = %d)\n", 3070 errno); 3071 DMVAR_SKIP(); 3072 } else { 3073 /* Variation */ 3074 DMLOG_PRINT(DMLVL_DEBUG, "%s(one event, fs handle)\n", 3075 szFuncName); 3076 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3077 DM_EVENT_MAX, &outeventset, 3078 &nelem); 3079 if (rc == 0) { 3080 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 3081 if (nelem == DM_EVENT_ATTRIBUTE + 1) { 3082 if (memcmp 3083 (&ineventset, &outeventset, 3084 sizeof(dm_eventset_t)) == 0) { 3085 DMLOG_PRINT(DMLVL_DEBUG, 3086 "%s passed with expected rc = %d\n", 3087 szFuncName, 0); 3088 DMVAR_PASS(); 3089 } else { 3090 DMLOG_PRINT(DMLVL_ERR, 3091 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 3092 szFuncName, 0, 3093 ineventset, 3094 outeventset); 3095 DMVAR_FAIL(); 3096 } 3097 } else { 3098 DMLOG_PRINT(DMLVL_ERR, 3099 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 3100 szFuncName, 0, nelem, 3101 DM_EVENT_ATTRIBUTE + 1); 3102 DMVAR_FAIL(); 3103 } 3104 } else { 3105 DMLOG_PRINT(DMLVL_ERR, 3106 "%s failed with unexpected rc = %d (errno = %d)\n", 3107 szFuncName, rc, errno); 3108 DMVAR_FAIL(); 3109 } 3110 3111 /* Variation clean up */ 3112 DMEV_ZERO(ineventset); 3113 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3114 &ineventset, DM_EVENT_MAX); 3115 rc |= dm_destroy_session(newsid); 3116 if (rc == -1) { 3117 DMLOG_PRINT(DMLVL_DEBUG, 3118 "Unable to clean up variation! (errno = %d)\n", 3119 errno); 3120 } 3121 dm_handle_free(hanp, hlen); 3122 } 3123 } 3124 3125 /* 3126 * TEST : dm_get_eventlist - one event, file handle 3127 * EXPECTED: rc = 0 3128 */ 3129 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 14)) { 3130 dm_sessid_t newsid; 3131 void *hanp; 3132 size_t hlen; 3133 dm_eventset_t ineventset, outeventset; 3134 u_int nelem; 3135 3136 /* Variation set up */ 3137 DMEV_ZERO(ineventset); 3138 DMEV_ZERO(outeventset); 3139 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 3140 if ((rc = 3141 dm_create_session(DM_NO_SESSION, szSessionInfo, 3142 &newsid)) == -1) { 3143 /* No clean up */ 3144 } else if ((rc = dm_path_to_handle(DummyFile, &hanp, &hlen)) == 3145 -1) { 3146 dm_destroy_session(newsid); 3147 } else 3148 if ((rc = 3149 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3150 &ineventset, DM_EVENT_MAX)) == -1) { 3151 dm_handle_free(hanp, hlen); 3152 dm_destroy_session(newsid); 3153 } 3154 if (rc == -1) { 3155 DMLOG_PRINT(DMLVL_DEBUG, 3156 "Unable to set up variation! (errno = %d)\n", 3157 errno); 3158 DMVAR_SKIP(); 3159 } else { 3160 /* Variation */ 3161 DMLOG_PRINT(DMLVL_DEBUG, "%s(one event, file handle)\n", 3162 szFuncName); 3163 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3164 DM_EVENT_MAX, &outeventset, 3165 &nelem); 3166 if (rc == 0) { 3167 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 3168 if (nelem == DM_EVENT_ATTRIBUTE + 1) { 3169 if (memcmp 3170 (&ineventset, &outeventset, 3171 sizeof(dm_eventset_t)) == 0) { 3172 DMLOG_PRINT(DMLVL_DEBUG, 3173 "%s passed with expected rc = %d\n", 3174 szFuncName, 0); 3175 DMVAR_PASS(); 3176 } else { 3177 DMLOG_PRINT(DMLVL_ERR, 3178 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 3179 szFuncName, 0, 3180 ineventset, 3181 outeventset); 3182 DMVAR_FAIL(); 3183 } 3184 } else { 3185 DMLOG_PRINT(DMLVL_ERR, 3186 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 3187 szFuncName, 0, nelem, 3188 DM_EVENT_ATTRIBUTE + 1); 3189 DMVAR_FAIL(); 3190 } 3191 } else { 3192 DMLOG_PRINT(DMLVL_ERR, 3193 "%s failed with unexpected rc = %d (errno = %d)\n", 3194 szFuncName, rc, errno); 3195 DMVAR_FAIL(); 3196 } 3197 3198 /* Variation clean up */ 3199 DMEV_ZERO(ineventset); 3200 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3201 &ineventset, DM_EVENT_MAX); 3202 rc |= dm_destroy_session(newsid); 3203 if (rc == -1) { 3204 DMLOG_PRINT(DMLVL_DEBUG, 3205 "Unable to clean up variation! (errno = %d)\n", 3206 errno); 3207 } 3208 dm_handle_free(hanp, hlen); 3209 } 3210 } 3211 3212 /* 3213 * TEST : dm_get_eventlist - multi event, fs handle 3214 * EXPECTED: rc = 0 3215 */ 3216 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 15)) { 3217 dm_sessid_t newsid; 3218 void *hanp; 3219 size_t hlen; 3220 dm_eventset_t ineventset, outeventset; 3221 u_int nelem; 3222 3223 /* Variation set up */ 3224 DMEV_ZERO(ineventset); 3225 DMEV_ZERO(outeventset); 3226 DMEV_SET(DM_EVENT_CLOSE, ineventset); 3227 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 3228 DMEV_SET(DM_EVENT_DESTROY, ineventset); 3229 if ((rc = 3230 dm_create_session(DM_NO_SESSION, szSessionInfo, 3231 &newsid)) == -1) { 3232 /* No clean up */ 3233 } else if ((rc = dm_path_to_fshandle(DummyFile, &hanp, &hlen)) 3234 == -1) { 3235 dm_destroy_session(newsid); 3236 } else 3237 if ((rc = 3238 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3239 &ineventset, DM_EVENT_MAX)) == -1) { 3240 dm_handle_free(hanp, hlen); 3241 dm_destroy_session(newsid); 3242 } 3243 if (rc == -1) { 3244 DMLOG_PRINT(DMLVL_DEBUG, 3245 "Unable to set up variation! (errno = %d)\n", 3246 errno); 3247 DMVAR_SKIP(); 3248 } else { 3249 /* Variation */ 3250 DMLOG_PRINT(DMLVL_DEBUG, "%s(multi event, fs handle)\n", 3251 szFuncName); 3252 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3253 DM_EVENT_MAX, &outeventset, 3254 &nelem); 3255 if (rc == 0) { 3256 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 3257 if (nelem == DM_EVENT_DESTROY + 1) { 3258 if (memcmp 3259 (&ineventset, &outeventset, 3260 sizeof(dm_eventset_t)) == 0) { 3261 DMLOG_PRINT(DMLVL_DEBUG, 3262 "%s passed with expected rc = %d\n", 3263 szFuncName, 0); 3264 DMVAR_PASS(); 3265 } else { 3266 DMLOG_PRINT(DMLVL_ERR, 3267 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 3268 szFuncName, 0, 3269 ineventset, 3270 outeventset); 3271 DMVAR_FAIL(); 3272 } 3273 } else { 3274 DMLOG_PRINT(DMLVL_ERR, 3275 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 3276 szFuncName, 0, nelem, 3277 DM_EVENT_DESTROY + 1); 3278 DMVAR_FAIL(); 3279 } 3280 } else { 3281 DMLOG_PRINT(DMLVL_ERR, 3282 "%s failed with unexpected rc = %d (errno = %d)\n", 3283 szFuncName, rc, errno); 3284 DMVAR_FAIL(); 3285 } 3286 3287 /* Variation clean up */ 3288 DMEV_ZERO(ineventset); 3289 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3290 &ineventset, DM_EVENT_MAX); 3291 rc |= dm_destroy_session(newsid); 3292 if (rc == -1) { 3293 DMLOG_PRINT(DMLVL_DEBUG, 3294 "Unable to clean up variation! (errno = %d)\n", 3295 errno); 3296 } 3297 dm_handle_free(hanp, hlen); 3298 } 3299 } 3300 3301 /* 3302 * TEST : dm_get_eventlist - multi event, file handle 3303 * EXPECTED: rc = 0 3304 */ 3305 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 16)) { 3306 dm_sessid_t newsid; 3307 void *hanp; 3308 size_t hlen; 3309 dm_eventset_t ineventset, outeventset; 3310 u_int nelem; 3311 3312 /* Variation set up */ 3313 DMEV_ZERO(ineventset); 3314 DMEV_ZERO(outeventset); 3315 DMEV_SET(DM_EVENT_CLOSE, ineventset); 3316 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 3317 DMEV_SET(DM_EVENT_DESTROY, ineventset); 3318 if ((rc = 3319 dm_create_session(DM_NO_SESSION, szSessionInfo, 3320 &newsid)) == -1) { 3321 /* No clean up */ 3322 } else if ((rc = dm_path_to_handle(DummyFile, &hanp, &hlen)) == 3323 -1) { 3324 dm_destroy_session(newsid); 3325 } else 3326 if ((rc = 3327 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3328 &ineventset, DM_EVENT_MAX)) == -1) { 3329 dm_handle_free(hanp, hlen); 3330 dm_destroy_session(newsid); 3331 } 3332 if (rc == -1) { 3333 DMLOG_PRINT(DMLVL_DEBUG, 3334 "Unable to set up variation! (errno = %d)\n", 3335 errno); 3336 DMVAR_SKIP(); 3337 } else { 3338 /* Variation */ 3339 DMLOG_PRINT(DMLVL_DEBUG, 3340 "%s(multi event, file handle)\n", 3341 szFuncName); 3342 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3343 DM_EVENT_MAX, &outeventset, 3344 &nelem); 3345 if (rc == 0) { 3346 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 3347 if (nelem == DM_EVENT_DESTROY + 1) { 3348 if (memcmp 3349 (&ineventset, &outeventset, 3350 sizeof(dm_eventset_t)) == 0) { 3351 DMLOG_PRINT(DMLVL_DEBUG, 3352 "%s passed with expected rc = %d\n", 3353 szFuncName, 0); 3354 DMVAR_PASS(); 3355 } else { 3356 DMLOG_PRINT(DMLVL_ERR, 3357 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 3358 szFuncName, 0, 3359 ineventset, 3360 outeventset); 3361 DMVAR_FAIL(); 3362 } 3363 } else { 3364 DMLOG_PRINT(DMLVL_ERR, 3365 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 3366 szFuncName, 0, nelem, 3367 DM_EVENT_DESTROY + 1); 3368 DMVAR_FAIL(); 3369 } 3370 } else { 3371 DMLOG_PRINT(DMLVL_ERR, 3372 "%s failed with unexpected rc = %d (errno = %d)\n", 3373 szFuncName, rc, errno); 3374 DMVAR_FAIL(); 3375 } 3376 3377 /* Variation clean up */ 3378 DMEV_ZERO(ineventset); 3379 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3380 &ineventset, DM_EVENT_MAX); 3381 rc |= dm_destroy_session(newsid); 3382 if (rc == -1) { 3383 DMLOG_PRINT(DMLVL_DEBUG, 3384 "Unable to clean up variation! (errno = %d)\n", 3385 errno); 3386 } 3387 dm_handle_free(hanp, hlen); 3388 } 3389 } 3390 3391 /* 3392 * TEST : dm_get_eventlist - read event 3393 * EXPECTED: rc = 0 3394 */ 3395 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 17)) { 3396 dm_sessid_t newsid; 3397 void *hanp; 3398 size_t hlen; 3399 dm_eventset_t ineventset, outeventset; 3400 u_int nelem; 3401 dm_region_t region = { 0, 0, DM_REGION_READ }; 3402 dm_boolean_t exactflag; 3403 3404 /* Variation set up */ 3405 DMEV_ZERO(ineventset); 3406 DMEV_ZERO(outeventset); 3407 DMEV_SET(DM_EVENT_READ, ineventset); 3408 if ((rc = 3409 dm_create_session(DM_NO_SESSION, szSessionInfo, 3410 &newsid)) == -1) { 3411 /* No clean up */ 3412 } else if ((rc = dm_path_to_handle(DummyFile, &hanp, &hlen)) == 3413 -1) { 3414 dm_destroy_session(newsid); 3415 } else 3416 if ((rc = 3417 dm_set_region(newsid, hanp, hlen, DM_NO_TOKEN, 1, 3418 ®ion, &exactflag)) == -1) { 3419 dm_handle_free(hanp, hlen); 3420 dm_destroy_session(newsid); 3421 } 3422 if (rc == -1) { 3423 DMLOG_PRINT(DMLVL_DEBUG, 3424 "Unable to set up variation! (errno = %d)\n", 3425 errno); 3426 DMVAR_SKIP(); 3427 } else { 3428 /* Variation */ 3429 DMLOG_PRINT(DMLVL_DEBUG, "%s(read event)\n", 3430 szFuncName); 3431 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3432 DM_EVENT_MAX, &outeventset, 3433 &nelem); 3434 if (rc == 0) { 3435 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 3436 if (nelem == DM_EVENT_READ + 1) { 3437 if (memcmp 3438 (&ineventset, &outeventset, 3439 sizeof(dm_eventset_t)) == 0) { 3440 DMLOG_PRINT(DMLVL_DEBUG, 3441 "%s passed with expected rc = %d\n", 3442 szFuncName, 0); 3443 DMVAR_PASS(); 3444 } else { 3445 DMLOG_PRINT(DMLVL_ERR, 3446 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 3447 szFuncName, 0, 3448 ineventset, 3449 outeventset); 3450 DMVAR_FAIL(); 3451 } 3452 } else { 3453 DMLOG_PRINT(DMLVL_ERR, 3454 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 3455 szFuncName, 0, nelem, 3456 DM_EVENT_READ + 1); 3457 DMVAR_FAIL(); 3458 } 3459 } else { 3460 DMLOG_PRINT(DMLVL_ERR, 3461 "%s failed with unexpected rc = %d (errno = %d)\n", 3462 szFuncName, rc, errno); 3463 DMVAR_FAIL(); 3464 } 3465 3466 /* Variation clean up */ 3467 DMEV_ZERO(ineventset); 3468 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3469 &ineventset, DM_EVENT_MAX); 3470 rc |= dm_destroy_session(newsid); 3471 if (rc == -1) { 3472 DMLOG_PRINT(DMLVL_DEBUG, 3473 "Unable to clean up variation! (errno = %d)\n", 3474 errno); 3475 } 3476 dm_handle_free(hanp, hlen); 3477 } 3478 } 3479 3480 /* 3481 * TEST : dm_get_eventlist - write event 3482 * EXPECTED: rc = 0 3483 */ 3484 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 18)) { 3485 dm_sessid_t newsid; 3486 void *hanp; 3487 size_t hlen; 3488 dm_eventset_t ineventset, outeventset; 3489 u_int nelem; 3490 dm_region_t region = { 0, 10, DM_REGION_WRITE }; 3491 dm_boolean_t exactflag; 3492 3493 /* Variation set up */ 3494 DMEV_ZERO(ineventset); 3495 DMEV_ZERO(outeventset); 3496 DMEV_SET(DM_EVENT_WRITE, ineventset); 3497 if ((rc = 3498 dm_create_session(DM_NO_SESSION, szSessionInfo, 3499 &newsid)) == -1) { 3500 /* No clean up */ 3501 } else if ((rc = dm_path_to_handle(DummyFile, &hanp, &hlen)) == 3502 -1) { 3503 dm_destroy_session(newsid); 3504 } else 3505 if ((rc = 3506 dm_set_region(newsid, hanp, hlen, DM_NO_TOKEN, 1, 3507 ®ion, &exactflag)) == -1) { 3508 dm_handle_free(hanp, hlen); 3509 dm_destroy_session(newsid); 3510 } 3511 if (rc == -1) { 3512 DMLOG_PRINT(DMLVL_DEBUG, 3513 "Unable to set up variation! (errno = %d)\n", 3514 errno); 3515 DMVAR_SKIP(); 3516 } else { 3517 /* Variation */ 3518 DMLOG_PRINT(DMLVL_DEBUG, "%s(write event)\n", 3519 szFuncName); 3520 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3521 DM_EVENT_MAX, &outeventset, 3522 &nelem); 3523 if (rc == 0) { 3524 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 3525 if (nelem == DM_EVENT_WRITE + 1) { 3526 if (memcmp 3527 (&ineventset, &outeventset, 3528 sizeof(dm_eventset_t)) == 0) { 3529 DMLOG_PRINT(DMLVL_DEBUG, 3530 "%s passed with expected rc = %d\n", 3531 szFuncName, 0); 3532 DMVAR_PASS(); 3533 } else { 3534 DMLOG_PRINT(DMLVL_ERR, 3535 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 3536 szFuncName, 0, 3537 ineventset, 3538 outeventset); 3539 DMVAR_FAIL(); 3540 } 3541 } else { 3542 DMLOG_PRINT(DMLVL_ERR, 3543 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 3544 szFuncName, 0, nelem, 3545 DM_EVENT_WRITE + 1); 3546 DMVAR_FAIL(); 3547 } 3548 } else { 3549 DMLOG_PRINT(DMLVL_ERR, 3550 "%s failed with unexpected rc = %d (errno = %d)\n", 3551 szFuncName, rc, errno); 3552 DMVAR_FAIL(); 3553 } 3554 3555 /* Variation clean up */ 3556 DMEV_ZERO(ineventset); 3557 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3558 &ineventset, DM_EVENT_MAX); 3559 rc |= dm_destroy_session(newsid); 3560 if (rc == -1) { 3561 DMLOG_PRINT(DMLVL_DEBUG, 3562 "Unable to clean up variation! (errno = %d)\n", 3563 errno); 3564 } 3565 dm_handle_free(hanp, hlen); 3566 } 3567 } 3568 3569 /* 3570 * TEST : dm_get_eventlist - truncate event 3571 * EXPECTED: rc = 0 3572 */ 3573 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 19)) { 3574 dm_sessid_t newsid; 3575 void *hanp; 3576 size_t hlen; 3577 dm_eventset_t ineventset, outeventset; 3578 u_int nelem; 3579 dm_region_t region = 3580 { TMP_FILELEN - 10, 0, DM_REGION_TRUNCATE }; 3581 dm_boolean_t exactflag; 3582 3583 /* Variation set up */ 3584 DMEV_ZERO(ineventset); 3585 DMEV_ZERO(outeventset); 3586 DMEV_SET(DM_EVENT_TRUNCATE, ineventset); 3587 if ((rc = 3588 dm_create_session(DM_NO_SESSION, szSessionInfo, 3589 &newsid)) == -1) { 3590 /* No clean up */ 3591 } else if ((rc = dm_path_to_handle(DummyFile, &hanp, &hlen)) == 3592 -1) { 3593 dm_destroy_session(newsid); 3594 } else 3595 if ((rc = 3596 dm_set_region(newsid, hanp, hlen, DM_NO_TOKEN, 1, 3597 ®ion, &exactflag)) == -1) { 3598 dm_handle_free(hanp, hlen); 3599 dm_destroy_session(newsid); 3600 } 3601 if (rc == -1) { 3602 DMLOG_PRINT(DMLVL_DEBUG, 3603 "Unable to set up variation! (errno = %d)\n", 3604 errno); 3605 DMVAR_SKIP(); 3606 } else { 3607 /* Variation */ 3608 DMLOG_PRINT(DMLVL_DEBUG, "%s(truncate event)\n", 3609 szFuncName); 3610 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3611 DM_EVENT_MAX, &outeventset, 3612 &nelem); 3613 if (rc == 0) { 3614 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 3615 if (nelem == DM_EVENT_TRUNCATE + 1) { 3616 if (memcmp 3617 (&ineventset, &outeventset, 3618 sizeof(dm_eventset_t)) == 0) { 3619 DMLOG_PRINT(DMLVL_DEBUG, 3620 "%s passed with expected rc = %d\n", 3621 szFuncName, 0); 3622 DMVAR_PASS(); 3623 } else { 3624 DMLOG_PRINT(DMLVL_ERR, 3625 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 3626 szFuncName, 0, 3627 ineventset, 3628 outeventset); 3629 DMVAR_FAIL(); 3630 } 3631 } else { 3632 DMLOG_PRINT(DMLVL_ERR, 3633 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 3634 szFuncName, 0, nelem, 3635 DM_EVENT_TRUNCATE + 1); 3636 DMVAR_FAIL(); 3637 } 3638 } else { 3639 DMLOG_PRINT(DMLVL_ERR, 3640 "%s failed with unexpected rc = %d (errno = %d)\n", 3641 szFuncName, rc, errno); 3642 DMVAR_FAIL(); 3643 } 3644 3645 /* Variation clean up */ 3646 DMEV_ZERO(ineventset); 3647 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3648 &ineventset, DM_EVENT_MAX); 3649 rc |= dm_destroy_session(newsid); 3650 if (rc == -1) { 3651 DMLOG_PRINT(DMLVL_DEBUG, 3652 "Unable to clean up variation! (errno = %d)\n", 3653 errno); 3654 } 3655 dm_handle_free(hanp, hlen); 3656 } 3657 } 3658 3659 /* 3660 * TEST : dm_get_eventlist - event union, file handle 3661 * EXPECTED: rc = 0 3662 */ 3663 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 20)) { 3664 dm_sessid_t newsid; 3665 void *hanp; 3666 size_t hlen; 3667 dm_eventset_t ineventset, outeventset; 3668 u_int nelem; 3669 dm_region_t region = 3670 { TMP_FILELEN - 10, 0, DM_REGION_TRUNCATE }; 3671 dm_boolean_t exactflag; 3672 3673 /* Variation set up */ 3674 DMEV_ZERO(ineventset); 3675 DMEV_ZERO(outeventset); 3676 DMEV_SET(DM_EVENT_CLOSE, ineventset); 3677 DMEV_SET(DM_EVENT_ATTRIBUTE, ineventset); 3678 DMEV_SET(DM_EVENT_DESTROY, ineventset); 3679 if ((rc = 3680 dm_create_session(DM_NO_SESSION, szSessionInfo, 3681 &newsid)) == -1) { 3682 /* No clean up */ 3683 } else if ((rc = dm_path_to_handle(DummyFile, &hanp, &hlen)) == 3684 -1) { 3685 dm_destroy_session(newsid); 3686 } else 3687 if (((rc = 3688 dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3689 &ineventset, DM_EVENT_MAX)) == -1) 3690 || 3691 ((rc = 3692 dm_set_region(newsid, hanp, hlen, DM_NO_TOKEN, 1, 3693 ®ion, &exactflag)) == -1)) { 3694 dm_handle_free(hanp, hlen); 3695 dm_destroy_session(newsid); 3696 } 3697 if (rc == -1) { 3698 DMLOG_PRINT(DMLVL_DEBUG, 3699 "Unable to set up variation! (errno = %d)\n", 3700 errno); 3701 DMVAR_SKIP(); 3702 } else { 3703 /* Variation */ 3704 DMLOG_PRINT(DMLVL_DEBUG, 3705 "%s(event union, file handle)\n", 3706 szFuncName); 3707 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3708 DM_EVENT_MAX, &outeventset, 3709 &nelem); 3710 if (rc == 0) { 3711 DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 3712 if (nelem == DM_EVENT_DESTROY + 1) { 3713 DMEV_SET(DM_EVENT_TRUNCATE, ineventset); 3714 if (memcmp 3715 (&ineventset, &outeventset, 3716 sizeof(dm_eventset_t)) == 0) { 3717 DMLOG_PRINT(DMLVL_DEBUG, 3718 "%s passed with expected rc = %d\n", 3719 szFuncName, 0); 3720 DMVAR_PASS(); 3721 } else { 3722 DMLOG_PRINT(DMLVL_ERR, 3723 "%s failed with expected rc = %d but eventsets not same (%llx vs %llx)\n", 3724 szFuncName, 0, 3725 ineventset, 3726 outeventset); 3727 DMVAR_FAIL(); 3728 } 3729 } else { 3730 DMLOG_PRINT(DMLVL_ERR, 3731 "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 3732 szFuncName, 0, nelem, 3733 DM_EVENT_DESTROY + 1); 3734 DMVAR_FAIL(); 3735 } 3736 } else { 3737 DMLOG_PRINT(DMLVL_ERR, 3738 "%s failed with unexpected rc = %d (errno = %d)\n", 3739 szFuncName, rc, errno); 3740 DMVAR_FAIL(); 3741 } 3742 3743 /* Variation clean up */ 3744 DMEV_ZERO(ineventset); 3745 rc = dm_set_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3746 &ineventset, DM_EVENT_MAX); 3747 rc |= dm_destroy_session(newsid); 3748 if (rc == -1) { 3749 DMLOG_PRINT(DMLVL_DEBUG, 3750 "Unable to clean up variation! (errno = %d)\n", 3751 errno); 3752 } 3753 dm_handle_free(hanp, hlen); 3754 } 3755 } 3756 3757 /* 3758 * TEST : dm_get_eventlist - global handle 3759 * EXPECTED: rc = -1, errno = EBADF 3760 */ 3761 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 21)) { 3762 dm_sessid_t newsid; 3763 dm_eventset_t outeventset; 3764 u_int nelem; 3765 3766 /* Variation set up */ 3767 rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &newsid); 3768 if (rc == -1) { 3769 DMLOG_PRINT(DMLVL_DEBUG, 3770 "Unable to set up variation! (errno = %d)\n", 3771 errno); 3772 DMVAR_SKIP(); 3773 } else { 3774 /* Variation */ 3775 3776 DMLOG_PRINT(DMLVL_DEBUG, "%s(global handle)\n", 3777 szFuncName); 3778 rc = dm_get_eventlist(newsid, DM_GLOBAL_HANP, 3779 DM_GLOBAL_HLEN, DM_NO_TOKEN, 3780 DM_EVENT_MAX, &outeventset, 3781 &nelem); 3782 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF); 3783 3784 /* Variation clean up */ 3785 rc = dm_destroy_session(newsid); 3786 if (rc == -1) { 3787 DMLOG_PRINT(DMLVL_DEBUG, 3788 "Unable to clean up variation! (errno = %d)\n", 3789 errno); 3790 } 3791 } 3792 } 3793 3794 /* 3795 * TEST : dm_get_eventlist - invalidated file handle 3796 * EXPECTED: rc = -1, errno = EBADF 3797 */ 3798 if (DMVAR_EXEC(GET_EVENTLIST_BASE + 22)) { 3799 dm_sessid_t newsid; 3800 void *hanp; 3801 size_t hlen; 3802 dm_eventset_t ineventset, outeventset; 3803 u_int nelem; 3804 3805 /* Variation set up */ 3806 DMEV_ZERO(ineventset); 3807 DMEV_ZERO(outeventset); 3808 3809 sprintf(command, "cp %s %s", DummyFile, DummyFile2); 3810 if ((rc = system(command)) == -1) { 3811 /* No clean up */ 3812 } else 3813 if ((rc = 3814 dm_create_session(DM_NO_SESSION, szSessionInfo, 3815 &newsid)) == -1) { 3816 remove(DummyFile2); 3817 } else if ((rc = dm_path_to_handle(DummyFile2, &hanp, &hlen)) == 3818 -1) { 3819 dm_destroy_session(newsid); 3820 remove(DummyFile2); 3821 } else if ((rc = remove(DummyFile2)) == -1) { 3822 dm_handle_free(hanp, hlen); 3823 dm_destroy_session(newsid); 3824 } 3825 if (rc == -1) { 3826 DMLOG_PRINT(DMLVL_DEBUG, 3827 "Unable to set up variation! (errno = %d)\n", 3828 errno); 3829 DMVAR_SKIP(); 3830 } else { 3831 /* Variation */ 3832 DMLOG_PRINT(DMLVL_DEBUG, 3833 "%s(invalidated file handle)\n", 3834 szFuncName); 3835 rc = dm_get_eventlist(newsid, hanp, hlen, DM_NO_TOKEN, 3836 DM_EVENT_MAX, &outeventset, 3837 &nelem); 3838 DMVAR_ENDFAILEXP(szFuncName, -1, rc, EBADF); 3839 3840 /* Variation clean up */ 3841 rc = dm_destroy_session(newsid); 3842 if (rc == -1) { 3843 DMLOG_PRINT(DMLVL_DEBUG, 3844 "Unable to clean up variation! (errno = %d)\n", 3845 errno); 3846 } 3847 dm_handle_free(hanp, hlen); 3848 } 3849 } 3850 3851 /* We now need to repoint preunmount/unmount back to original session */ 3852 DMEV_ZERO(events); 3853 DMEV_SET(DM_EVENT_PREUNMOUNT, events); 3854 DMEV_SET(DM_EVENT_UNMOUNT, events); 3855 rc = dm_path_to_fshandle(DummyFile, &fshanp, &fshlen); 3856 if (rc == -1) { 3857 DMLOG_PRINT(DMLVL_ERR, 3858 "dm_path_to_fshandle failed! (rc = %d, errno = %d)\n", 3859 rc, errno); 3860 dm_destroy_session(sid); 3861 DM_EXIT(); 3862 } 3863 3864 rc = dm_set_disp(sid, fshanp, fshlen, DM_NO_TOKEN, &events, 3865 DM_EVENT_MAX); 3866 if (rc == -1) { 3867 DMLOG_PRINT(DMLVL_ERR, 3868 "dm_set_disp failed! (rc = %d, errno = %d)\n", rc, 3869 errno); 3870 dm_destroy_session(sid); 3871 DM_EXIT(); 3872 } 3873 3874 rc = dm_set_eventlist(sid, fshanp, fshlen, DM_NO_TOKEN, &events, 3875 DM_EVENT_MAX); 3876 if (rc == -1) { 3877 DMLOG_PRINT(DMLVL_ERR, 3878 "dm_set_eventlist failed! (rc = %d, errno = %d)\n", 3879 rc, errno); 3880 dm_destroy_session(sid); 3881 DM_EXIT(); 3882 } 3883 3884 remove(DummyFile); 3885 rmdir(DummySubdir); 3886 dm_handle_free(fshanp, fshlen); 3887 3888 rc = umount(mountPt); 3889 if (rc == -1) { 3890 DMLOG_PRINT(DMLVL_ERR, "umount failed! (rc = %d, errno = %d)\n", 3891 rc, errno); 3892 } 3893 3894 pthread_join(tid, NULL); 3895 3896 rc = dm_destroy_session(sid); 3897 if (rc == -1) { 3898 DMLOG_PRINT(DMLVL_ERR, 3899 "dm_destroy_session failed! (rc = %d, errno = %d)\n", 3900 rc, errno); 3901 } 3902 3903 DMLOG_STOP(); 3904 3905 tst_exit(); 3906 } 3907 3908 void *Thread(void *parm) 3909 { 3910 int rc; 3911 size_t dmMsgBufLen; 3912 dm_eventmsg_t *dmMsg; 3913 int bMounted = DM_FALSE; 3914 dm_eventtype_t type; 3915 dm_token_t token; 3916 dm_eventset_t events; 3917 dm_response_t response; 3918 3919 do { 3920 /* Loop until message received (wait could be interrupted) */ 3921 do { 3922 DMLOG_PRINT(DMLVL_DEBUG, "Waiting for event...\n"); 3923 dmMsgBufLen = 0; 3924 3925 rc = dm_get_events(sid, 1, DM_EV_WAIT, sizeof(dmMsgBuf), 3926 dmMsgBuf, &dmMsgBufLen); 3927 DMLOG_PRINT(DMLVL_DEBUG, 3928 "... dm_get_events returned %d (errno %d)\n", 3929 rc, errno); 3930 } while ((rc == -1) && (errno == EINTR) && (dmMsgBufLen == 0)); 3931 3932 if (rc) { 3933 DMLOG_PRINT(DMLVL_ERR, 3934 "dm_get_events failed with rc = %d, errno = %d\n", 3935 rc, errno); 3936 dm_destroy_session(sid); 3937 DM_EXIT(); 3938 } else { 3939 dmMsg = (dm_eventmsg_t *) dmMsgBuf; 3940 token = dmMsg->ev_token; 3941 type = dmMsg->ev_type; 3942 3943 DMLOG_PRINT(DMLVL_DEBUG, "Received message %d\n", type); 3944 } 3945 3946 if (type == DM_EVENT_MOUNT) { 3947 /* SPECIAL CASE: need to set disposition, events and response */ 3948 dm_mount_event_t *me = 3949 DM_GET_VALUE(dmMsg, ev_data, dm_mount_event_t *); 3950 void *lhanp = DM_GET_VALUE(me, me_handle1, void *); 3951 size_t lhlen = DM_GET_LEN(me, me_handle1); 3952 3953 DMLOG_PRINT(DMLVL_DEBUG, "Message is DM_EVENT_MOUNT\n"); 3954 DMLOG_PRINT(DMLVL_DEBUG, " Mode: %x\n", me->me_mode); 3955 DMLOG_PRINT(DMLVL_DEBUG, " File system handle: %p\n", 3956 lhanp); 3957 DMLOG_PRINT(DMLVL_DEBUG, 3958 " File system handle length: %d\n", lhlen); 3959 DMLOG_PRINT(DMLVL_DEBUG, " Mountpoint handle: %p\n", 3960 DM_GET_VALUE(me, me_handle2, void *)); 3961 DMLOG_PRINT(DMLVL_DEBUG, 3962 " Mountpoint handle length: %d\n", 3963 DM_GET_LEN(me, me_handle2)); 3964 DMLOG_PRINT(DMLVL_DEBUG, " Mountpoint path: %s\n", 3965 DM_GET_VALUE(me, me_name1, char *)); 3966 DMLOG_PRINT(DMLVL_DEBUG, " Media designator: %s\n", 3967 DM_GET_VALUE(me, me_name2, char *)); 3968 DMLOG_PRINT(DMLVL_DEBUG, " Root handle: %p\n", 3969 DM_GET_VALUE(me, me_roothandle, void *)); 3970 DMLOG_PRINT(DMLVL_DEBUG, " Root handle length: %d\n", 3971 DM_GET_LEN(me, me_roothandle)); 3972 3973 bMounted = dm_handle_is_valid(lhanp, lhlen); 3974 3975 rc = dm_request_right(sid, lhanp, lhlen, token, 3976 DM_RR_WAIT, DM_RIGHT_EXCL); 3977 if (rc == -1) { 3978 DMLOG_PRINT(DMLVL_ERR, 3979 "dm_request_right failed! (rc = %d, errno = %d)\n", 3980 rc, errno); 3981 dm_destroy_session(sid); 3982 DM_EXIT(); 3983 } 3984 3985 DMEV_ZERO(events); 3986 DMEV_SET(DM_EVENT_PREUNMOUNT, events); 3987 DMEV_SET(DM_EVENT_UNMOUNT, events); 3988 rc = dm_set_eventlist(sid, lhanp, lhlen, token, &events, 3989 DM_EVENT_MAX); 3990 if (rc == -1) { 3991 DMLOG_PRINT(DMLVL_ERR, 3992 "dm_set_eventlist failed! (rc = %d, errno = %d)\n", 3993 rc, errno); 3994 dm_destroy_session(sid); 3995 DM_EXIT(); 3996 } 3997 3998 rc = dm_release_right(sid, lhanp, lhlen, token); 3999 if (rc == -1) { 4000 DMLOG_PRINT(DMLVL_ERR, 4001 "dm_request_right failed! (rc = %d, errno = %d)\n", 4002 rc, errno); 4003 dm_destroy_session(sid); 4004 DM_EXIT(); 4005 } 4006 4007 response = DM_RESP_CONTINUE; 4008 } else if (type == DM_EVENT_UNMOUNT) { 4009 dm_namesp_event_t *nse = 4010 DM_GET_VALUE(dmMsg, ev_data, dm_namesp_event_t *); 4011 if (nse->ne_retcode == 0) { 4012 bMounted = DM_FALSE; 4013 } 4014 4015 response = DM_RESP_CONTINUE; 4016 } else { 4017 switch (type) { 4018 case DM_EVENT_PREUNMOUNT: 4019 case DM_EVENT_READ: 4020 case DM_EVENT_WRITE: 4021 case DM_EVENT_TRUNCATE: 4022 case DM_EVENT_CREATE: 4023 case DM_EVENT_REMOVE: 4024 case DM_EVENT_RENAME: 4025 case DM_EVENT_LINK: 4026 case DM_EVENT_SYMLINK: 4027 response = DM_RESP_CONTINUE; 4028 break; 4029 4030 case DM_EVENT_POSTCREATE: 4031 case DM_EVENT_POSTREMOVE: 4032 case DM_EVENT_POSTRENAME: 4033 case DM_EVENT_POSTLINK: 4034 case DM_EVENT_POSTSYMLINK: 4035 case DM_EVENT_ATTRIBUTE: 4036 case DM_EVENT_CLOSE: 4037 response = DM_RESP_INVALID; 4038 break; 4039 4040 default: 4041 { 4042 DMLOG_PRINT(DMLVL_ERR, 4043 "Message is unexpected!\n"); 4044 response = DM_RESP_ABORT; 4045 break; 4046 } 4047 } 4048 } 4049 4050 if (response != DM_RESP_INVALID) { 4051 DMLOG_PRINT(DMLVL_DEBUG, 4052 "Responding to message %d with %d\n", type, 4053 response); 4054 rc = dm_respond_event(sid, token, response, 4055 response == 4056 DM_RESP_ABORT ? ABORT_ERRNO : 0, 4057 0, NULL); 4058 } 4059 } while (bMounted); 4060 4061 pthread_exit(0); 4062 } 4063