Index: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_upgrade/zfs_upgrade.kshlib =================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_upgrade/zfs_upgrade.kshlib (revision 323054) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_upgrade/zfs_upgrade.kshlib (revision 323055) @@ -1,182 +1,193 @@ # # 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 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "@(#)zfs_upgrade.kshlib 1.3 09/06/22 SMI" # . $STF_SUITE/include/libtest.kshlib # # For zfs create. # When pool version is 15, fs whose version is 4 can be created. # set -A zpl_create_versions 3 4 5 set -A spa_create_versions 9 15 24 # # For zfs upgrade # set -A zpl_upgrade_versions 3 4 5 set -A spa_upgrade_versions 9 15 24 +function get_pool_version #pool +{ + typeset pool=$1 + typeset vs=$(get_pool_prop version $pool) + if [ "$vs" = "-" ]; then + echo 5000 + else + echo "$vs" + fi +} + function default_setup_datasets #rootfs { typeset rootfs=$1 typeset pool=${rootfs%%/*} - typeset -i vp=$(get_pool_prop version $pool) + typeset -i vp=$(get_pool_version $pool) typeset -i version typeset -i m typeset -i spa_version typeset -i zpl_version for version in $ZFS_ALL_VERSIONS ; do typeset verfs eval verfs=\$ZFS_VERSION_$version typeset current_fs=$rootfs/$verfs typeset current_snap=${current_fs}@snap typeset current_clone=$rootfs/clone$verfs (( m=0 )) (( spa_version=0 )) while (( m < ${#zpl_create_versions[@]} )); do (( zpl_version=${zpl_create_versions[m]} )) if (( version == zpl_version )); then (( spa_version=${spa_create_versions[m]} )) break fi (( m+=1 )) done if (( spa_version != 0 )) && (( vp < spa_version )); then log_mustnot $ZFS create -o version=${version} ${current_fs} continue fi log_must $ZFS create -o version=${version} ${current_fs} log_must $ZFS snapshot ${current_snap} log_must $ZFS clone ${current_snap} ${current_clone} for subversion in $ZFS_ALL_VERSIONS ; do typeset subverfs eval subverfs=\$ZFS_VERSION_$subversion (( m=0 )) (( spa_version=0 )) while (( m < ${#zpl_create_versions[@]} )); do (( zpl_version=${zpl_create_versions[m]} )) if (( subversion == zpl_version )); then (( spa_version=${spa_create_versions[m]} )) break fi (( m+=1 )) done if (( spa_version != 0 )) && (( vp < spa_version )); then log_mustnot $ZFS create -o \ version=${subversion} ${current_fs}/$subverfs else log_must $ZFS create -o \ version=${subversion} ${current_fs}/$subverfs fi done done } function default_cleanup_datasets #rootfs { typeset rootfs=$1 if datasetexists $rootfs ; then log_must $ZFS destroy -Rf $rootfs fi if datasetnonexists $rootfs ; then log_must $ZFS create $rootfs fi } function default_check_zfs_upgrade #rootfs { typeset rootfs=$1 typeset pool=${rootfs%%/*} - typeset -i vp=$(get_pool_prop version $pool) + typeset -i vp="$(get_pool_version $pool)" typeset -i m typeset -i spa_version typeset -i zpl_version typeset newv typeset -i df_ret $DF -F zfs / > /dev/null 2>&1 df_ret=$? for newv in "" $ZFS_VERSION; do default_setup_datasets $rootfs if [[ -n $newv ]]; then opt="-V $newv" else newv=$ZFS_VERSION fi (( m=0 )) (( spa_version=0 )) while (( m < ${#zpl_upgrade_versions[@]} )); do (( zpl_version=${zpl_upgrade_versions[m]} )) if (( newv == zpl_version )); then (( spa_version=${spa_upgrade_versions[m]} )) break fi (( m+=1 )) done if (( df_ret != 0 )); then if (( spa_version != 0 )) && (( vp < spa_version )); then log_mustnot eval '$ZFS upgrade $opt -a > /dev/null 2>&1' log_must eval '$ZPOOL upgrade $pool > /dev/null 2>&1' - vp=$(get_pool_prop version $pool) + vp="$(get_pool_version $pool)" fi log_must eval '$ZFS upgrade $opt -a > /dev/null 2>&1' for fs in $($ZFS list -rH -t filesystem -o name $rootfs) ; do log_must check_fs_version $fs $newv done fi default_cleanup_datasets $rootfs done } function check_fs_version #filesystem version { typeset fs=$1 typeset -i version=${2:-$ZFS_VERSION} if [[ -z $fs ]]; then log_fail "No filesystem specified." fi typeset -i curv=$(get_prop version $fs) if (( curv != version )); then return 1 fi return 0 } Index: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_upgrade/zpool_upgrade_test.sh =================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_upgrade/zpool_upgrade_test.sh (revision 323054) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_upgrade/zpool_upgrade_test.sh (revision 323055) @@ -1,287 +1,286 @@ # 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_upgrade_001_pos cleanup zpool_upgrade_001_pos_head() { atf_set "descr" "Executing 'zpool upgrade -v' command succeeds." atf_set "require.progs" zpool atf_set "timeout" 1800 } zpool_upgrade_001_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg verify_disk_count "$DISKS" 2 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_upgrade_001_pos.ksh || atf_fail "Testcase failed" } zpool_upgrade_001_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_upgrade_002_pos cleanup zpool_upgrade_002_pos_head() { atf_set "descr" "Import pools of all versions - zpool upgrade on each pools works" atf_set "require.progs" zpool atf_set "timeout" 1800 } zpool_upgrade_002_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg verify_disk_count "$DISKS" 2 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_upgrade_002_pos.ksh || atf_fail "Testcase failed" } zpool_upgrade_002_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_upgrade_003_pos cleanup zpool_upgrade_003_pos_head() { atf_set "descr" "Upgrading a pool that has already been upgraded succeeds." atf_set "require.progs" zpool atf_set "timeout" 1800 } zpool_upgrade_003_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg verify_disk_count "$DISKS" 2 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_upgrade_003_pos.ksh || atf_fail "Testcase failed" } zpool_upgrade_003_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_upgrade_004_pos cleanup zpool_upgrade_004_pos_head() { atf_set "descr" "zpool upgrade -a works" atf_set "require.progs" zpool atf_set "timeout" 1800 } zpool_upgrade_004_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg verify_disk_count "$DISKS" 2 [[ -n "$KEEP" ]] && \ atf_skip "Can't test unmount -a when pools are in KEEP" ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_upgrade_004_pos.ksh || atf_fail "Testcase failed" } zpool_upgrade_004_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_upgrade_005_neg cleanup zpool_upgrade_005_neg_head() { atf_set "descr" "Variations of upgrade -v print usage message,return with non-zero status" atf_set "require.progs" zpool atf_set "timeout" 1800 } zpool_upgrade_005_neg_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg verify_disk_count "$DISKS" 2 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_upgrade_005_neg.ksh || atf_fail "Testcase failed" } zpool_upgrade_005_neg_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_upgrade_006_neg cleanup zpool_upgrade_006_neg_head() { atf_set "descr" "Attempting to upgrade a non-existent pool will return an error" atf_set "require.progs" zpool atf_set "timeout" 1800 } zpool_upgrade_006_neg_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg verify_disk_count "$DISKS" 2 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_upgrade_006_neg.ksh || atf_fail "Testcase failed" } zpool_upgrade_006_neg_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_upgrade_007_pos cleanup zpool_upgrade_007_pos_head() { atf_set "descr" "Import pools of all versions - 'zfs upgrade' on each pools works" atf_set "require.progs" zpool # This test can take quite a while, especially on debug bits. atf_set "timeout" 7200 } zpool_upgrade_007_pos_body() { - atf_fail "This test causes a panic on FreeBSD" . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg verify_disk_count "$DISKS" 2 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_upgrade_007_pos.ksh || atf_fail "Testcase failed" } zpool_upgrade_007_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_upgrade_008_pos cleanup zpool_upgrade_008_pos_head() { atf_set "descr" "Zpool upgrade should be able to upgrade pools to a given version using -V" atf_set "require.progs" zpool atf_set "timeout" 1800 } zpool_upgrade_008_pos_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg verify_disk_count "$DISKS" 2 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_upgrade_008_pos.ksh || atf_fail "Testcase failed" } zpool_upgrade_008_pos_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_test_case zpool_upgrade_009_neg cleanup zpool_upgrade_009_neg_head() { atf_set "descr" "Zpool upgrade -V shouldn't be able to upgrade a pool to an unknown version" atf_set "require.progs" zpool atf_set "timeout" 1800 } zpool_upgrade_009_neg_body() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg verify_disk_count "$DISKS" 2 ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed" ksh93 $(atf_get_srcdir)/zpool_upgrade_009_neg.ksh || atf_fail "Testcase failed" } zpool_upgrade_009_neg_cleanup() { . $(atf_get_srcdir)/../../../include/default.cfg . $(atf_get_srcdir)/zpool_upgrade.kshlib . $(atf_get_srcdir)/zpool_upgrade.cfg ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed" } atf_init_test_cases() { atf_add_test_case zpool_upgrade_001_pos atf_add_test_case zpool_upgrade_002_pos atf_add_test_case zpool_upgrade_003_pos atf_add_test_case zpool_upgrade_004_pos atf_add_test_case zpool_upgrade_005_neg atf_add_test_case zpool_upgrade_006_neg atf_add_test_case zpool_upgrade_007_pos atf_add_test_case zpool_upgrade_008_pos atf_add_test_case zpool_upgrade_009_neg }