xref: /freebsd/sbin/tunefs/tests/tunefs_test.sh (revision 6630c3a73688ae3c33df892f6802bea5b8460e17)
1*6630c3a7SDag-Erling Smørgrav#
2*6630c3a7SDag-Erling Smørgrav# Copyright (c) 2026 Dag-Erling Smørgrav <des@FreeBSD.org>
3*6630c3a7SDag-Erling Smørgrav#
4*6630c3a7SDag-Erling Smørgrav# SPDX-License-Identifier: BSD-2-Clause
5*6630c3a7SDag-Erling Smørgrav#
6*6630c3a7SDag-Erling Smørgrav
7*6630c3a7SDag-Erling Smørgrav# Create a small file system to experiment on
8*6630c3a7SDag-Erling Smørgravtunefs_setup()
9*6630c3a7SDag-Erling Smørgrav{
10*6630c3a7SDag-Erling Smørgrav	atf_check -o save:dev mdconfig -t malloc -s 16M
11*6630c3a7SDag-Erling Smørgrav	tunefs_dev=/dev/$(cat dev)
12*6630c3a7SDag-Erling Smørgrav	atf_check -o ignore newfs "$@" $tunefs_dev
13*6630c3a7SDag-Erling Smørgrav}
14*6630c3a7SDag-Erling Smørgrav
15*6630c3a7SDag-Erling Smørgrav# Verify that the changes we ask tunefs to perform are applied to the
16*6630c3a7SDag-Erling Smørgrav# test file system
17*6630c3a7SDag-Erling Smørgravtunefs_test()
18*6630c3a7SDag-Erling Smørgrav{
19*6630c3a7SDag-Erling Smørgrav	local opt=$1		# tunefs option
20*6630c3a7SDag-Erling Smørgrav	local name=$2		# what tunefs(8) calls it
21*6630c3a7SDag-Erling Smørgrav	local descr=${3:-$name}	# what file(1) calls it, if different
22*6630c3a7SDag-Erling Smørgrav
23*6630c3a7SDag-Erling Smørgrav	# Verify that the optin is not enabled
24*6630c3a7SDag-Erling Smørgrav	atf_check -o not-match:"$name" \
25*6630c3a7SDag-Erling Smørgrav	    file -s $tunefs_dev
26*6630c3a7SDag-Erling Smørgrav
27*6630c3a7SDag-Erling Smørgrav	# Enable the option and verify that it is enabled
28*6630c3a7SDag-Erling Smørgrav	atf_check -e match:"$name set" -o ignore \
29*6630c3a7SDag-Erling Smørgrav	    tunefs $opt enable $tunefs_dev
30*6630c3a7SDag-Erling Smørgrav	atf_check -o match:"$descr" \
31*6630c3a7SDag-Erling Smørgrav	    file -s $tunefs_dev
32*6630c3a7SDag-Erling Smørgrav
33*6630c3a7SDag-Erling Smørgrav	# Enable it again and verify that it is still enabled
34*6630c3a7SDag-Erling Smørgrav	atf_check -e match:"$name remains unchanged as enabled" \
35*6630c3a7SDag-Erling Smørgrav	    tunefs $opt enable $tunefs_dev
36*6630c3a7SDag-Erling Smørgrav	atf_check -o match:"$descr" \
37*6630c3a7SDag-Erling Smørgrav	    file -s $tunefs_dev
38*6630c3a7SDag-Erling Smørgrav
39*6630c3a7SDag-Erling Smørgrav	# Disable the option and verify that it is disabled
40*6630c3a7SDag-Erling Smørgrav	atf_check -e match:"$name cleared" -o ignore \
41*6630c3a7SDag-Erling Smørgrav	    tunefs $opt disable $tunefs_dev
42*6630c3a7SDag-Erling Smørgrav	atf_check -o not-match:"$descr" \
43*6630c3a7SDag-Erling Smørgrav	    file -s $tunefs_dev
44*6630c3a7SDag-Erling Smørgrav
45*6630c3a7SDag-Erling Smørgrav	# Disable it again and verify that it is still disabled
46*6630c3a7SDag-Erling Smørgrav	atf_check -e match:"$name remains unchanged as disabled" \
47*6630c3a7SDag-Erling Smørgrav	    tunefs $opt disable $tunefs_dev
48*6630c3a7SDag-Erling Smørgrav	atf_check -o not-match:"$descr" \
49*6630c3a7SDag-Erling Smørgrav	    file -s $tunefs_dev
50*6630c3a7SDag-Erling Smørgrav}
51*6630c3a7SDag-Erling Smørgrav
52*6630c3a7SDag-Erling Smørgrav# Clean up after ourselves
53*6630c3a7SDag-Erling Smørgravtunefs_cleanup()
54*6630c3a7SDag-Erling Smørgrav{
55*6630c3a7SDag-Erling Smørgrav	# Destroy the test file system
56*6630c3a7SDag-Erling Smørgrav	if [ -f dev ]; then
57*6630c3a7SDag-Erling Smørgrav		mdconfig -d -u $(cat dev) || true
58*6630c3a7SDag-Erling Smørgrav	fi
59*6630c3a7SDag-Erling Smørgrav}
60*6630c3a7SDag-Erling Smørgrav
61*6630c3a7SDag-Erling Smørgrav# POSIX.1e ACLs
62*6630c3a7SDag-Erling Smørgravatf_test_case posixacl cleanup
63*6630c3a7SDag-Erling Smørgravposixacl_head()
64*6630c3a7SDag-Erling Smørgrav{
65*6630c3a7SDag-Erling Smørgrav	atf_set descr "Turn POSIX.1e ACLs on and off"
66*6630c3a7SDag-Erling Smørgrav	atf_set require.user "root"
67*6630c3a7SDag-Erling Smørgrav}
68*6630c3a7SDag-Erling Smørgravposixacl_body()
69*6630c3a7SDag-Erling Smørgrav{
70*6630c3a7SDag-Erling Smørgrav	tunefs_setup
71*6630c3a7SDag-Erling Smørgrav	tunefs_test -a "POSIX.1e ACLs"
72*6630c3a7SDag-Erling Smørgrav}
73*6630c3a7SDag-Erling Smørgravposixacl_cleanup()
74*6630c3a7SDag-Erling Smørgrav{
75*6630c3a7SDag-Erling Smørgrav	tunefs_cleanup
76*6630c3a7SDag-Erling Smørgrav}
77*6630c3a7SDag-Erling Smørgrav
78*6630c3a7SDag-Erling Smørgrav# NFSv4 ACLs
79*6630c3a7SDag-Erling Smørgravatf_test_case nfs4acl cleanup
80*6630c3a7SDag-Erling Smørgravnfs4acl_head()
81*6630c3a7SDag-Erling Smørgrav{
82*6630c3a7SDag-Erling Smørgrav	atf_set descr "Turn NFSv4 ACLs on and off"
83*6630c3a7SDag-Erling Smørgrav	atf_set require.user "root"
84*6630c3a7SDag-Erling Smørgrav}
85*6630c3a7SDag-Erling Smørgravnfs4acl_body()
86*6630c3a7SDag-Erling Smørgrav{
87*6630c3a7SDag-Erling Smørgrav	tunefs_setup
88*6630c3a7SDag-Erling Smørgrav	tunefs_test -N "NFSv4 ACLs"
89*6630c3a7SDag-Erling Smørgrav}
90*6630c3a7SDag-Erling Smørgravnfs4acl_cleanup()
91*6630c3a7SDag-Erling Smørgrav{
92*6630c3a7SDag-Erling Smørgrav	tunefs_cleanup
93*6630c3a7SDag-Erling Smørgrav}
94*6630c3a7SDag-Erling Smørgrav
95*6630c3a7SDag-Erling Smørgrav# Soft Updates (no journaling)
96*6630c3a7SDag-Erling Smørgravatf_test_case sunoj cleanup
97*6630c3a7SDag-Erling Smørgravsunoj_head()
98*6630c3a7SDag-Erling Smørgrav{
99*6630c3a7SDag-Erling Smørgrav	atf_set descr "Turn Soft Updates on and off"
100*6630c3a7SDag-Erling Smørgrav	atf_set require.user "root"
101*6630c3a7SDag-Erling Smørgrav}
102*6630c3a7SDag-Erling Smørgravsunoj_body()
103*6630c3a7SDag-Erling Smørgrav{
104*6630c3a7SDag-Erling Smørgrav	tunefs_setup -u
105*6630c3a7SDag-Erling Smørgrav	tunefs_test -n "soft updates"
106*6630c3a7SDag-Erling Smørgrav}
107*6630c3a7SDag-Erling Smørgravsunoj_cleanup()
108*6630c3a7SDag-Erling Smørgrav{
109*6630c3a7SDag-Erling Smørgrav	tunefs_cleanup
110*6630c3a7SDag-Erling Smørgrav}
111*6630c3a7SDag-Erling Smørgrav
112*6630c3a7SDag-Erling Smørgrav# Soft Updates journaling
113*6630c3a7SDag-Erling Smørgravatf_test_case suj cleanup
114*6630c3a7SDag-Erling Smørgravsuj_head()
115*6630c3a7SDag-Erling Smørgrav{
116*6630c3a7SDag-Erling Smørgrav	atf_set descr "Turn Soft Updates journaling on and off"
117*6630c3a7SDag-Erling Smørgrav	atf_set require.user "root"
118*6630c3a7SDag-Erling Smørgrav}
119*6630c3a7SDag-Erling Smørgravsuj_body()
120*6630c3a7SDag-Erling Smørgrav{
121*6630c3a7SDag-Erling Smørgrav	tunefs_setup
122*6630c3a7SDag-Erling Smørgrav	tunefs_test -j "soft updates journaling"
123*6630c3a7SDag-Erling Smørgrav}
124*6630c3a7SDag-Erling Smørgravsuj_cleanup()
125*6630c3a7SDag-Erling Smørgrav{
126*6630c3a7SDag-Erling Smørgrav	tunefs_cleanup
127*6630c3a7SDag-Erling Smørgrav}
128*6630c3a7SDag-Erling Smørgrav
129*6630c3a7SDag-Erling Smørgrav# GEOM journaling
130*6630c3a7SDag-Erling Smørgravatf_test_case gjournal cleanup
131*6630c3a7SDag-Erling Smørgravgjournal_head()
132*6630c3a7SDag-Erling Smørgrav{
133*6630c3a7SDag-Erling Smørgrav	atf_set descr "Turn GEOM journaling on and off"
134*6630c3a7SDag-Erling Smørgrav	atf_set require.user "root"
135*6630c3a7SDag-Erling Smørgrav}
136*6630c3a7SDag-Erling Smørgravgjournal_body()
137*6630c3a7SDag-Erling Smørgrav{
138*6630c3a7SDag-Erling Smørgrav	tunefs_setup -u
139*6630c3a7SDag-Erling Smørgrav	tunefs_test -J "gjournal" "GEOM journaling"
140*6630c3a7SDag-Erling Smørgrav}
141*6630c3a7SDag-Erling Smørgravgjournal_cleanup()
142*6630c3a7SDag-Erling Smørgrav{
143*6630c3a7SDag-Erling Smørgrav	tunefs_cleanup
144*6630c3a7SDag-Erling Smørgrav}
145*6630c3a7SDag-Erling Smørgrav
146*6630c3a7SDag-Erling Smørgrav# Try combining Soft Updates with GEOM journaling
147*6630c3a7SDag-Erling Smørgravatf_test_case conflict cleanup
148*6630c3a7SDag-Erling Smørgravconflict_head()
149*6630c3a7SDag-Erling Smørgrav{
150*6630c3a7SDag-Erling Smørgrav	atf_set descr "Soft Updates and GEOM journaling are mutually exclusive"
151*6630c3a7SDag-Erling Smørgrav	atf_set require.user "root"
152*6630c3a7SDag-Erling Smørgrav}
153*6630c3a7SDag-Erling Smørgravconflict_body()
154*6630c3a7SDag-Erling Smørgrav{
155*6630c3a7SDag-Erling Smørgrav	tunefs_setup -U
156*6630c3a7SDag-Erling Smørgrav
157*6630c3a7SDag-Erling Smørgrav	# Verify that SU is enabled
158*6630c3a7SDag-Erling Smørgrav	atf_check -o match:"soft updates" \
159*6630c3a7SDag-Erling Smørgrav	    file -s $tunefs_dev
160*6630c3a7SDag-Erling Smørgrav	# Verify that enabling gjournal fails
161*6630c3a7SDag-Erling Smørgrav	atf_check -e match:"cannot be enabled" \
162*6630c3a7SDag-Erling Smørgrav	    tunefs -J enable $tunefs_dev
163*6630c3a7SDag-Erling Smørgrav	# Now turn SU off
164*6630c3a7SDag-Erling Smørgrav	atf_check -e match:"soft updates cleared" \
165*6630c3a7SDag-Erling Smørgrav	    tunefs -n disable $tunefs_dev
166*6630c3a7SDag-Erling Smørgrav	# Enable gjournal
167*6630c3a7SDag-Erling Smørgrav	atf_check -e match:"gjournal set" \
168*6630c3a7SDag-Erling Smørgrav	    tunefs -J enable $tunefs_dev
169*6630c3a7SDag-Erling Smørgrav	# Verify that enabling SU+J fails
170*6630c3a7SDag-Erling Smørgrav	atf_check -e match:"cannot be enabled" \
171*6630c3a7SDag-Erling Smørgrav	    tunefs -j enable $tunefs_dev
172*6630c3a7SDag-Erling Smørgrav	# Verify that enabling SU alone fails
173*6630c3a7SDag-Erling Smørgrav	atf_check -e match:"cannot be enabled" \
174*6630c3a7SDag-Erling Smørgrav	    tunefs -n enable $tunefs_dev
175*6630c3a7SDag-Erling Smørgrav}
176*6630c3a7SDag-Erling Smørgravconflict_cleanup()
177*6630c3a7SDag-Erling Smørgrav{
178*6630c3a7SDag-Erling Smørgrav	tunefs_cleanup
179*6630c3a7SDag-Erling Smørgrav}
180*6630c3a7SDag-Erling Smørgrav
181*6630c3a7SDag-Erling Smørgravatf_init_test_cases()
182*6630c3a7SDag-Erling Smørgrav{
183*6630c3a7SDag-Erling Smørgrav	atf_add_test_case posixacl
184*6630c3a7SDag-Erling Smørgrav	atf_add_test_case nfs4acl
185*6630c3a7SDag-Erling Smørgrav	atf_add_test_case sunoj
186*6630c3a7SDag-Erling Smørgrav	atf_add_test_case suj
187*6630c3a7SDag-Erling Smørgrav	atf_add_test_case gjournal
188*6630c3a7SDag-Erling Smørgrav	atf_add_test_case conflict
189*6630c3a7SDag-Erling Smørgrav}
190