aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_copies/zfs_copies.kshlib
diff options
context:
space:
mode:
authorMatt Macy <mmacy@FreeBSD.org>2020-08-24 23:31:26 +0000
committerMatt Macy <mmacy@FreeBSD.org>2020-08-24 23:31:26 +0000
commiteda14cbc264d6969b02f2b1994cef11148e914f1 (patch)
tree54766ce51e901d5ec66cdce87973bb1e210588e1 /sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_copies/zfs_copies.kshlib
parent8d9b400f9d02116e528968fa4e7d3c479e326e2a (diff)
parent3b0ce0e28db46d0403929aba45c682285e1ac217 (diff)
downloadsrc-eda14cbc264d6969b02f2b1994cef11148e914f1.tar.gz
src-eda14cbc264d6969b02f2b1994cef11148e914f1.zip
Initial import from vendor-sys branch of openzfs
Notes
Notes: svn path=/head/; revision=364740
Diffstat (limited to 'sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_copies/zfs_copies.kshlib')
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_copies/zfs_copies.kshlib158
1 files changed, 158 insertions, 0 deletions
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_copies/zfs_copies.kshlib b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_copies/zfs_copies.kshlib
new file mode 100644
index 000000000000..e886de432af4
--- /dev/null
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_copies/zfs_copies.kshlib
@@ -0,0 +1,158 @@
+#
+# 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 2008 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+#
+# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
+#
+
+. $STF_SUITE/include/libtest.shlib
+. $STF_SUITE/tests/functional/cli_root/zfs_copies/zfs_copies.cfg
+
+#
+# Compare the value of copies property with specified value
+# $1, the dataset name
+# $2, the expected copies value
+#
+function cmp_prop
+{
+ typeset ds=$1
+ typeset val_expect=$2
+ typeset val_actual
+
+ val_actual=$(get_prop copies $ds)
+ if [[ $val_actual != $val_expect ]]; then
+ log_fail "Expected value ($val_expect) != actual value " \
+ "($val_actual)"
+ fi
+}
+
+#
+# Check the used space is charged correctly
+# $1, the number of used space
+# $2, the expected common factor between the used space and the file space
+#
+function check_used
+{
+ typeset charged_spc=$1
+ typeset -i used
+ typeset -i expected_cfactor=$2
+ typeset -i cfactor
+ typeset -i fsize=${FILESIZE%[m|M]}
+
+ ((used = $charged_spc / 1024 / 1024))
+ ((cfactor = used / fsize))
+ if ((cfactor != expected_cfactor)); then
+ log_fail "The space is not charged correctly while setting" \
+ "copies as $expected_cfactor."
+ fi
+}
+
+#
+# test ncopies on volume
+# $1 test type zfs|ufs|ext2
+# $2 copies
+# $3 mntp for ufs|ext2 test
+function do_vol_test
+{
+ typeset type=$1
+ typeset copies=$2
+ typeset mntp=$3
+
+ vol=$TESTPOOL/$TESTVOL1
+ vol_b_path=$ZVOL_DEVDIR/$TESTPOOL/$TESTVOL1
+ vol_r_path=$ZVOL_RDEVDIR/$TESTPOOL/$TESTVOL1
+
+ log_must zfs create -V $VOLSIZE -o copies=$copies $vol
+ log_must zfs set refreservation=none $vol
+ block_device_wait
+
+ case "$type" in
+ "ext2")
+ if is_freebsd; then
+ log_unsupported "ext2 test not implemented for freebsd"
+ fi
+ log_must eval "new_fs $vol_r_path >/dev/null 2>&1"
+ log_must mount -o rw $vol_b_path $mntp
+ ;;
+ "ufs")
+ if is_linux; then
+ log_unsupported "ufs test not implemented for linux"
+ fi
+ log_must eval "new_fs $vol_r_path >/dev/null 2>&1"
+ log_must mount $vol_b_path $mntp
+ ;;
+ "zfs")
+ if is_freebsd; then
+ # Pool creation on zvols is forbidden by default.
+ # Save and restore the current setting.
+ typeset _saved=$(get_tunable VOL_RECURSIVE)
+ log_must set_tunable64 VOL_RECURSIVE 1 # Allow
+ zpool create $TESTPOOL1 $vol_b_path
+ typeset _zpool_create_result=$?
+ log_must set_tunable64 VOL_RECURSIVE $_saved # Restore
+ log_must test $_zpool_create_result = 0
+ else
+ log_must zpool create $TESTPOOL1 $vol_b_path
+ fi
+ log_must zfs create $TESTPOOL1/$TESTFS1
+ ;;
+ *)
+ log_unsupported "$type test not implemented"
+ ;;
+ esac
+
+ ((nfilesize = copies * ${FILESIZE%m}))
+ pre_used=$(get_prop used $vol)
+ ((target_size = pre_used + nfilesize))
+
+ if [[ $type == "zfs" ]]; then
+ log_must mkfile $FILESIZE /$TESTPOOL1/$TESTFS1/$FILE
+ else
+ log_must mkfile $FILESIZE $mntp/$FILE
+ fi
+
+ post_used=$(get_prop used $vol)
+ ((retries = 0))
+ while ((post_used < target_size && retries++ < 42)); do
+ sleep 1
+ post_used=$(get_prop used $vol)
+ done
+
+ ((used = post_used - pre_used))
+ if ((used < nfilesize)); then
+ log_fail "The space is not charged correctly while setting" \
+ "copies as $copies ($used < $nfilesize)" \
+ "pre=${pre_used} post=${post_used}"
+ fi
+
+ if [[ $type == "zfs" ]]; then
+ log_must zpool destroy $TESTPOOL1
+ else
+ log_must umount $mntp
+ fi
+
+ log_must zfs destroy $vol
+}