Index: projects/zfsd/head/tests/sys/cddl/zfs/include/commands.txt =================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/include/commands.txt (revision 328568) +++ projects/zfsd/head/tests/sys/cddl/zfs/include/commands.txt (revision 328569) @@ -1,190 +1,191 @@ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # #!/usr/local/bin/ksh93 -p # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # #ident "@(#)commands.txt 1.8 09/01/13 SMI" # # All the commands in this file are converted into environment variables # with the same name as the command e.g. # # /bin/df becomes export DF="/bin/df" # finally an export CMDS="aggregation of all the environment variables" # is created for checking in the execution environment. # # comments are ignored in this file, as are whitespace lines # General Solaris Commands /usr/bin/awk /usr/sbin/arp /usr/bin/basename /usr/bin/bzcat /bin/cat /usr/bin/cd /usr/bin/chgrp /bin/chmod /usr/sbin/chown /usr/bin/cksum /sbin/clri /usr/bin/cmp /usr/bin/compress /usr/bin/uncompress #/usr/bin/coreadm /bin/cp /usr/bin/cpio /usr/bin/cut /bin/date /bin/dd #/usr/sbin/devfsadm %%STFSUITEDIR%%/bin/df /usr/bin/diff %%STFSUITEDIR%%/bin/dircmp /usr/bin/dirname /usr/bin/du #%%STFSUITEDIR%%/bin/dumpadm /bin/echo /usr/bin/egrep /usr/bin/env #%%STFSUITEDIR%%/bin/ff /usr/bin/fgrep /usr/bin/file /usr/bin/find #%%STFSUITEDIR%%/bin/fmadm #%%STFSUITEDIR%%/bin/fmdump #%%STFSUITEDIR%%/bin/format /sbin/fsck /sbin/fsdb /sbin/fsirand /usr/bin/fsync /usr/sbin/fstyp /usr/bin/id #/usr/bin/isainfo #/usr/sbin/iscsiadm #/usr/sbin/iscsitadm /usr/bin/getent /bin/getfacl /usr/bin/getconf /sbin/sha1 /sbin/gpart /usr/bin/grep /usr/bin/groups %%STFSUITEDIR%%/bin/groupadd %%STFSUITEDIR%%/bin/groupdel %%STFSUITEDIR%%/bin/groupmod %%STFSUITEDIR%%/bin/groupshow /usr/bin/head /bin/hostname /bin/kill /usr/local/bin/ksh93 #/usr/sbin/labelit #/usr/sbin/lockfs #/usr/sbin/lofiadm /bin/ls /usr/bin/logname #/usr/bin/mdb /sbin/mdconfig #/usr/sbin/metaclear #/usr/sbin/metadb #/usr/sbin/metainit #/usr/sbin/metastat /bin/mkdir /sbin/mknod #/usr/sbin/modinfo #/usr/sbin/modunload /sbin/mount /bin/mv #/usr/sbin/ncheck /sbin/newfs /usr/bin/nawk #/usr/bin/pack /usr/bin/pagesize /bin/pax /sbin/ping /usr/bin/printf #/usr/sbin/prtvtoc #/usr/bin/pfexec /bin/pgrep #/usr/bin/pkginfo /bin/pkill /bin/ps #/usr/sbin/psrinfo /bin/pwd /usr/sbin/quotaon /bin/rcp /sbin/reboot /bin/rm /bin/rmdir /usr/bin/rsh #/usr/bin/runat /usr/bin/sed #/usr/sbin/share /bin/sleep /usr/bin/su /usr/bin/sum #%%STFSUITEDIR%%/bin/svcs #/usr/sbin/svcadm #%%STFSUITEDIR%%/bin/swap #/sbin/swapadd /usr/bin/sort /usr/bin/strings /bin/sync /usr/bin/tar /usr/bin/tail +/usr/bin/timeout /usr/bin/touch /usr/bin/tr /usr/bin/true /usr/bin/truncate /sbin/tunefs #/usr/sbin/ufsdump #/usr/sbin/ufsrestore /usr/bin/umask /sbin/umount /usr/bin/uname /usr/bin/uniq #/usr/sbin/unshare #/usr/bin/unpack %%STFSUITEDIR%%/bin/useradd %%STFSUITEDIR%%/bin/userdel %%STFSUITEDIR%%/bin/usermod /usr/bin/wait /usr/bin/wc #%%STFSUITEDIR%%/bin/zoneadm #%%STFSUITEDIR%%/bin/zonecfg #%%STFSUITEDIR%%/bin/zlogin #/usr/bin/zonename /sbin/swapon /sbin/swapoff /sbin/swapctl /usr/bin/xargs /usr/sbin/zfsd # ZFS Commands /usr/sbin/zdb /sbin/zfs /sbin/zpool /usr/bin/zinject # Test framework commands #/opt/SUNWstc-runwattr/bin/runwattr %%STFSUITEDIR%%/bin/bsddisks Index: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/Makefile =================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/Makefile (revision 328568) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/Makefile (revision 328569) @@ -1,25 +1,26 @@ # $FreeBSD$ .include PACKAGE=tests TESTSDIR=${TESTSBASE}/sys/cddl/zfs/tests/cli_root/zpool_add FILESDIR=${TESTSDIR} ATF_TESTS_KSH93+= zpool_add_test -${PACKAGE}FILES+= zpool_add_002_pos.ksh -${PACKAGE}FILES+= zpool_add_006_pos.ksh -${PACKAGE}FILES+= zpool_add_007_neg.ksh ${PACKAGE}FILES+= cleanup.ksh -${PACKAGE}FILES+= zpool_add_003_pos.ksh +${PACKAGE}FILES+= setup.ksh ${PACKAGE}FILES+= zpool_add.cfg +${PACKAGE}FILES+= zpool_add.kshlib ${PACKAGE}FILES+= zpool_add_001_pos.ksh +${PACKAGE}FILES+= zpool_add_002_pos.ksh +${PACKAGE}FILES+= zpool_add_003_pos.ksh +${PACKAGE}FILES+= zpool_add_004_pos.ksh ${PACKAGE}FILES+= zpool_add_005_pos.ksh +${PACKAGE}FILES+= zpool_add_006_pos.ksh +${PACKAGE}FILES+= zpool_add_007_neg.ksh ${PACKAGE}FILES+= zpool_add_008_neg.ksh -${PACKAGE}FILES+= setup.ksh -${PACKAGE}FILES+= zpool_add_004_pos.ksh -${PACKAGE}FILES+= zpool_add.kshlib ${PACKAGE}FILES+= zpool_add_009_neg.ksh +${PACKAGE}FILES+= zpool_add_010_pos.ksh .include Index: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_010_pos.ksh =================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_010_pos.ksh (nonexistent) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_010_pos.ksh (revision 328569) @@ -0,0 +1,54 @@ +#!/usr/local/bin/ksh93 -p +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2017 Spectra Logic Corp. All rights reserved. +# Use is subject to license terms. +# +. $STF_SUITE/include/libtest.kshlib +. $STF_SUITE/tests/cli_root/zpool_add/zpool_add.kshlib + +verify_runnable "global" + +function cleanup +{ + poolexists $TESTPOOL && \ + destroy_pool $TESTPOOL + + partition_cleanup +} + +log_assert "'zpool add' can add devices, even if a replacing vdev with a spare child is present" + +log_onexit cleanup + +create_pool $TESTPOOL mirror ${DISK0} ${DISK1} +# A replacing vdev will automatically detach the older member when resilvering +# is complete. We don't want that to happen during this test, so write some +# data just to slow down resilvering. +$TIMEOUT 60s $DD if=/dev/zero of=/$TESTPOOL/zerofile bs=128k +log_must $ZPOOL replace $TESTPOOL ${DISK0} ${DISK2} +log_must $ZPOOL add $TESTPOOL spare ${DISK3} +log_must $ZPOOL replace $TESTPOOL ${DISK0} ${DISK3} +log_must $ZPOOL add $TESTPOOL spare ${DISK4} + +log_pass "'zpool add ...' executes successfully, even when a replacing vdev with a spare child is present" Index: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_test.sh =================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_test.sh (revision 328568) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_test.sh (revision 328569) @@ -1,283 +1,312 @@ # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2012 Spectra Logic. All rights reserved. # Use is subject to license terms. # atf_test_case zpool_add_001_pos cleanup zpool_add_001_pos_head() { atf_set "descr" "'zpool add ...' can add devices to the pool." atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } zpool_add_001_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_add_001_pos.ksh || atf_fail "Testcase failed" } zpool_add_001_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_add_002_pos cleanup zpool_add_002_pos_head() { - atf_set "descr" "'zpool add -f ...' can successfully adddevices to the pool in some cases." + atf_set "descr" "'zpool add -f ...' can successfully add devices to the pool in some cases." atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } zpool_add_002_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_add_002_pos.ksh || atf_fail "Testcase failed" } zpool_add_002_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_add_003_pos cleanup zpool_add_003_pos_head() { - atf_set "descr" "'zpool add -n ...' can display the configurationwithout actually adding devices to the pool." + atf_set "descr" "'zpool add -n ...' can display the configuration without actually adding devices to the pool." atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } zpool_add_003_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_add_003_pos.ksh || atf_fail "Testcase failed" } zpool_add_003_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_add_004_pos cleanup zpool_add_004_pos_head() { atf_set "descr" "'zpool add ...' can add zfs volume to the pool." atf_set "require.config" disks_are_physical atf_set "require.progs" zfs zpool atf_set "timeout" 2400 } zpool_add_004_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg verify_zvol_recursive ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_add_004_pos.ksh || atf_fail "Testcase failed" } zpool_add_004_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_add_005_pos cleanup zpool_add_005_pos_head() { atf_set "descr" "'zpool add' should fail with inapplicable scenarios." atf_set "require.config" disks_are_physical atf_set "require.progs" dumpadm zpool atf_set "timeout" 2400 } zpool_add_005_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_add_005_pos.ksh || atf_fail "Testcase failed" } zpool_add_005_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_add_006_pos cleanup zpool_add_006_pos_head() { atf_set "descr" "'zpool add [-f]' can add large numbers of vdevs to the specified pool without any errors." atf_set "require.config" disks_are_physical atf_set "require.progs" zfs zpool atf_set "timeout" 2400 } zpool_add_006_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_add_006_pos.ksh || atf_fail "Testcase failed" } zpool_add_006_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_add_007_neg cleanup zpool_add_007_neg_head() { atf_set "descr" "'zpool add' should return an error with badly-formed parameters." atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } zpool_add_007_neg_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_add_007_neg.ksh || atf_fail "Testcase failed" } zpool_add_007_neg_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_add_008_neg cleanup zpool_add_008_neg_head() { atf_set "descr" "'zpool add' should return an error with nonexistent pools and vdevs" atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } zpool_add_008_neg_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_add_008_neg.ksh || atf_fail "Testcase failed" } zpool_add_008_neg_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_add_009_neg cleanup zpool_add_009_neg_head() { atf_set "descr" "'zpool add' should fail if vdevs are the same or vdev iscontained in the given pool." atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } zpool_add_009_neg_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_add_009_neg.ksh || atf_fail "Testcase failed" } zpool_add_009_neg_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_add.kshlib . $(atf_get_srcdir)/zpool_add.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } +# Regression test for PR 225546. "zpool add" asserts if the pool contains a +# replacing vdev with a spare child. +# Assertion failed: (nvlist_lookup_string(cnv, "path", &path) == 0), file /usr/home/alans/freebsd/head/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c, line 694. /usr/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_010_pos.ksh[54]: log_must[69]: log_pos: line 206: 27710: Abort(coredump) +atf_test_case zpool_add_010_pos cleanup +zpool_add_010_pos_head() +{ + atf_set "descr" "'zpool add' can add devices, even if a replacing vdev with a spare child is present" + atf_set "require.progs" zpool +} +zpool_add_010_pos_body() +{ + . $(atf_get_srcdir)/../../../include/default.cfg + . $(atf_get_srcdir)/zpool_add.kshlib + . $(atf_get_srcdir)/zpool_add.cfg + atf_expect_fail "PR 225546 zpool add crashes in the presence of a replacing vdev with a spare child" + verify_disk_count "$DISKS" 5 + ksh93 $(atf_get_srcdir)/zpool_add_010_pos.ksh || atf_fail "Testcase failed" +} +zpool_add_010_pos_cleanup() +{ + . $(atf_get_srcdir)/../../../include/default.cfg + . $(atf_get_srcdir)/zpool_add.kshlib + . $(atf_get_srcdir)/zpool_add.cfg + + ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" +} + + atf_init_test_cases() { atf_add_test_case zpool_add_001_pos atf_add_test_case zpool_add_002_pos atf_add_test_case zpool_add_003_pos atf_add_test_case zpool_add_004_pos atf_add_test_case zpool_add_005_pos atf_add_test_case zpool_add_006_pos atf_add_test_case zpool_add_007_neg atf_add_test_case zpool_add_008_neg atf_add_test_case zpool_add_009_neg + atf_add_test_case zpool_add_010_pos }