1166065Spjd# $FreeBSD$
2166065Spjd
3166065Spjdntest=1
4166065Spjd
5211107Spjdcase "${dir}" in
6211107Spjd/*)
7166065Spjd	maindir="${dir}/../.."
8211107Spjd	;;
9211107Spjd*)
10166065Spjd	maindir="`pwd`/${dir}/../.."
11211107Spjd	;;
12211107Spjdesac
13211354Spjdfstest="${maindir}/pjdfstest"
14166065Spjd. ${maindir}/tests/conf
15166065Spjd
16166065Spjdexpect()
17166065Spjd{
18166065Spjd	e="${1}"
19166065Spjd	shift
20166065Spjd	r=`${fstest} $* 2>/dev/null | tail -1`
21211108Spjd	echo "${r}" | ${GREP} -Eq '^'${e}'$'
22166065Spjd	if [ $? -eq 0 ]; then
23185251Spjd		if [ -z "${todomsg}" ]; then
24185251Spjd			echo "ok ${ntest}"
25185251Spjd		else
26185251Spjd			echo "ok ${ntest} # TODO ${todomsg}"
27185251Spjd		fi
28166065Spjd	else
29185216Spjd		if [ -z "${todomsg}" ]; then
30185216Spjd			echo "not ok ${ntest} - tried '$*', expected ${e}, got ${r}"
31185216Spjd		else
32185216Spjd			echo "not ok ${ntest} # TODO ${todomsg}"
33185216Spjd		fi
34166065Spjd	fi
35185251Spjd	todomsg=""
36211108Spjd	ntest=$((ntest+1))
37166065Spjd}
38166065Spjd
39166065Spjdjexpect()
40166065Spjd{
41166065Spjd	s="${1}"
42166065Spjd	d="${2}"
43166065Spjd	e="${3}"
44166065Spjd	shift 3
45211354Spjd	r=`jail -s ${s} / pjdfstest 127.0.0.1 /bin/sh -c "cd ${d} && ${fstest} $* 2>/dev/null" | tail -1`
46211108Spjd	echo "${r}" | ${GREP} -Eq '^'${e}'$'
47166065Spjd	if [ $? -eq 0 ]; then
48185251Spjd		if [ -z "${todomsg}" ]; then
49185251Spjd			echo "ok ${ntest}"
50185251Spjd		else
51185251Spjd			echo "ok ${ntest} # TODO ${todomsg}"
52185251Spjd		fi
53166065Spjd	else
54185216Spjd		if [ -z "${todomsg}" ]; then
55185216Spjd			echo "not ok ${ntest} - tried '$*', expected ${e}, got ${r}"
56185216Spjd		else
57185216Spjd			echo "not ok ${ntest} # TODO ${todomsg}"
58185216Spjd		fi
59166065Spjd	fi
60185251Spjd	todomsg=""
61211108Spjd	ntest=$((ntest+1))
62166065Spjd}
63166065Spjd
64166065Spjdtest_check()
65166065Spjd{
66166065Spjd	if [ $* ]; then
67185251Spjd		if [ -z "${todomsg}" ]; then
68185251Spjd			echo "ok ${ntest}"
69185251Spjd		else
70185251Spjd			echo "ok ${ntest} # TODO ${todomsg}"
71185251Spjd		fi
72166065Spjd	else
73185216Spjd		if [ -z "${todomsg}" ]; then
74185216Spjd			echo "not ok ${ntest}"
75185216Spjd		else
76185216Spjd			echo "not ok ${ntest} # TODO ${todomsg}"
77185216Spjd		fi
78166065Spjd	fi
79185251Spjd	todomsg=""
80211108Spjd	ntest=$((ntest+1))
81166065Spjd}
82166065Spjd
83185216Spjdtodo()
84185216Spjd{
85210971Spjd	if [ "${os}" = "${1}" -o "${os}:${fs}" = "${1}" ]; then
86185216Spjd		todomsg="${2}"
87185216Spjd	fi
88185216Spjd}
89185216Spjd
90166065Spjdnamegen()
91166065Spjd{
92248304Spjd	echo "pjdfstest_`dd if=/dev/urandom bs=1k count=1 2>/dev/null | openssl md5 | awk '{print $NF}'`"
93166065Spjd}
94166065Spjd
95211177Spjdnamegen_len()
96211177Spjd{
97211177Spjd	len="${1}"
98211177Spjd
99211177Spjd	name=""
100211177Spjd	while :; do
101248304Spjd		namepart="`dd if=/dev/urandom bs=64 count=1 2>/dev/null | openssl md5 | awk '{print $NF}'`"
102211177Spjd		name="${name}${namepart}"
103211177Spjd		curlen=`printf "%s" "${name}" | wc -c`
104211177Spjd		[ ${curlen} -lt ${len} ] || break
105211177Spjd	done
106211177Spjd	name=`echo "${name}" | cut -b -${len}`
107211177Spjd	printf "%s" "${name}"
108211177Spjd}
109211177Spjd
110211177Spjd# POSIX:
111211177Spjd# {NAME_MAX}
112211177Spjd#     Maximum number of bytes in a filename (not including terminating null).
113211177Spjdnamegen_max()
114211177Spjd{
115211177Spjd	name_max=`${fstest} pathconf . _PC_NAME_MAX`
116211177Spjd	namegen_len ${name_max}
117211177Spjd}
118211177Spjd
119211177Spjd# POSIX:
120211177Spjd# {PATH_MAX}
121211177Spjd#     Maximum number of bytes in a pathname, including the terminating null character.
122211177Spjddirgen_max()
123211177Spjd{
124211177Spjd	name_max=`${fstest} pathconf . _PC_NAME_MAX`
125211177Spjd	complen=$((name_max/2))
126211177Spjd	path_max=`${fstest} pathconf . _PC_PATH_MAX`
127211177Spjd	# "...including the terminating null character."
128211177Spjd	path_max=$((path_max-1))
129211177Spjd
130211177Spjd	name=""
131211177Spjd	while :; do
132211177Spjd		name="${name}`namegen_len ${complen}`/"
133211177Spjd		curlen=`printf "%s" "${name}" | wc -c`
134211177Spjd		[ ${curlen} -lt ${path_max} ] || break
135211177Spjd	done
136211177Spjd	name=`echo "${name}" | cut -b -${path_max}`
137211177Spjd	name=`echo "${name}" | sed -E 's@/$@x@'`
138211177Spjd	printf "%s" "${name}"
139211177Spjd}
140211177Spjd
141166065Spjdquick_exit()
142166065Spjd{
143166065Spjd	echo "1..1"
144166065Spjd	echo "ok 1"
145166065Spjd	exit 0
146166065Spjd}
147166065Spjd
148166065Spjdsupported()
149166065Spjd{
150166065Spjd	case "${1}" in
151185173Spjd	lchmod)
152185173Spjd		if [ "${os}" != "FreeBSD" ]; then
153185173Spjd			return 1
154185173Spjd		fi
155185173Spjd		;;
156166065Spjd	chflags)
157185173Spjd		if [ "${os}" != "FreeBSD" ]; then
158166065Spjd			return 1
159166065Spjd		fi
160166065Spjd		;;
161185173Spjd	chflags_SF_SNAPSHOT)
162185173Spjd		if [ "${os}" != "FreeBSD" -o "${fs}" != "UFS" ]; then
163166065Spjd			return 1
164166065Spjd		fi
165166065Spjd		;;
166166065Spjd	esac
167166065Spjd	return 0
168166065Spjd}
169166065Spjd
170166065Spjdrequire()
171166065Spjd{
172166065Spjd	if supported ${1}; then
173166065Spjd		return
174166065Spjd	fi
175166065Spjd	quick_exit
176166065Spjd}
177211179Spjd
178211185Spjd# usage:
179211185Spjd#	create_file <type> <name>
180211185Spjd#	create_file <type> <name> <mode>
181211185Spjd#	create_file <type> <name> <uid> <gid>
182211185Spjd#	create_file <type> <name> <mode> <uid> <gid>
183211179Spjdcreate_file() {
184211179Spjd	type="${1}"
185211179Spjd	name="${2}"
186211179Spjd
187211179Spjd	case "${type}" in
188211179Spjd	none)
189211179Spjd		return
190211179Spjd		;;
191211179Spjd	regular)
192211179Spjd		expect 0 create ${name} 0644
193211179Spjd		;;
194211179Spjd	dir)
195211179Spjd		expect 0 mkdir ${name} 0755
196211179Spjd		;;
197211179Spjd	fifo)
198211179Spjd		expect 0 mkfifo ${name} 0644
199211179Spjd		;;
200211179Spjd	block)
201211179Spjd		expect 0 mknod ${name} b 0644 1 2
202211179Spjd		;;
203211179Spjd	char)
204211179Spjd		expect 0 mknod ${name} c 0644 1 2
205211179Spjd		;;
206211179Spjd	socket)
207211179Spjd		expect 0 bind ${name}
208211179Spjd		;;
209211179Spjd	symlink)
210211179Spjd		expect 0 symlink test ${name}
211211179Spjd		;;
212211179Spjd	esac
213211185Spjd	if [ -n "${3}" -a -n "${4}" -a -n "${5}" ]; then
214211185Spjd		expect 0 lchmod ${name} ${3}
215211185Spjd		expect 0 lchown ${name} ${4} ${5}
216211185Spjd	elif [ -n "${3}" -a -n "${4}" ]; then
217211185Spjd		expect 0 lchown ${name} ${3} ${4}
218211185Spjd	elif [ -n "${3}" ]; then
219211185Spjd		expect 0 lchmod ${name} ${3}
220211185Spjd	fi
221211179Spjd}
222