Add -p switch to "zpool get"
[zfs.git] / scripts / smb.sh
1 #!/bin/bash
2
3 BASETANK="share"
4 DATE=`date "+%Y%m%d"`
5
6 TEST_SMBFS=0
7 TEST_DESTROY=0
8
9 if [ -z "$1" ]; then
10         echo "Usage: `basename $0` [unpack]<[smbfs][snapshot][all]>"
11         exit 1
12 fi
13
14 set_onoff() {
15         type="$1"
16         dataset="$2"
17         toggle="$3"
18
19         current=`zfs get -H $type -o value $dataset`
20         if [ "$current" != "$toggle" ]; then
21                 run "zfs set $type=$toggle $dataset"
22         fi
23 }
24
25 check_exists() {
26         dataset="$1"
27
28         extra=""
29         [ -n "$2" ] && extra="$2"
30
31         zfs get all "$dataset" > /dev/null 2>&1
32         if [ $? != 0 ]; then
33                 run "zfs create $extra $dataset"
34         fi
35 }
36
37 check_shares() {
38         if [ "$TEST_SMBFS" == "1" ]; then
39                 echo "Shares:"
40                 echo "=> usershare list:"
41                 net usershare list
42                 echo
43                 echo "=> /etc/dfs/sharetab:"
44                 cat /etc/dfs/sharetab
45                 echo
46         fi
47
48         sleep 2
49 }
50
51 test_header() {
52         echo "TEST: $*"
53         echo "======================================"
54 }
55
56 run() {
57         cmd="$*"
58
59         echo "CMD: $cmd"
60         $cmd
61 }
62
63 # ---------
64 # Needs more work...
65 if echo "$*" | grep -qi "unpack"; then
66         zfs unmount -a
67         zfs unshare -a
68         run "zfs destroy -r $BASETANK/tests"
69
70         sh /etc/init.d/zfs stop
71
72 #       for tid in `grep ^tid /proc/net/iet/volume | sed "s@.*:\([0-9].*\) name.*@\1@"`
73 #       do
74 #               ietadm --op delete --tid $tid
75 #       done
76
77         set -e
78         rmmod `lsmod | grep ^z | grep -v zlib_deflate | sed 's@ .*@@'` spl zlib_deflate
79
80         pushd / > /dev/null
81         [ -f "tmp/zfs.tgz" ] && tar xzf tmp/zfs.tgz && rm tmp/zfs.tgz
82         [ -f "tmp/spl.tgz" ] && tar xzf tmp/spl.tgz && rm tmp/spl.tgz
83         popd > /dev/null
84
85         depmod -a
86
87         sh /etc/init.d/zfs start
88         set +e
89 fi
90
91 # ---------
92 if echo "$*" | egrep -qi "smbfs|all"; then
93         check_exists $BASETANK/tests
94
95         TEST_SMBFS=1
96
97         test_header "Exists || Create"
98         str=
99         for volnr in 1 2 3; do
100                 check_exists $BASETANK/tests/smbfs$volnr
101
102                 str="$str $BASETANK/tests/smbfs$volnr"
103         done
104         run "zfs get sharesmb $str"
105
106         # Set sharesmb=on
107         test_header "Enable SMB share"
108         for volnr in 1 2 3; do
109             set_onoff sharesmb "$BASETANK/tests/smbfs$volnr" on
110             check_shares
111         done
112
113         # Share all
114         test_header "Share all (individually)"
115         for volnr in 1 2 3; do
116             run "zfs share $BASETANK/tests/smbfs$volnr"
117             check_shares
118         done
119
120         # Unshare all
121         test_header "Unshare all (individually)"
122         for volnr in 1 2 3; do
123             run "zfs unshare $BASETANK/tests/smbfs$volnr"
124             check_shares
125         done
126
127         # Change mountpoint - first unshare and then share individual
128         test_header "Change mount point (unshare ; share)"
129         mkdir -p /tests
130         set_onoff sharesmb "$str" off
131         for volnr in 3 1 2; do
132                 run "zfs set mountpoint=/tests/smbfs$volnr $BASETANK/tests/smbfs$volnr"
133                 echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr"
134                 mount | grep ^$BASETANK/tests/smbfs$volnr
135                 echo
136
137                 run "zfs mount $BASETANK/tests/smbfs$volnr"
138                 echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr"
139                 mount | grep ^$BASETANK/tests/smbfs$volnr
140                 echo
141
142                 set_onoff sharesmb "$BASETANK/tests/smbfs$volnr" on
143                 check_shares
144
145                 run "zfs share $BASETANK/tests/smbfs$volnr"
146                 check_shares
147
148                 echo "-------------------"
149         done
150
151         # Change mountpoint - remounting
152         test_header "Change mount point (remounting)"
153         for volnr in 3 1 2; do
154                 run "zfs set mountpoint=/$BASETANK/tests/smbfs$volnr $BASETANK/tests/smbfs$volnr"
155                 echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr"
156                 mount | grep ^$BASETANK/tests/smbfs$volnr
157                 echo
158                 # => Doesn't seem to remount (!?)
159
160                 run "zfs mount $BASETANK/tests/smbfs$volnr"
161                 echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr"
162                 mount | grep ^$BASETANK/tests/smbfs$volnr
163                 echo
164                 # => Doesn't seem to reshare (!?)
165
166                 check_shares
167
168                 run "zfs share $BASETANK/tests/smbfs$volnr"
169                 check_shares
170
171                 echo "-------------------"
172         done
173 fi
174
175 # ---------
176 if echo "$*" | egrep -qi "smbfs|all"; then
177         test_header "Unshare + Share all"
178
179         run "zfs share -a" ; check_shares
180         run "zfs unshare -a" ; check_shares
181 fi
182
183 # ---------
184 if echo "$*" | grep -qi "snapshot|all"; then
185         test_header "Snapshots"
186
187         echo ; echo "-------------------"
188         check_exists $BASETANK/tests/destroy
189         check_exists $BASETANK/tests/destroy/destroy1
190         run "zfs destroy -r $BASETANK/tests/destroy"
191
192         echo ; echo "-------------------"
193         check_exists $BASETANK/tests/destroy
194         run "zfs snapshot $BASETANK/tests/destroy@$DATE"
195         run "zfs destroy -r $BASETANK/tests/destroy"
196
197         echo ; echo "-------------------"
198         check_exists $BASETANK/tests/destroy
199         run "zfs snapshot $BASETANK/tests/destroy@$DATE"
200         run "zfs destroy -r $BASETANK/tests/destroy@$DATE"
201         run "zfs destroy -r $BASETANK/tests/destroy"
202 fi
203
204 if echo "$*" | egrep -qi "smbfs|snapshot|all"; then
205         test_header "Cleanup (Share all + Destroy all)"
206
207         run "zfs share -a"
208         check_shares
209
210         run "zfs destroy -r $BASETANK/tests"
211         check_shares
212
213         run "zfs list"
214 fi