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
47 dd if="${1}" bs=1M 2>/dev/null | openssl md5
55 dd if=/dev/urandom of=${name} bs=${size} count=1 >/dev/null 2>&1
62 eexp=`echo "${eorig}" | egrep -v '^[ ]*$' | sed 's/^[ ][ ]*//g;s/[ ][ ]*$//g;s/[ ][ ]*/ /g;s/$/%EoL%/' | xargs`
64 gorig=`sh -c "$*" 2>&1`
65 got=`echo "${gorig}" | egrep -v '^[ ]*$' | sed 's/^[ ][ ]*//g;s/[ ][ ]*$//g;s/[ ][ ]*/ /g;s/$/%EoL%/' | xargs`
66 echo "${got}" | egrep "${eexp}" >/dev/null
68 echo "ok ${ntest} ${add_msg}"
70 echo "not ok ${ntest} ${add_msg}"
71 echo "# ----- expected from: $*"
72 echo "${eorig}" | sed 's/^/# /'
74 echo "${gorig}" | sed 's/^/# /'
77 ntest=`expr $ntest + 1`
84 if [ $ec -eq 0 ]; then
85 echo "ok ${ntest} ${add_msg}"
86 echo "# ----- expected success from: $*"
87 if [ ! -z "${out}" ]; then
88 echo "# ----- output (exit code=${ec}):"
89 echo "${out}" | sed 's/^/# /'
93 echo "not ok ${ntest} ${add_msg}"
94 echo "# ----- expected success from: $*"
95 echo "# ----- output (exit code=${ec}):"
96 echo "${out}" | sed 's/^/# /'
99 ntest=`expr $ntest + 1`
106 if [ $ec -ne 0 ]; then
107 echo "ok ${ntest} ${add_msg}"
108 echo "# ----- expected failure from: $*"
109 if [ ! -z "${out}" ]; then
110 echo "# ----- output (exit code=${ec}):"
111 echo "${out}" | sed 's/^/# /'
115 echo "not ok ${ntest} ${add_msg}"
116 echo "# ----- expected failure from: $*"
117 echo "# ----- output (exit code=${ec}):"
118 echo "${out}" | sed 's/^/# /'
121 ntest=`expr $ntest + 1`
131 # Set up a scratch tmpfs directory (Linux only)
134 cmd="mktemp -d /tmp/zfs-regression.XXXXXXXXXX"
135 TMPDIR=`${cmd}` || die "failed: ${cmd}"
136 cmd="mount -t tmpfs none ${TMPDIR}"
137 ${cmd} || die "failed: ${cmd}"
140 # Clean up the tmpfs directory (Linux only)
143 if [ -n "${TMPDIR}" ]; then
144 cmd="umount ${TMPDIR} && rmdir ${TMPDIR}"
145 eval "${cmd}" || die "failed: ${cmd}"
155 cmd="dd if=/dev/null of=${file} bs=1 count=0 seek=${size}"
156 ${cmd} > /dev/null 2>&1 || die "failed: ${cmd}"
159 # Create a memory-backed block device
165 if [ "${os}" = "FreeBSD" ]; then
166 if [ -n "${devname}" ]; then
167 devparam="-u ${devname}"
169 cmd="mdconfig -a -t swap -s ${size} ${devparam} 2>/dev/null"
170 DISKNAME=`${cmd}` || die "failed: ${cmd}"
171 if [ -n "${devname}" ]; then
172 DISKNAME="${devname}"
174 FDISKNAME="/dev/${DISKNAME}"
175 elif [ "${os}" = "SunOS" ]; then
176 cmd="mktemp /tmp/zfstest.XXXXXXXXXX"
177 fname=`${cmd}` || die "failed: ${cmd}"
179 truncate_cmd "${size}" "${fname}"
181 if [ -n "${devname}" ]; then
182 cmd="lofiadm -a ${fname} ${devname}"
183 ${cmd} || die "failed: ${cmd}"
184 DISKNAME="${devname}"
186 cmd="lofiadm -a ${fname}"
187 DISKNAME=`${cmd}` || die "failed: ${cmd}"
189 FDISKNAME="${DISKNAME}"
190 elif [ "${os}" = "Linux" ]; then
191 if [ -z "${TMPDIR_DISKS}" ]; then
193 TMPDIR_DISKS="${TMPDIR}"
196 cmd="mktemp ${TMPDIR_DISKS}/disk.XXXXXXXXXX"
197 fname=`${cmd}` || die "failed: ${cmd}"
199 truncate_cmd "${size}" "${fname}"
201 if [ -n "${devname}" ]; then
202 devname=`echo ${devname} | cut -c 9-`
203 cmd="losetup /dev/${devname} ${fname} 2>&1"
204 eval ${cmd} || die "failed: ${cmd}"
205 DISKNAME="${devname}"
207 cmd="losetup -s -f ${fname} 2>&1"
208 diskname=`eval ${cmd}`
210 if [ "${diskname}" = "losetup: could not find any free loop device" ]; then
211 # If there are no free loopback devices, create one more
212 max=`echo /dev/loop* | awk 'BEGIN { RS=" "; FS="loop" } {if ($2 > max) max = $2} END {print max}'`
214 cmd="mknod /dev/loop${max} b 7 ${max}"
215 ${cmd} || die "failed: ${cmd}"
217 cmd="losetup -s -f ${fname}"
218 diskname=`${cmd}` || die "failed: ${cmd}"
220 DISKNAME=`eval echo ${diskname} | sed 's/^\/dev\///'`
222 ln /dev/${DISKNAME} /dev/zfstest_${DISKNAME}
223 DISKNAME="zfstest_${DISKNAME}"
224 FDISKNAME="/dev/${DISKNAME}"
226 die "Sorry, your OS is not supported"
230 # Destroy a memory-backed block device
235 if [ "${os}" = "FreeBSD" ]; then
236 cmd="mdconfig -d -u ${disk}"
237 ${cmd} || die "failed: ${cmd}"
238 elif [ "${os}" = "SunOS" ]; then
239 cmd="lofiadm ${disk}"
240 fname=`${cmd}` || die "failed: ${cmd}"
242 cmd="lofiadm -d ${disk}"
243 ${cmd} || die "failed: ${cmd}"
246 ${cmd} || die "failed: ${cmd}"
247 elif [ "${os}" = "Linux" ]; then
248 cmd="rm /dev/${disk}"
249 ${cmd} || die "failed: ${cmd}"
250 disk=`echo ${disk} | cut -c 9-`
252 cmd="losetup /dev/${disk} | awk '{print substr(\$3, 2, length(\$3)-2)}'"
253 fname=`eval ${cmd}` || die "failed: ${cmd}"
255 cmd="losetup -d /dev/${disk}"
256 ${cmd} || die "failed: ${cmd}"
259 ${cmd} || die "failed: ${cmd}"
261 die "Sorry, your OS is not supported"
267 if [ -z "${ndisks}" ]; then
274 if [ -z "${2}" ]; then
279 for i in `nums $n $start`; do
280 create_memdisk ${size}
281 eval disk${i}="${DISKNAME}"
282 eval fdisk${i}="${FDISKNAME}"
288 for i in `nums $ndisks 0`; do
290 if [ ! -z "${disk}" ]; then
291 destroy_memdisk ${disk}
294 [ -n "${TMPDIR_DISKS}" ] && TMPDIR="${TMPDIR_DISKS}" cleanup_tmpfs
301 eval disk=\$disk${diskno}
302 if [ ! -z ${disk} ]; then
303 die "disk${diskno} is already set"
306 if [ -z "${3}" ]; then
311 create_memdisk ${size} ${dname}
312 [ "${DISKNAME}" = "${dname}" ] || die "${DISKNAME} != ${dname}"
313 eval disk${diskno}="${DISKNAME}"
314 eval fdisk${diskno}="${FDISKNAME}"
320 destroy_memdisk ${disk}
326 if [ -z "${nfiles}" ]; then
333 if [ -z "${2}" ]; then
338 for i in `nums $n $start`; do
339 if [ "${os}" = "Linux" ]; then
340 if [ -z "${TMPDIR_FILES}" ]; then
342 TMPDIR_FILES="${TMPDIR}"
344 file=`mktemp ${TMPDIR_FILES}/zfstest.XXXXXXXX`
346 file=`mktemp /tmp/zfstest.XXXXXXXX`
348 truncate_cmd ${size} ${file}
349 eval file${i}=${file}
355 for i in `nums $nfiles 0`; do
360 [ -n "${TMPDIR_FILES}" ] && TMPDIR="${TMPDIR_FILES}" cleanup_tmpfs
366 echo "zfstest_`dd if=/dev/urandom bs=1k count=1 2>/dev/null | openssl md5 | cut -b -8`"
372 for i in `nums $nnames 0`; do
373 eval name${i}=`name_create`
380 if [ ! -d "${dir}" ]; then
383 if [ -n "${GNU_STAT}" ]; then
388 if [ "`${statcmd} '%d' ${dir} 2>/dev/null`" -eq "`${statcmd} '%d' ${dir}/.. 2>/dev/null`" ]; then
396 which jot >/dev/null 2>&1
397 if [ $? -eq 0 ]; then
403 [ -z "${start}" ] && start="1";
404 end=$((${1}+${start}-1))
406 which seq >/dev/null 2>&1
407 if [ $? -eq 0 ]; then
415 if [ $i -eq ${1} ]; then
424 for i in `nums 64`; do
425 ${ZPOOL} status ${1} | grep replacing >/dev/null
426 if [ $? -ne 0 ]; then
435 ${ZDB} -l ${1} | grep -B1 ${1} | grep guid | head -n1 | awk 'BEGIN {FS="="} {print $2}'