6 echo ${dir} | egrep '^/' >/dev/null 2>&1
10 maindir="`pwd`/${dir}/../.."
13 # Set up correct command names and switches
14 if [ -z "${LUSTRE}" ]; then
27 # Use correct arguments to cmd line programs
28 stat --version 2>/dev/null | grep GNU >/dev/null
32 if [ "${os}" = "SunOS" ]; then
33 import_flags="-d /dev/lofi"
41 echo "${1}" > /dev/stderr
48 dd if="${1}" bs=1M 2>/dev/null | openssl md5
56 dd if=/dev/urandom of=${name} bs=${size} count=1 >/dev/null 2>&1
63 eexp=`echo "${eorig}" | egrep -v '^[ ]*$' | sed 's/^[ ][ ]*//g;s/[ ][ ]*$//g;s/[ ][ ]*/ /g;s/$/%EoL%/' | xargs`
65 gorig=`sh -c "$*" 2>&1`
66 got=`echo "${gorig}" | egrep -v '^[ ]*$' | sed 's/^[ ][ ]*//g;s/[ ][ ]*$//g;s/[ ][ ]*/ /g;s/$/%EoL%/' | xargs`
67 echo "${got}" | egrep "${eexp}" >/dev/null
69 echo "ok ${ntest} ${add_msg}"
71 echo "not ok ${ntest} ${add_msg}"
72 echo "# ----- expected from: $*"
73 echo "${eorig}" | sed 's/^/# /'
75 echo "${gorig}" | sed 's/^/# /'
78 ntest=`expr $ntest + 1`
85 if [ $ec -eq 0 ]; then
86 echo "ok ${ntest} ${add_msg}"
87 echo "# ----- expected success from: $*"
88 if [ ! -z "${out}" ]; then
89 echo "# ----- output (exit code=${ec}):"
90 echo "${out}" | sed 's/^/# /'
94 echo "not ok ${ntest} ${add_msg}"
95 echo "# ----- expected success from: $*"
96 echo "# ----- output (exit code=${ec}):"
97 echo "${out}" | sed 's/^/# /'
100 ntest=`expr $ntest + 1`
107 if [ $ec -ne 0 ]; then
108 echo "ok ${ntest} ${add_msg}"
109 echo "# ----- expected failure from: $*"
110 if [ ! -z "${out}" ]; then
111 echo "# ----- output (exit code=${ec}):"
112 echo "${out}" | sed 's/^/# /'
116 echo "not ok ${ntest} ${add_msg}"
117 echo "# ----- expected failure from: $*"
118 echo "# ----- output (exit code=${ec}):"
119 echo "${out}" | sed 's/^/# /'
122 ntest=`expr $ntest + 1`
132 # Set up a scratch tmpfs directory (Linux only)
135 cmd="mktemp -d /tmp/zfs-regression.XXXXXXXXXX"
136 TMPDIR=`${cmd}` || die "failed: ${cmd}"
137 cmd="mount -t tmpfs none ${TMPDIR}"
138 ${cmd} || die "failed: ${cmd}"
141 # Clean up the tmpfs directory (Linux only)
144 if [ -n "${TMPDIR}" ]; then
145 cmd="umount ${TMPDIR} && rmdir ${TMPDIR}"
146 eval "${cmd}" || die "failed: ${cmd}"
156 cmd="dd if=/dev/null of=${file} bs=1 count=0 seek=${size}"
157 ${cmd} > /dev/null 2>&1 || die "failed: ${cmd}"
160 # Create a memory-backed block device
166 if [ "${os}" = "FreeBSD" ]; then
167 if [ -n "${devname}" ]; then
168 devparam="-u ${devname}"
170 cmd="mdconfig -a -t swap -s ${size} ${devparam}"
171 DISKNAME=`$cmd 2>/dev/null` || die "failed: ${cmd}"
172 if [ -n "${devname}" ]; then
173 DISKNAME="${devname}"
175 FDISKNAME="/dev/${DISKNAME}"
176 elif [ "${os}" = "SunOS" ]; then
177 cmd="mktemp /tmp/zfstest.XXXXXXXXXX"
178 fname=`${cmd}` || die "failed: ${cmd}"
180 truncate_cmd "${size}" "${fname}"
182 if [ -n "${devname}" ]; then
183 cmd="lofiadm -a ${fname} ${devname}"
184 ${cmd} || die "failed: ${cmd}"
185 DISKNAME="${devname}"
187 cmd="lofiadm -a ${fname}"
188 DISKNAME=`${cmd}` || die "failed: ${cmd}"
190 FDISKNAME="${DISKNAME}"
191 elif [ "${os}" = "Linux" ]; then
192 if [ -z "${TMPDIR_DISKS}" ]; then
194 TMPDIR_DISKS="${TMPDIR}"
197 cmd="mktemp ${TMPDIR_DISKS}/disk.XXXXXXXXXX"
198 fname=`${cmd}` || die "failed: ${cmd}"
200 truncate_cmd "${size}" "${fname}"
202 if [ -n "${devname}" ]; then
203 devname=`echo ${devname} | cut -c 9-`
204 cmd="losetup /dev/${devname} ${fname} 2>&1"
205 eval ${cmd} || die "failed: ${cmd}"
206 DISKNAME="${devname}"
208 cmd="losetup -s -f ${fname} 2>&1"
209 diskname=`eval ${cmd}`
211 if [ "${diskname}" = "losetup: could not find any free loop device" ]; then
212 # If there are no free loopback devices, create one more
213 max=`echo /dev/loop* | awk 'BEGIN { RS=" "; FS="loop" } {if ($2 > max) max = $2} END {print max}'`
215 cmd="mknod /dev/loop${max} b 7 ${max}"
216 ${cmd} || die "failed: ${cmd}"
218 cmd="losetup -s -f ${fname}"
219 diskname=`${cmd}` || die "failed: ${cmd}"
221 DISKNAME=`eval echo ${diskname} | sed 's/^\/dev\///'`
223 ln /dev/${DISKNAME} /dev/zfstest_${DISKNAME}
224 DISKNAME="zfstest_${DISKNAME}"
225 FDISKNAME="/dev/${DISKNAME}"
227 die "Sorry, your OS is not supported"
231 # Destroy a memory-backed block device
236 if [ "${os}" = "FreeBSD" ]; then
237 cmd="mdconfig -d -u ${disk}"
238 ${cmd} || die "failed: ${cmd}"
239 elif [ "${os}" = "SunOS" ]; then
240 cmd="lofiadm ${disk}"
241 fname=`${cmd}` || die "failed: ${cmd}"
243 cmd="lofiadm -d ${disk}"
244 ${cmd} || die "failed: ${cmd}"
247 ${cmd} || die "failed: ${cmd}"
248 elif [ "${os}" = "Linux" ]; then
249 cmd="rm /dev/${disk}"
250 ${cmd} || die "failed: ${cmd}"
251 disk=`echo ${disk} | cut -c 9-`
253 cmd="losetup /dev/${disk} | awk '{print substr(\$3, 2, length(\$3)-2)}'"
254 fname=`eval ${cmd}` || die "failed: ${cmd}"
256 cmd="losetup -d /dev/${disk}"
257 ${cmd} || die "failed: ${cmd}"
260 ${cmd} || die "failed: ${cmd}"
262 die "Sorry, your OS is not supported"
268 if [ -z "${ndisks}" ]; then
275 if [ -z "${2}" ]; then
280 for i in `nums $n $start`; do
281 create_memdisk ${size}
282 eval disk${i}="${DISKNAME}"
283 eval fdisk${i}="${FDISKNAME}"
289 for i in `nums $ndisks 0`; do
291 if [ ! -z "${disk}" ]; then
292 destroy_memdisk ${disk}
295 [ -n "${TMPDIR_DISKS}" ] && TMPDIR="${TMPDIR_DISKS}" cleanup_tmpfs
302 eval disk=\$disk${diskno}
303 if [ ! -z ${disk} ]; then
304 die "disk${diskno} is already set"
307 if [ -z "${3}" ]; then
312 create_memdisk ${size} ${dname}
313 [ "${DISKNAME}" = "${dname}" ] || die "${DISKNAME} != ${dname}"
314 eval disk${diskno}="${DISKNAME}"
315 eval fdisk${diskno}="${FDISKNAME}"
321 destroy_memdisk ${disk}
327 if [ -z "${nfiles}" ]; then
334 if [ -z "${2}" ]; then
339 for i in `nums $n $start`; do
340 if [ "${os}" = "Linux" ]; then
341 if [ -z "${TMPDIR_FILES}" ]; then
343 TMPDIR_FILES="${TMPDIR}"
345 file=`mktemp ${TMPDIR_FILES}/zfstest.XXXXXXXX`
347 file=`mktemp /tmp/zfstest.XXXXXXXX`
349 truncate_cmd ${size} ${file}
350 eval file${i}=${file}
356 for i in `nums $nfiles 0`; do
361 [ -n "${TMPDIR_FILES}" ] && TMPDIR="${TMPDIR_FILES}" cleanup_tmpfs
367 echo "zfstest_`dd if=/dev/urandom bs=1k count=1 2>/dev/null | openssl md5 | awk '{ print $NF }'`"
373 for i in `nums $nnames 0`; do
374 eval name${i}=`name_create`
381 if [ ! -d "${dir}" ]; then
384 if [ -n "${GNU_STAT}" ]; then
389 if [ "`${statcmd} '%d' ${dir} 2>/dev/null`" -eq "`${statcmd} '%d' ${dir}/.. 2>/dev/null`" ]; then
397 which jot >/dev/null 2>&1
398 if [ $? -eq 0 ]; then
404 [ -z "${start}" ] && start="1";
405 end=$((${1}+${start}-1))
407 which seq >/dev/null 2>&1
408 if [ $? -eq 0 ]; then
416 if [ $i -eq ${1} ]; then
425 for i in `nums 64`; do
426 ${ZPOOL} status ${1} | grep replacing >/dev/null
427 if [ $? -ne 0 ]; then
436 ${ZDB} -l ${1} | grep -B1 ${1} | grep guid | head -n1 | awk 'BEGIN {FS="="} {print $2}'