1271294Sngie# $FreeBSD: releng/10.2/contrib/pjdfstest/tests/misc.sh 271294 2014-09-09 02:50:09Z ngie $
2271294Sngie
3271294Sngientest=1
4271294Sngie
5271294Sngiecase "${dir}" in
6271294Sngie/*)
7271294Sngie	maindir="${dir}/../.."
8271294Sngie	;;
9271294Sngie*)
10271294Sngie	maindir="`pwd`/${dir}/../.."
11271294Sngie	;;
12271294Sngieesac
13271294Sngiefstest="${maindir}/pjdfstest"
14271294Sngie. ${maindir}/tests/conf
15271294Sngie
16271294Sngieexpect()
17271294Sngie{
18271294Sngie	e="${1}"
19271294Sngie	shift
20271294Sngie	r=`${fstest} $* 2>/dev/null | tail -1`
21271294Sngie	echo "${r}" | ${GREP} -Eq '^'${e}'$'
22271294Sngie	if [ $? -eq 0 ]; then
23271294Sngie		if [ -z "${todomsg}" ]; then
24271294Sngie			echo "ok ${ntest}"
25271294Sngie		else
26271294Sngie			echo "ok ${ntest} # TODO ${todomsg}"
27271294Sngie		fi
28271294Sngie	else
29271294Sngie		if [ -z "${todomsg}" ]; then
30271294Sngie			echo "not ok ${ntest} - tried '$*', expected ${e}, got ${r}"
31271294Sngie		else
32271294Sngie			echo "not ok ${ntest} # TODO ${todomsg}"
33271294Sngie		fi
34271294Sngie	fi
35271294Sngie	todomsg=""
36271294Sngie	ntest=$((ntest+1))
37271294Sngie}
38271294Sngie
39271294Sngiejexpect()
40271294Sngie{
41271294Sngie	s="${1}"
42271294Sngie	d="${2}"
43271294Sngie	e="${3}"
44271294Sngie	shift 3
45271294Sngie	r=`jail -s ${s} / pjdfstest 127.0.0.1 /bin/sh -c "cd ${d} && ${fstest} $* 2>/dev/null" | tail -1`
46271294Sngie	echo "${r}" | ${GREP} -Eq '^'${e}'$'
47271294Sngie	if [ $? -eq 0 ]; then
48271294Sngie		if [ -z "${todomsg}" ]; then
49271294Sngie			echo "ok ${ntest}"
50271294Sngie		else
51271294Sngie			echo "ok ${ntest} # TODO ${todomsg}"
52271294Sngie		fi
53271294Sngie	else
54271294Sngie		if [ -z "${todomsg}" ]; then
55271294Sngie			echo "not ok ${ntest} - tried '$*', expected ${e}, got ${r}"
56271294Sngie		else
57271294Sngie			echo "not ok ${ntest} # TODO ${todomsg}"
58271294Sngie		fi
59271294Sngie	fi
60271294Sngie	todomsg=""
61271294Sngie	ntest=$((ntest+1))
62271294Sngie}
63271294Sngie
64271294Sngietest_check()
65271294Sngie{
66271294Sngie	if [ $* ]; then
67271294Sngie		if [ -z "${todomsg}" ]; then
68271294Sngie			echo "ok ${ntest}"
69271294Sngie		else
70271294Sngie			echo "ok ${ntest} # TODO ${todomsg}"
71271294Sngie		fi
72271294Sngie	else
73271294Sngie		if [ -z "${todomsg}" ]; then
74271294Sngie			echo "not ok ${ntest}"
75271294Sngie		else
76271294Sngie			echo "not ok ${ntest} # TODO ${todomsg}"
77271294Sngie		fi
78271294Sngie	fi
79271294Sngie	todomsg=""
80271294Sngie	ntest=$((ntest+1))
81271294Sngie}
82271294Sngie
83271294Sngietodo()
84271294Sngie{
85271294Sngie	if [ "${os}" = "${1}" -o "${os}:${fs}" = "${1}" ]; then
86271294Sngie		todomsg="${2}"
87271294Sngie	fi
88271294Sngie}
89271294Sngie
90271294Sngienamegen()
91271294Sngie{
92271294Sngie	echo "pjdfstest_`dd if=/dev/urandom bs=1k count=1 2>/dev/null | openssl md5 | awk '{print $NF}'`"
93271294Sngie}
94271294Sngie
95271294Sngienamegen_len()
96271294Sngie{
97271294Sngie	len="${1}"
98271294Sngie
99271294Sngie	name=""
100271294Sngie	while :; do
101271294Sngie		namepart="`dd if=/dev/urandom bs=64 count=1 2>/dev/null | openssl md5 | awk '{print $NF}'`"
102271294Sngie		name="${name}${namepart}"
103271294Sngie		curlen=`printf "%s" "${name}" | wc -c`
104271294Sngie		[ ${curlen} -lt ${len} ] || break
105271294Sngie	done
106271294Sngie	name=`echo "${name}" | cut -b -${len}`
107271294Sngie	printf "%s" "${name}"
108271294Sngie}
109271294Sngie
110271294Sngie# POSIX:
111271294Sngie# {NAME_MAX}
112271294Sngie#     Maximum number of bytes in a filename (not including terminating null).
113271294Sngienamegen_max()
114271294Sngie{
115271294Sngie	name_max=`${fstest} pathconf . _PC_NAME_MAX`
116271294Sngie	namegen_len ${name_max}
117271294Sngie}
118271294Sngie
119271294Sngie# POSIX:
120271294Sngie# {PATH_MAX}
121271294Sngie#     Maximum number of bytes in a pathname, including the terminating null character.
122271294Sngiedirgen_max()
123271294Sngie{
124271294Sngie	name_max=`${fstest} pathconf . _PC_NAME_MAX`
125271294Sngie	complen=$((name_max/2))
126271294Sngie	path_max=`${fstest} pathconf . _PC_PATH_MAX`
127271294Sngie	# "...including the terminating null character."
128271294Sngie	path_max=$((path_max-1))
129271294Sngie
130271294Sngie	name=""
131271294Sngie	while :; do
132271294Sngie		name="${name}`namegen_len ${complen}`/"
133271294Sngie		curlen=`printf "%s" "${name}" | wc -c`
134271294Sngie		[ ${curlen} -lt ${path_max} ] || break
135271294Sngie	done
136271294Sngie	name=`echo "${name}" | cut -b -${path_max}`
137271294Sngie	name=`echo "${name}" | sed -E 's@/$@x@'`
138271294Sngie	printf "%s" "${name}"
139271294Sngie}
140271294Sngie
141271294Sngiequick_exit()
142271294Sngie{
143271294Sngie	echo "1..1"
144271294Sngie	echo "ok 1"
145271294Sngie	exit 0
146271294Sngie}
147271294Sngie
148271294Sngiesupported()
149271294Sngie{
150271294Sngie	case "${1}" in
151271294Sngie	lchmod)
152271294Sngie		if [ "${os}" != "FreeBSD" ]; then
153271294Sngie			return 1
154271294Sngie		fi
155271294Sngie		;;
156271294Sngie	chflags)
157271294Sngie		if [ "${os}" != "FreeBSD" ]; then
158271294Sngie			return 1
159271294Sngie		fi
160271294Sngie		;;
161271294Sngie	chflags_SF_SNAPSHOT)
162271294Sngie		if [ "${os}" != "FreeBSD" -o "${fs}" != "UFS" ]; then
163271294Sngie			return 1
164271294Sngie		fi
165271294Sngie		;;
166271294Sngie	esac
167271294Sngie	return 0
168271294Sngie}
169271294Sngie
170271294Sngierequire()
171271294Sngie{
172271294Sngie	if supported ${1}; then
173271294Sngie		return
174271294Sngie	fi
175271294Sngie	quick_exit
176271294Sngie}
177271294Sngie
178271294Sngie# usage:
179271294Sngie#	create_file <type> <name>
180271294Sngie#	create_file <type> <name> <mode>
181271294Sngie#	create_file <type> <name> <uid> <gid>
182271294Sngie#	create_file <type> <name> <mode> <uid> <gid>
183271294Sngiecreate_file() {
184271294Sngie	type="${1}"
185271294Sngie	name="${2}"
186271294Sngie
187271294Sngie	case "${type}" in
188271294Sngie	none)
189271294Sngie		return
190271294Sngie		;;
191271294Sngie	regular)
192271294Sngie		expect 0 create ${name} 0644
193271294Sngie		;;
194271294Sngie	dir)
195271294Sngie		expect 0 mkdir ${name} 0755
196271294Sngie		;;
197271294Sngie	fifo)
198271294Sngie		expect 0 mkfifo ${name} 0644
199271294Sngie		;;
200271294Sngie	block)
201271294Sngie		expect 0 mknod ${name} b 0644 1 2
202271294Sngie		;;
203271294Sngie	char)
204271294Sngie		expect 0 mknod ${name} c 0644 1 2
205271294Sngie		;;
206271294Sngie	socket)
207271294Sngie		expect 0 bind ${name}
208271294Sngie		;;
209271294Sngie	symlink)
210271294Sngie		expect 0 symlink test ${name}
211271294Sngie		;;
212271294Sngie	esac
213271294Sngie	if [ -n "${3}" -a -n "${4}" -a -n "${5}" ]; then
214271294Sngie		expect 0 lchmod ${name} ${3}
215271294Sngie		expect 0 lchown ${name} ${4} ${5}
216271294Sngie	elif [ -n "${3}" -a -n "${4}" ]; then
217271294Sngie		expect 0 lchown ${name} ${3} ${4}
218271294Sngie	elif [ -n "${3}" ]; then
219271294Sngie		expect 0 lchmod ${name} ${3}
220271294Sngie	fi
221271294Sngie}
222