mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-28 03:49:38 +03:00
7839c4b5e1
Update the common ZTS scripts and individual test cases as needed in order to allow them to be run on FreeBSD. The high level goal is to provide compatibility wrappers whenever possible to minimize changes to individual test cases. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: John Kennedy <john.kennedy@delphix.com> Signed-off-by: Matt Macy <mmacy@FreeBSD.org> Signed-off-by: Ryan Moeller <ryan@ixsystems.com> Closes #9692
144 lines
3.6 KiB
Plaintext
144 lines
3.6 KiB
Plaintext
#
|
|
# This file and its contents are supplied under the terms of the
|
|
# Common Development and Distribution License ("CDDL"), version 1.0.
|
|
# You may only use this file in accordance with the terms of version
|
|
# 1.0 of the CDDL.
|
|
#
|
|
# A full copy of the text of the CDDL should have accompanied this
|
|
# source. A copy of the CDDL is also available via the Internet at
|
|
# http://www.illumos.org/license/CDDL.
|
|
#
|
|
|
|
#
|
|
# Copyright (c) 2012, 2016, Delphix. All rights reserved.
|
|
#
|
|
|
|
typeset -a compress_prop_vals=('off' 'lzjb' 'lz4' 'gzip' 'zle')
|
|
typeset -a checksum_prop_vals=('on' 'off' 'fletcher2' 'fletcher4' 'sha256'
|
|
'noparity' 'sha512' 'skein' 'edonr')
|
|
typeset -a recsize_prop_vals=('512' '1024' '2048' '4096' '8192' '16384'
|
|
'32768' '65536' '131072' '262144' '524288' '1048576')
|
|
typeset -a canmount_prop_vals=('on' 'off' 'noauto')
|
|
typeset -a copies_prop_vals=('1' '2' '3')
|
|
typeset -a logbias_prop_vals=('latency' 'throughput')
|
|
typeset -a primarycache_prop_vals=('all' 'none' 'metadata')
|
|
typeset -a redundant_metadata_prop_vals=('all' 'most')
|
|
typeset -a secondarycache_prop_vals=('all' 'none' 'metadata')
|
|
typeset -a snapdir_prop_vals=('hidden' 'visible')
|
|
typeset -a sync_prop_vals=('standard' 'always' 'disabled')
|
|
|
|
typeset -a fs_props=('compress' 'checksum' 'recsize'
|
|
'canmount' 'copies' 'logbias' 'primarycache' 'redundant_metadata'
|
|
'secondarycache' 'snapdir' 'sync')
|
|
typeset -a vol_props=('compress' 'checksum' 'copies' 'logbias' 'primarycache'
|
|
'secondarycache' 'redundant_metadata' 'sync')
|
|
|
|
#
|
|
# Given the property array passed in, return 'num_props' elements to the
|
|
# user, excluding any elements below 'start.' This allows us to exclude
|
|
# 'off' and 'on' which can be either unwanted, or a duplicate of another
|
|
# property respectively.
|
|
#
|
|
function get_rand_prop
|
|
{
|
|
typeset prop_array=($(eval echo \${$1[@]}))
|
|
typeset -i num_props=$2
|
|
typeset -i start=$3
|
|
typeset retstr=""
|
|
|
|
[[ -z $prop_array || -z $num_props || -z $start ]] && \
|
|
log_fail "get_rand_prop: bad arguments"
|
|
|
|
typeset prop_max=$((${#prop_array[@]} - 1))
|
|
typeset -i i
|
|
for i in $(shuf -i $start-$prop_max -n $num_props); do
|
|
retstr="${prop_array[$i]} $retstr"
|
|
done
|
|
echo $retstr
|
|
}
|
|
|
|
function get_rand_checksum
|
|
{
|
|
get_rand_prop checksum_prop_vals $1 2
|
|
}
|
|
|
|
function get_rand_checksum_any
|
|
{
|
|
get_rand_prop checksum_prop_vals $1 0
|
|
}
|
|
|
|
function get_rand_recsize
|
|
{
|
|
get_rand_prop recsize_prop_vals $1 0
|
|
}
|
|
|
|
function get_rand_large_recsize
|
|
{
|
|
get_rand_prop recsize_prop_vals $1 9
|
|
}
|
|
|
|
#
|
|
# Functions to toggle on/off properties
|
|
#
|
|
typeset -a binary_props=('atime' 'devices' 'exec' 'readonly' 'setuid' 'xattr')
|
|
|
|
if is_freebsd; then
|
|
binary_props+=('jailed')
|
|
else
|
|
binary_props+=('zoned')
|
|
fi
|
|
|
|
if is_linux; then
|
|
# Only older kernels support non-blocking mandatory locks
|
|
if [[ $(linux_version) -lt $(linux_version "4.4") ]]; then
|
|
binary_props+=('nbmand')
|
|
fi
|
|
else
|
|
binary_props+=('nbmand')
|
|
fi
|
|
|
|
function toggle_prop
|
|
{
|
|
typeset ds=$1
|
|
typeset prop=$2
|
|
|
|
datasetexists $ds || log_fail "$ds does not exist"
|
|
typeset val=$(get_prop $prop $ds)
|
|
typeset newval='off'
|
|
|
|
[[ $val = $newval ]] && newval='on'
|
|
log_must zfs set $prop=$newval $ds
|
|
}
|
|
|
|
function toggle_binary_props
|
|
{
|
|
typeset ds=$1
|
|
typeset prop
|
|
|
|
for prop in "${binary_props[@]}"; do
|
|
toggle_prop $ds $prop
|
|
done
|
|
}
|
|
|
|
function randomize_ds_props
|
|
{
|
|
typeset ds=$1
|
|
typeset prop proplist val
|
|
|
|
datasetexists $ds || log_fail "$ds does not exist"
|
|
if ds_is_volume $ds; then
|
|
toggle_prop $ds readonly
|
|
proplist="${vol_props[@]}"
|
|
elif ds_is_filesystem $ds; then
|
|
toggle_binary_props $ds
|
|
proplist="${fs_props[@]}"
|
|
else
|
|
log_fail "$ds is neither a volume nor a file system"
|
|
fi
|
|
|
|
for prop in $proplist; do
|
|
typeset val=$(get_rand_prop "${prop}_prop_vals" 1 0)
|
|
log_must zfs set $prop=$val $ds
|
|
done
|
|
}
|