ggate_test.sh revision 313753
1311893Sasomers# $FreeBSD: stable/11/tests/sys/geom/class/gate/ggate_test.sh 313753 2017-02-15 00:15:24Z asomers $
2311893Sasomers
3311893SasomersPIDFILE=ggated.pid
4311893SasomersPLAINFILES=plainfiles
5311893SasomersPORT=33080
6311893SasomersCONF=gg.exports
7311893Sasomers
8311893Sasomersatf_test_case ggated cleanup
9311893Sasomersggated_head()
10311893Sasomers{
11311893Sasomers	atf_set "descr" "ggated can proxy geoms"
12311893Sasomers	atf_set "require.progs" "ggatec ggated"
13311893Sasomers	atf_set "require.user" "root"
14311893Sasomers	atf_set "timeout" 60
15311893Sasomers}
16311893Sasomers
17311893Sasomersggated_body()
18311893Sasomers{
19311893Sasomers	us=$(alloc_ggate_dev)
20311893Sasomers	work=$(alloc_md)
21311893Sasomers	src=$(alloc_md)
22311893Sasomers
23313753Sasomers	atf_check -e ignore -o ignore \
24313753Sasomers	    dd if=/dev/random of=/dev/$work bs=1m count=1 conv=notrunc
25313753Sasomers	atf_check -e ignore -o ignore \
26313753Sasomers	    dd if=/dev/random of=/dev/$src bs=1m count=1 conv=notrunc
27311893Sasomers
28311893Sasomers	echo $CONF >> $PLAINFILES
29311893Sasomers	echo "127.0.0.1 RW /dev/$work" > $CONF
30311893Sasomers
31311893Sasomers	atf_check ggated -p $PORT -F $PIDFILE $CONF
32313753Sasomers	atf_check ggatec create -p $PORT -u $us 127.0.0.1 /dev/$work
33311893Sasomers
34313753Sasomers	ggate_dev=/dev/ggate${us}
35311893Sasomers
36313753Sasomers	wait_for_ggate_device ${ggate_dev}
37313753Sasomers
38313753Sasomers	atf_check -e ignore -o ignore \
39313753Sasomers	    dd if=/dev/${src} of=${ggate_dev} bs=1m count=1 conv=notrunc
40313753Sasomers
41311893Sasomers	checksum /dev/$src /dev/$work
42311893Sasomers}
43311893Sasomers
44311893Sasomersggated_cleanup()
45311893Sasomers{
46311893Sasomers	common_cleanup
47311893Sasomers}
48311893Sasomers
49311893Sasomersatf_test_case ggatel_file cleanup
50311893Sasomersggatel_file_head()
51311893Sasomers{
52311893Sasomers	atf_set "descr" "ggatel can proxy files"
53311893Sasomers	atf_set "require.progs" "ggatel"
54311893Sasomers	atf_set "require.user" "root"
55311893Sasomers	atf_set "timeout" 15
56311893Sasomers}
57311893Sasomers
58311893Sasomersggatel_file_body()
59311893Sasomers{
60311893Sasomers	us=$(alloc_ggate_dev)
61311893Sasomers
62311893Sasomers	echo src work >> ${PLAINFILES}
63311893Sasomers	dd if=/dev/random of=work bs=1m count=1
64311893Sasomers	dd if=/dev/random of=src bs=1m count=1
65311893Sasomers
66311893Sasomers	atf_check ggatel create -u $us work
67311893Sasomers
68313753Sasomers	ggate_dev=/dev/ggate${us}
69311893Sasomers
70313753Sasomers	wait_for_ggate_device ${ggate_dev}
71313753Sasomers
72313753Sasomers	atf_check -e ignore -o ignore \
73313753Sasomers	    dd if=src of=${ggate_dev} bs=1m count=1 conv=notrunc
74313753Sasomers
75311893Sasomers	checksum src work
76311893Sasomers}
77311893Sasomers
78311893Sasomersggatel_file_cleanup()
79311893Sasomers{
80311893Sasomers	common_cleanup
81311893Sasomers}
82311893Sasomers
83311893Sasomersatf_test_case ggatel_md cleanup
84311893Sasomersggatel_md_head()
85311893Sasomers{
86311893Sasomers	atf_set "descr" "ggatel can proxy files"
87311893Sasomers	atf_set "require.progs" "ggatel"
88311893Sasomers	atf_set "require.user" "root"
89311893Sasomers	atf_set "timeout" 15
90311893Sasomers}
91311893Sasomers
92311893Sasomersggatel_md_body()
93311893Sasomers{
94311893Sasomers	us=$(alloc_ggate_dev)
95311893Sasomers	work=$(alloc_md)
96311893Sasomers	src=$(alloc_md)
97311893Sasomers
98313753Sasomers	atf_check -e ignore -o ignore \
99313753Sasomers	    dd if=/dev/random of=$work bs=1m count=1 conv=notrunc
100313753Sasomers	atf_check -e ignore -o ignore \
101313753Sasomers	    dd if=/dev/random of=$src bs=1m count=1 conv=notrunc
102311893Sasomers
103311893Sasomers	atf_check ggatel create -u $us /dev/$work
104311893Sasomers
105313753Sasomers	ggate_dev=/dev/ggate${us}
106311893Sasomers
107313753Sasomers	wait_for_ggate_device ${ggate_dev}
108313753Sasomers
109313753Sasomers	atf_check -e ignore -o ignore \
110313753Sasomers	    dd if=/dev/$src of=${ggate_dev} bs=1m count=1 conv=notrunc
111313753Sasomers
112311893Sasomers	checksum /dev/$src /dev/$work
113311893Sasomers}
114311893Sasomers
115311893Sasomersggatel_md_cleanup()
116311893Sasomers{
117311893Sasomers	common_cleanup
118311893Sasomers}
119311893Sasomers
120311893Sasomersatf_init_test_cases()
121311893Sasomers{
122311893Sasomers	atf_add_test_case ggated
123311893Sasomers	atf_add_test_case ggatel_file
124311893Sasomers	atf_add_test_case ggatel_md
125311893Sasomers}
126311893Sasomers
127311893Sasomersalloc_ggate_dev()
128311893Sasomers{
129311893Sasomers	local us
130311893Sasomers
131311893Sasomers	us=0
132311893Sasomers	while [ -c /dev/ggate${us} ]; do
133311893Sasomers		: $(( us += 1 ))
134311893Sasomers	done
135311893Sasomers	echo ${us} > ggate.devs
136311893Sasomers	echo ${us}
137311893Sasomers}
138311893Sasomers
139311893Sasomersalloc_md()
140311893Sasomers{
141311893Sasomers	local md
142311893Sasomers
143311893Sasomers	md=$(mdconfig -a -t malloc -s 1M) || \
144311893Sasomers		atf_fail "failed to allocate md device"
145311893Sasomers	echo ${md} >> md.devs
146311893Sasomers	echo ${md}
147311893Sasomers}
148311893Sasomers
149311893Sasomerschecksum()
150311893Sasomers{
151311893Sasomers	local src work
152311893Sasomers	src=$1
153311893Sasomers	work=$2
154311893Sasomers
155311893Sasomers	src_checksum=$(md5 -q $src)
156311893Sasomers	work_checksum=$(md5 -q $work)
157311893Sasomers
158311893Sasomers	if [ "$work_checksum" != "$src_checksum" ]; then
159311893Sasomers		atf_fail "work md5 checksum didn't match"
160311893Sasomers	fi
161311893Sasomers
162311893Sasomers	ggate_checksum=$(md5 -q /dev/ggate${us})
163311893Sasomers	if [ "$ggate_checksum" != "$src_checksum" ]; then
164311893Sasomers		atf_fail "ggate md5 checksum didn't match"
165311893Sasomers	fi
166311893Sasomers}
167311893Sasomers
168311893Sasomerscommon_cleanup()
169311893Sasomers{
170311893Sasomers	if [ -f "ggate.devs" ]; then
171311893Sasomers		while read test_ggate; do
172311893Sasomers			ggatec destroy -f -u $test_ggate >/dev/null
173311893Sasomers		done < ggate.devs
174311893Sasomers		rm ggate.devs
175311893Sasomers	fi
176311893Sasomers
177311893Sasomers	if [ -f "$PIDFILE" ]; then
178311893Sasomers		pkill -F "$PIDFILE"
179311893Sasomers		rm $PIDFILE
180311893Sasomers	fi
181311893Sasomers
182311893Sasomers	if [ -f "PLAINFILES" ]; then
183311893Sasomers		while read f; do
184311893Sasomers			rm -f ${f}
185311893Sasomers		done < ${PLAINFILES}
186311893Sasomers		rm ${PLAINFILES}
187311893Sasomers	fi
188311893Sasomers
189311893Sasomers	if [ -f "md.devs" ]; then
190311893Sasomers		while read test_md; do
191311893Sasomers			mdconfig -d -u $test_md 2>/dev/null
192311893Sasomers		done < md.devs
193311893Sasomers		rm md.devs
194311893Sasomers	fi
195311893Sasomers	true
196311893Sasomers}
197313753Sasomers
198313753Sasomers# Bug 204616: ggatel(8) creates /dev/ggate* asynchronously if `ggatel create`
199313753Sasomers#             isn't called with `-v`.
200313753Sasomerswait_for_ggate_device()
201313753Sasomers{
202313753Sasomers	ggate_device=$1
203313753Sasomers
204313753Sasomers	while [ ! -c $ggate_device ]; do
205313753Sasomers		sleep 0.5
206313753Sasomers	done
207313753Sasomers}
208