ggate_test.sh revision 311893
1311893Sasomers# $FreeBSD: head/tests/sys/geom/class/gate/ggate_test.sh 311893 2017-01-10 20:35:09Z asomers $
2311893Sasomers
3311893SasomersPIDFILE=ggated.pid
4311893SasomersPLAINFILES=plainfiles
5311893SasomersPORT=33080
6311893SasomersCONF=gg.exports
7311893SasomersRETRIES=16
8311893Sasomers
9311893Sasomersatf_test_case ggated cleanup
10311893Sasomersggated_head()
11311893Sasomers{
12311893Sasomers	atf_set "descr" "ggated can proxy geoms"
13311893Sasomers	atf_set "require.progs" "ggatec ggated"
14311893Sasomers	atf_set "require.user" "root"
15311893Sasomers	atf_set "timeout" 60
16311893Sasomers}
17311893Sasomers
18311893Sasomersggated_body()
19311893Sasomers{
20311893Sasomers	us=$(alloc_ggate_dev)
21311893Sasomers	work=$(alloc_md)
22311893Sasomers	src=$(alloc_md)
23311893Sasomers
24311893Sasomers	dd if=/dev/random of=/dev/$work bs=1m count=1 conv=notrunc
25311893Sasomers	dd if=/dev/random of=/dev/$src bs=1m count=1 conv=notrunc
26311893Sasomers
27311893Sasomers	echo $CONF >> $PLAINFILES
28311893Sasomers	echo "127.0.0.1 RW /dev/$work" > $CONF
29311893Sasomers
30311893Sasomers	atf_check ggated -p $PORT -F $PIDFILE $CONF
31311893Sasomers	for try in `jot $RETRIES`; do
32311893Sasomers		ggatec create -p $PORT -u $us 127.0.0.1 /dev/$work && break
33311893Sasomers		# wait for ggated to be ready
34311893Sasomers		sleep 0.25
35311893Sasomers	done
36311893Sasomers	if [ "$try" -eq "$RETRIES" ]; then
37311893Sasomers		atf_fail "ggatec create failed"
38311893Sasomers	fi
39311893Sasomers
40311893Sasomers	for try in `jot $RETRIES`; do
41311893Sasomers		dd if=/dev/${src} of=/dev/ggate${us} bs=1m count=1 conv=notrunc\
42311893Sasomers			&& break
43311893Sasomers		# Wait for /dev/ggate${us} to be ready
44311893Sasomers		sleep 0.25
45311893Sasomers	done
46311893Sasomers	if [ "$try" -eq "$RETRIES" ]; then
47311893Sasomers		atf_fail "dd failed; /dev/ggate${us} isn't working"
48311893Sasomers	fi
49311893Sasomers
50311893Sasomers	checksum /dev/$src /dev/$work
51311893Sasomers}
52311893Sasomers
53311893Sasomersggated_cleanup()
54311893Sasomers{
55311893Sasomers	common_cleanup
56311893Sasomers}
57311893Sasomers
58311893Sasomersatf_test_case ggatel_file cleanup
59311893Sasomersggatel_file_head()
60311893Sasomers{
61311893Sasomers	atf_set "descr" "ggatel can proxy files"
62311893Sasomers	atf_set "require.progs" "ggatel"
63311893Sasomers	atf_set "require.user" "root"
64311893Sasomers	atf_set "timeout" 15
65311893Sasomers}
66311893Sasomers
67311893Sasomersggatel_file_body()
68311893Sasomers{
69311893Sasomers	us=$(alloc_ggate_dev)
70311893Sasomers
71311893Sasomers	echo src work >> ${PLAINFILES}
72311893Sasomers	dd if=/dev/random of=work bs=1m count=1
73311893Sasomers	dd if=/dev/random of=src bs=1m count=1
74311893Sasomers
75311893Sasomers	atf_check ggatel create -u $us work
76311893Sasomers
77311893Sasomers	dd if=src of=/dev/ggate${us} bs=1m count=1 conv=notrunc
78311893Sasomers
79311893Sasomers	checksum src work
80311893Sasomers}
81311893Sasomers
82311893Sasomersggatel_file_cleanup()
83311893Sasomers{
84311893Sasomers	common_cleanup
85311893Sasomers}
86311893Sasomers
87311893Sasomersatf_test_case ggatel_md cleanup
88311893Sasomersggatel_md_head()
89311893Sasomers{
90311893Sasomers	atf_set "descr" "ggatel can proxy files"
91311893Sasomers	atf_set "require.progs" "ggatel"
92311893Sasomers	atf_set "require.user" "root"
93311893Sasomers	atf_set "timeout" 15
94311893Sasomers}
95311893Sasomers
96311893Sasomersggatel_md_body()
97311893Sasomers{
98311893Sasomers	us=$(alloc_ggate_dev)
99311893Sasomers	work=$(alloc_md)
100311893Sasomers	src=$(alloc_md)
101311893Sasomers
102311893Sasomers	dd if=/dev/random of=$work bs=1m count=1 conv=notrunc
103311893Sasomers	dd if=/dev/random of=$src bs=1m count=1 conv=notrunc
104311893Sasomers
105311893Sasomers	atf_check ggatel create -u $us /dev/$work
106311893Sasomers
107311893Sasomers	dd if=/dev/$src of=/dev/ggate${us} bs=1m count=1 conv=notrunc
108311893Sasomers
109311893Sasomers	checksum /dev/$src /dev/$work
110311893Sasomers}
111311893Sasomers
112311893Sasomersggatel_md_cleanup()
113311893Sasomers{
114311893Sasomers	common_cleanup
115311893Sasomers}
116311893Sasomers
117311893Sasomersatf_init_test_cases()
118311893Sasomers{
119311893Sasomers	atf_add_test_case ggated
120311893Sasomers	atf_add_test_case ggatel_file
121311893Sasomers	atf_add_test_case ggatel_md
122311893Sasomers}
123311893Sasomers
124311893Sasomersalloc_ggate_dev()
125311893Sasomers{
126311893Sasomers	local us
127311893Sasomers
128311893Sasomers	us=0
129311893Sasomers	while [ -c /dev/ggate${us} ]; do
130311893Sasomers		: $(( us += 1 ))
131311893Sasomers	done
132311893Sasomers	echo ${us} > ggate.devs
133311893Sasomers	echo ${us}
134311893Sasomers}
135311893Sasomers
136311893Sasomersalloc_md()
137311893Sasomers{
138311893Sasomers	local md
139311893Sasomers
140311893Sasomers	md=$(mdconfig -a -t malloc -s 1M) || \
141311893Sasomers		atf_fail "failed to allocate md device"
142311893Sasomers	echo ${md} >> md.devs
143311893Sasomers	echo ${md}
144311893Sasomers}
145311893Sasomers
146311893Sasomerschecksum()
147311893Sasomers{
148311893Sasomers	local src work
149311893Sasomers	src=$1
150311893Sasomers	work=$2
151311893Sasomers
152311893Sasomers	src_checksum=$(md5 -q $src)
153311893Sasomers	work_checksum=$(md5 -q $work)
154311893Sasomers
155311893Sasomers	if [ "$work_checksum" != "$src_checksum" ]; then
156311893Sasomers		atf_fail "work md5 checksum didn't match"
157311893Sasomers	fi
158311893Sasomers
159311893Sasomers	ggate_checksum=$(md5 -q /dev/ggate${us})
160311893Sasomers	if [ "$ggate_checksum" != "$src_checksum" ]; then
161311893Sasomers		atf_fail "ggate md5 checksum didn't match"
162311893Sasomers	fi
163311893Sasomers}
164311893Sasomers
165311893Sasomerscommon_cleanup()
166311893Sasomers{
167311893Sasomers	if [ -f "ggate.devs" ]; then
168311893Sasomers		while read test_ggate; do
169311893Sasomers			ggatec destroy -f -u $test_ggate >/dev/null
170311893Sasomers		done < ggate.devs
171311893Sasomers		rm ggate.devs
172311893Sasomers	fi
173311893Sasomers
174311893Sasomers	if [ -f "$PIDFILE" ]; then
175311893Sasomers		pkill -F "$PIDFILE"
176311893Sasomers		rm $PIDFILE
177311893Sasomers	fi
178311893Sasomers
179311893Sasomers	if [ -f "PLAINFILES" ]; then
180311893Sasomers		while read f; do
181311893Sasomers			rm -f ${f}
182311893Sasomers		done < ${PLAINFILES}
183311893Sasomers		rm ${PLAINFILES}
184311893Sasomers	fi
185311893Sasomers
186311893Sasomers	if [ -f "md.devs" ]; then
187311893Sasomers		while read test_md; do
188311893Sasomers			mdconfig -d -u $test_md 2>/dev/null
189311893Sasomers		done < md.devs
190311893Sasomers		rm md.devs
191311893Sasomers	fi
192311893Sasomers	true
193311893Sasomers}
194