1# CDDL HEADER START 2# 3# The contents of this file are subject to the terms of the 4# Common Development and Distribution License (the "License"). 5# You may not use this file except in compliance with the License. 6# 7# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 8# or http://www.opensolaris.org/os/licensing. 9# See the License for the specific language governing permissions 10# and limitations under the License. 11# 12# When distributing Covered Code, include this CDDL HEADER in each 13# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 14# If applicable, add the following below this CDDL HEADER, with the 15# fields enclosed by brackets "[]" replaced with your own identifying 16# information: Portions Copyright [yyyy] [name of copyright owner] 17# 18# CDDL HEADER END 19# 20 21# 22# Copyright 2012,2013 Spectra Logic. All rights reserved. 23# Use is subject to license terms. 24# 25 26 27atf_test_case zfsd_fault_001_pos cleanup 28zfsd_fault_001_pos_head() 29{ 30 atf_set "descr" "ZFS will fault a vdev that produces IO errors" 31 atf_set "require.progs" "ksh93 gnop zfs zpool zfsd" 32 atf_set "timeout" 300 33} 34zfsd_fault_001_pos_body() 35{ 36 . $(atf_get_srcdir)/../../include/default.cfg 37 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 38 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 39 . $(atf_get_srcdir)/zfsd.cfg 40 41 verify_disk_count "$DISKS" 2 42 verify_zfsd_running 43 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" 44 ksh93 $(atf_get_srcdir)/zfsd_fault_001_pos.ksh 45 if [[ $? != 0 ]]; then 46 save_artifacts 47 atf_fail "Testcase failed" 48 fi 49} 50zfsd_fault_001_pos_cleanup() 51{ 52 . $(atf_get_srcdir)/../../include/default.cfg 53 . $(atf_get_srcdir)/zfsd.cfg 54 55 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 56} 57 58 59atf_test_case zfsd_fault_002_pos cleanup 60zfsd_fault_002_pos_head() 61{ 62 atf_set "descr" "ZFS will fault a vdev that experiences delayed I/O" 63 atf_set "require.progs" "ksh93 gnop zfs zpool zfsd" 64 atf_set "timeout" 300 65} 66zfsd_fault_002_pos_body() 67{ 68 . $(atf_get_srcdir)/../../include/default.cfg 69 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 70 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 71 . $(atf_get_srcdir)/zfsd.cfg 72 73 verify_disk_count "$DISKS" 2 74 verify_zfsd_running 75 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" 76 ksh93 $(atf_get_srcdir)/zfsd_fault_002_pos.ksh 77 if [[ $? != 0 ]]; then 78 save_artifacts 79 atf_fail "Testcase failed" 80 fi 81} 82zfsd_fault_002_pos_cleanup() 83{ 84 . $(atf_get_srcdir)/../../include/default.cfg 85 . $(atf_get_srcdir)/zfsd.cfg 86 87 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 88} 89 90atf_test_case zfsd_degrade_001_pos cleanup 91zfsd_degrade_001_pos_head() 92{ 93 atf_set "descr" "ZFS will degrade a vdev that produces checksum errors" 94 atf_set "require.progs" "ksh93 zpool zfsd" 95 atf_set "timeout" 600 96} 97zfsd_degrade_001_pos_body() 98{ 99 . $(atf_get_srcdir)/../../include/default.cfg 100 . $(atf_get_srcdir)/zfsd.cfg 101 102 verify_disk_count "$DISKS" 2 103 verify_zfsd_running 104 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" 105 ksh93 $(atf_get_srcdir)/zfsd_degrade_001_pos.ksh 106 if [[ $? != 0 ]]; then 107 save_artifacts 108 atf_fail "Testcase failed" 109 fi 110} 111zfsd_degrade_001_pos_cleanup() 112{ 113 . $(atf_get_srcdir)/../../include/default.cfg 114 . $(atf_get_srcdir)/zfsd.cfg 115 116 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 117} 118 119atf_test_case zfsd_degrade_002_pos cleanup 120zfsd_degrade_002_pos_head() 121{ 122 atf_set "descr" "ZFS will degrade a spare that produces checksum errors" 123 atf_set "require.progs" "ksh93 zpool zfsd" 124 atf_set "timeout" 600 125} 126zfsd_degrade_002_pos_body() 127{ 128 atf_expect_fail "https://www.illumos.org/issues/8614 Checksum errors on a mirrored child of a raidz are incorrectly accounted" 129 . $(atf_get_srcdir)/../../include/default.cfg 130 . $(atf_get_srcdir)/zfsd.cfg 131 132 verify_disk_count "$DISKS" 5 133 verify_zfsd_running 134 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" 135 ksh93 $(atf_get_srcdir)/zfsd_degrade_002_pos.ksh 136 if [[ $? != 0 ]]; then 137 save_artifacts 138 atf_fail "Testcase failed" 139 fi 140} 141zfsd_degrade_002_pos_cleanup() 142{ 143 . $(atf_get_srcdir)/../../include/default.cfg 144 . $(atf_get_srcdir)/zfsd.cfg 145 146 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 147} 148 149 150atf_test_case zfsd_hotspare_001_pos cleanup 151zfsd_hotspare_001_pos_head() 152{ 153 atf_set "descr" "An active, damaged spare will be replaced by an available spare" 154 atf_set "require.progs" "ksh93 zpool zfsd" 155 atf_set "timeout" 3600 156} 157zfsd_hotspare_001_pos_body() 158{ 159 . $(atf_get_srcdir)/../../include/default.cfg 160 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 161 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 162 163 verify_zfsd_running 164 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 165 ksh93 $(atf_get_srcdir)/zfsd_hotspare_001_pos.ksh 166 if [[ $? != 0 ]]; then 167 save_artifacts 168 atf_fail "Testcase failed" 169 fi 170} 171zfsd_hotspare_001_pos_cleanup() 172{ 173 . $(atf_get_srcdir)/../../include/default.cfg 174 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 175 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 176 177 ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed" 178} 179 180atf_test_case zfsd_hotspare_002_pos cleanup 181zfsd_hotspare_002_pos_head() 182{ 183 atf_set "descr" "If a vdev becomes degraded, the spare will be activated." 184 atf_set "require.progs" "ksh93 zpool zfsd zinject" 185 atf_set "timeout" 3600 186} 187zfsd_hotspare_002_pos_body() 188{ 189 . $(atf_get_srcdir)/../../include/default.cfg 190 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 191 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 192 193 verify_zfsd_running 194 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 195 ksh93 $(atf_get_srcdir)/zfsd_hotspare_002_pos.ksh 196 if [[ $? != 0 ]]; then 197 save_artifacts 198 atf_fail "Testcase failed" 199 fi 200} 201zfsd_hotspare_002_pos_cleanup() 202{ 203 . $(atf_get_srcdir)/../../include/default.cfg 204 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 205 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 206 207 ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed" 208} 209 210 211atf_test_case zfsd_hotspare_003_pos cleanup 212zfsd_hotspare_003_pos_head() 213{ 214 atf_set "descr" "A faulted vdev will be replaced by an available spare" 215 atf_set "require.progs" "ksh93 zpool zfsd zinject" 216 atf_set "timeout" 3600 217} 218zfsd_hotspare_003_pos_body() 219{ 220 . $(atf_get_srcdir)/../../include/default.cfg 221 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 222 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 223 224 verify_disk_count "$DISKS" 5 225 verify_zfsd_running 226 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 227 ksh93 $(atf_get_srcdir)/zfsd_hotspare_003_pos.ksh 228 if [[ $? != 0 ]]; then 229 save_artifacts 230 atf_fail "Testcase failed" 231 fi 232} 233zfsd_hotspare_003_pos_cleanup() 234{ 235 . $(atf_get_srcdir)/../../include/default.cfg 236 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 237 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 238 239 ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed" 240} 241 242atf_test_case zfsd_hotspare_004_pos cleanup 243zfsd_hotspare_004_pos_head() 244{ 245 atf_set "descr" "Removing a disk from a pool results in the spare activating" 246 atf_set "require.progs" "ksh93 gnop zpool" 247 atf_set "timeout" 3600 248} 249zfsd_hotspare_004_pos_body() 250{ 251 . $(atf_get_srcdir)/../../include/default.cfg 252 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 253 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 254 255 verify_disk_count "$DISKS" 5 256 verify_zfsd_running 257 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 258 ksh93 $(atf_get_srcdir)/zfsd_hotspare_004_pos.ksh 259 if [[ $? != 0 ]]; then 260 save_artifacts 261 atf_fail "Testcase failed" 262 fi 263} 264zfsd_hotspare_004_pos_cleanup() 265{ 266 . $(atf_get_srcdir)/../../include/default.cfg 267 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 268 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 269 270 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 271} 272 273atf_test_case zfsd_hotspare_005_pos cleanup 274zfsd_hotspare_005_pos_head() 275{ 276 atf_set "descr" "A spare that is added to a degraded pool will be activated" 277 atf_set "require.progs" "ksh93 zpool zfsd zinject" 278 atf_set "timeout" 3600 279} 280zfsd_hotspare_005_pos_body() 281{ 282 . $(atf_get_srcdir)/../../include/default.cfg 283 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 284 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 285 286 verify_zfsd_running 287 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 288 ksh93 $(atf_get_srcdir)/zfsd_hotspare_005_pos.ksh 289 if [[ $? != 0 ]]; then 290 save_artifacts 291 atf_fail "Testcase failed" 292 fi 293} 294zfsd_hotspare_005_pos_cleanup() 295{ 296 . $(atf_get_srcdir)/../../include/default.cfg 297 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 298 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 299 300 ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed" 301} 302 303atf_test_case zfsd_hotspare_006_pos cleanup 304zfsd_hotspare_006_pos_head() 305{ 306 atf_set "descr" "zfsd will replace two vdevs that fail simultaneously" 307 atf_set "require.progs" "ksh93 zpool zfsd zinject" 308 atf_set "timeout" 3600 309} 310zfsd_hotspare_006_pos_body() 311{ 312 . $(atf_get_srcdir)/../../include/default.cfg 313 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 314 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 315 316 verify_zfsd_running 317 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 318 ksh93 $(atf_get_srcdir)/zfsd_hotspare_006_pos.ksh 319 if [[ $? != 0 ]]; then 320 save_artifacts 321 atf_fail "Testcase failed" 322 fi 323} 324zfsd_hotspare_006_pos_cleanup() 325{ 326 . $(atf_get_srcdir)/../../include/default.cfg 327 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 328 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 329 330 ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed" 331} 332 333atf_test_case zfsd_hotspare_007_pos cleanup 334zfsd_hotspare_007_pos_head() 335{ 336 atf_set "descr" "zfsd will swap failed drives at startup" 337 atf_set "require.progs" "ksh93 gnop zpool" 338 atf_set "timeout" 3600 339} 340zfsd_hotspare_007_pos_body() 341{ 342 . $(atf_get_srcdir)/../../include/default.cfg 343 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 344 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 345 346 verify_disk_count "$DISKS" 5 347 verify_zfsd_running 348 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 349 ksh93 $(atf_get_srcdir)/zfsd_hotspare_007_pos.ksh 350 if [[ $? != 0 ]]; then 351 save_artifacts 352 atf_fail "Testcase failed" 353 fi 354} 355zfsd_hotspare_007_pos_cleanup() 356{ 357 . $(atf_get_srcdir)/../../include/default.cfg 358 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 359 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 360 361 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 362} 363 364atf_test_case zfsd_hotspare_008_neg cleanup 365zfsd_hotspare_008_neg_head() 366{ 367 atf_set "descr" "zfsd will not use newly added spares on replacing vdevs" 368 atf_set "require.progs" "ksh93 zpool zfsd" 369 atf_set "timeout" 3600 370} 371zfsd_hotspare_008_neg_body() 372{ 373 . $(atf_get_srcdir)/../../include/default.cfg 374 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 375 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 376 377 verify_disk_count "$DISKS" 4 378 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 379 ksh93 $(atf_get_srcdir)/zfsd_hotspare_008_neg.ksh 380 if [[ $? != 0 ]]; then 381 save_artifacts 382 atf_fail "Testcase failed" 383 fi 384} 385zfsd_hotspare_008_neg_cleanup() 386{ 387 . $(atf_get_srcdir)/../../include/default.cfg 388 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 389 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 390 391 ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed" 392} 393 394atf_test_case zfsd_autoreplace_001_neg cleanup 395zfsd_autoreplace_001_neg_head() 396{ 397 atf_set "descr" "A pool without autoreplace set will not replace by physical path" 398 atf_set "require.progs" "ksh93 zpool gnop" 399 atf_set "timeout" 3600 400} 401zfsd_autoreplace_001_neg_body() 402{ 403 . $(atf_get_srcdir)/../../include/default.cfg 404 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 405 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 406 407 verify_disk_count "$DISKS" 5 408 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 409 ksh93 $(atf_get_srcdir)/zfsd_autoreplace_001_neg.ksh 410 if [[ $? != 0 ]]; then 411 save_artifacts 412 atf_fail "Testcase failed" 413 fi 414} 415zfsd_autoreplace_001_neg_cleanup() 416{ 417 . $(atf_get_srcdir)/../../include/default.cfg 418 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 419 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 420 421 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 422} 423 424atf_test_case zfsd_autoreplace_002_pos cleanup 425zfsd_autoreplace_002_pos_head() 426{ 427 atf_set "descr" "A pool with autoreplace set will replace by physical path" 428 atf_set "require.progs" "ksh93 gnop zpool zfsd" 429 atf_set "timeout" 3600 430} 431zfsd_autoreplace_002_pos_body() 432{ 433 . $(atf_get_srcdir)/../../include/default.cfg 434 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 435 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 436 437 verify_disk_count "$DISKS" 5 438 verify_zfsd_running 439 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 440 ksh93 $(atf_get_srcdir)/zfsd_autoreplace_002_pos.ksh 441 if [[ $? != 0 ]]; then 442 save_artifacts 443 atf_fail "Testcase failed" 444 fi 445} 446zfsd_autoreplace_002_pos_cleanup() 447{ 448 . $(atf_get_srcdir)/../../include/default.cfg 449 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 450 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 451 452 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 453} 454 455atf_test_case zfsd_autoreplace_003_pos cleanup 456zfsd_autoreplace_003_pos_head() 457{ 458 atf_set "descr" "A pool with autoreplace set will replace by physical path even if a spare is active" 459 atf_set "require.progs" "ksh93 zpool gnop" 460 atf_set "timeout" 3600 461} 462zfsd_autoreplace_003_pos_body() 463{ 464 . $(atf_get_srcdir)/../../include/default.cfg 465 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 466 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 467 468 verify_disk_count "$DISKS" 5 469 verify_zfsd_running 470 ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed" 471 ksh93 $(atf_get_srcdir)/zfsd_autoreplace_003_pos.ksh 472 if [[ $? != 0 ]]; then 473 save_artifacts 474 atf_fail "Testcase failed" 475 fi 476} 477zfsd_autoreplace_003_pos_cleanup() 478{ 479 . $(atf_get_srcdir)/../../include/default.cfg 480 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 481 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 482 483 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 484} 485 486atf_test_case zfsd_replace_001_pos cleanup 487zfsd_replace_001_pos_head() 488{ 489 atf_set "descr" "ZFSD will automatically replace a SAS disk that disappears and reappears in the same location, with the same devname" 490 atf_set "require.progs" "ksh93 zpool zfs gnop" 491} 492zfsd_replace_001_pos_body() 493{ 494 . $(atf_get_srcdir)/../../include/default.cfg 495 . $(atf_get_srcdir)/zfsd.cfg 496 497 verify_disk_count "$DISKS" 3 498 verify_zfsd_running 499 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" 500 ksh93 $(atf_get_srcdir)/zfsd_replace_001_pos.ksh 501 if [[ $? != 0 ]]; then 502 save_artifacts 503 atf_fail "Testcase failed" 504 fi 505} 506zfsd_replace_001_pos_cleanup() 507{ 508 . $(atf_get_srcdir)/../../include/default.cfg 509 . $(atf_get_srcdir)/zfsd.cfg 510 511 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 512} 513 514 515atf_test_case zfsd_replace_002_pos cleanup 516zfsd_replace_002_pos_head() 517{ 518 atf_set "descr" "zfsd will reactivate a pool after all disks are failed and reappeared" 519 atf_set "require.progs" "ksh93 zpool zfs" 520} 521zfsd_replace_002_pos_body() 522{ 523 atf_expect_fail "Not yet implemented in zfsd" 524 . $(atf_get_srcdir)/../../include/default.cfg 525 . $(atf_get_srcdir)/zfsd.cfg 526 527 verify_disk_count "$DISKS" 3 528 verify_zfsd_running 529 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" 530 ksh93 $(atf_get_srcdir)/zfsd_replace_002_pos.ksh 531 if [[ $? != 0 ]]; then 532 save_artifacts 533 atf_fail "Testcase failed" 534 fi 535} 536zfsd_replace_002_pos_cleanup() 537{ 538 . $(atf_get_srcdir)/../../include/default.cfg 539 . $(atf_get_srcdir)/zfsd.cfg 540 541 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 542} 543 544atf_test_case zfsd_replace_003_pos cleanup 545zfsd_replace_003_pos_head() 546{ 547 atf_set "descr" "ZFSD will correctly replace disks that dissapear and reappear with different devnames" 548 atf_set "require.progs" "ksh93 zpool zfs gnop" 549} 550zfsd_replace_003_pos_body() 551{ 552 . $(atf_get_srcdir)/../../include/default.cfg 553 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 554 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 555 556 verify_zfsd_running 557 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" 558 ksh93 $(atf_get_srcdir)/zfsd_replace_003_pos.ksh 559 if [[ $? != 0 ]]; then 560 save_artifacts 561 atf_fail "Testcase failed" 562 fi 563} 564zfsd_replace_003_pos_cleanup() 565{ 566 . $(atf_get_srcdir)/../../include/default.cfg 567 . $(atf_get_srcdir)/zfsd.cfg 568 569 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 570} 571 572atf_test_case zfsd_replace_004_pos cleanup 573zfsd_replace_004_pos_head() 574{ 575 atf_set "descr" "ZFSD will automatically replace a spare that disappears and reappears in the same location, with the same devname" 576 atf_set "require.progs" "ksh93 zpool zfs gnop" 577} 578zfsd_replace_004_pos_body() 579{ 580 . $(atf_get_srcdir)/../../include/default.cfg 581 . $(atf_get_srcdir)/zfsd.cfg 582 583 verify_disk_count "$DISKS" 2 584 verify_zfsd_running 585 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" 586 ksh93 $(atf_get_srcdir)/zfsd_replace_004_pos.ksh 587 if [[ $? != 0 ]]; then 588 save_artifacts 589 atf_fail "Testcase failed" 590 fi 591} 592zfsd_replace_004_pos_cleanup() 593{ 594 . $(atf_get_srcdir)/../../include/default.cfg 595 . $(atf_get_srcdir)/zfsd.cfg 596 597 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 598} 599 600atf_test_case zfsd_replace_005_pos cleanup 601zfsd_replace_005_pos_head() 602{ 603 atf_set "descr" "ZFSD will automatically replace a multi-pool spare that disappears and reappears" 604 atf_set "require.progs" "ksh93 zpool zfs gnop" 605} 606zfsd_replace_005_pos_body() 607{ 608 . $(atf_get_srcdir)/../../include/default.cfg 609 . $(atf_get_srcdir)/zfsd.cfg 610 611 verify_disk_count "$DISKS" 3 612 verify_zfsd_running 613 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" 614 ksh93 $(atf_get_srcdir)/zfsd_replace_005_pos.ksh 615 if [[ $? != 0 ]]; then 616 save_artifacts 617 atf_fail "Testcase failed" 618 fi 619} 620zfsd_replace_005_pos_cleanup() 621{ 622 . $(atf_get_srcdir)/../../include/default.cfg 623 . $(atf_get_srcdir)/zfsd.cfg 624 625 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 626} 627 628atf_test_case zfsd_import_001_pos cleanup 629zfsd_import_001_pos_head() 630{ 631 atf_set "descr" "If a removed drive gets reinserted while the pool is exported, it will detach its spare when imported." 632 atf_set "require.progs" "ksh93 gnop zfsd zpool" 633 atf_set "timeout" 3600 634} 635zfsd_import_001_pos_body() 636{ 637 . $(atf_get_srcdir)/../../include/default.cfg 638 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 639 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 640 641 verify_disk_count "$DISKS" 5 642 verify_zfsd_running 643 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" 644 ksh93 $(atf_get_srcdir)/zfsd_import_001_pos.ksh || atf_fail "Testcase failed" 645 if [[ $? != 0 ]]; then 646 save_artifacts 647 atf_fail "Testcase failed" 648 fi 649} 650zfsd_import_001_pos_cleanup() 651{ 652 . $(atf_get_srcdir)/../../include/default.cfg 653 . $(atf_get_srcdir)/../hotspare/hotspare.kshlib 654 . $(atf_get_srcdir)/../hotspare/hotspare.cfg 655 656 ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" 657} 658 659 660 661 662atf_init_test_cases() 663{ 664 atf_add_test_case zfsd_fault_001_pos 665 atf_add_test_case zfsd_fault_002_pos 666 atf_add_test_case zfsd_degrade_001_pos 667 atf_add_test_case zfsd_degrade_002_pos 668 atf_add_test_case zfsd_hotspare_001_pos 669 atf_add_test_case zfsd_hotspare_002_pos 670 atf_add_test_case zfsd_hotspare_003_pos 671 atf_add_test_case zfsd_hotspare_004_pos 672 atf_add_test_case zfsd_hotspare_005_pos 673 atf_add_test_case zfsd_hotspare_006_pos 674 atf_add_test_case zfsd_hotspare_007_pos 675 atf_add_test_case zfsd_hotspare_008_neg 676 atf_add_test_case zfsd_autoreplace_001_neg 677 atf_add_test_case zfsd_autoreplace_002_pos 678 atf_add_test_case zfsd_autoreplace_003_pos 679 atf_add_test_case zfsd_replace_001_pos 680 atf_add_test_case zfsd_replace_002_pos 681 atf_add_test_case zfsd_replace_003_pos 682 atf_add_test_case zfsd_replace_004_pos 683 atf_add_test_case zfsd_replace_005_pos 684 atf_add_test_case zfsd_import_001_pos 685} 686 687save_artifacts() 688{ 689 # If ARTIFACTS_DIR is defined, save test artifacts for 690 # post-mortem analysis 691 if [[ -n $ARTIFACTS_DIR ]]; then 692 TC_ARTIFACTS_DIR=${ARTIFACTS_DIR}/sys/cddl/zfs/tests/zfsd/$(atf_get ident) 693 mkdir -p $TC_ARTIFACTS_DIR 694 cp -a /var/log/zfsd.log* $TC_ARTIFACTS_DIR 695 bzip2 $TC_ARTIFACTS_DIR/zfsd.log 696 fi 697} 698 699verify_zfsd_running() 700{ 701 service zfsd onestatus || \ 702 atf_skip "zfsd(8) must be enabled and running for this test" 703} 704