summaryrefslogtreecommitdiffstats
path: root/scripts/smb.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/smb.sh')
-rwxr-xr-xscripts/smb.sh214
1 files changed, 214 insertions, 0 deletions
diff --git a/scripts/smb.sh b/scripts/smb.sh
new file mode 100755
index 000000000..7cf6c4bc1
--- /dev/null
+++ b/scripts/smb.sh
@@ -0,0 +1,214 @@
+#!/bin/bash
+
+BASETANK="share"
+DATE=`date "+%Y%m%d"`
+
+TEST_SMBFS=0
+TEST_DESTROY=0
+
+if [ -z "$1" ]; then
+ echo "Usage: `basename $0` [unpack]<[smbfs][snapshot][all]>"
+ exit 1
+fi
+
+set_onoff() {
+ type="$1"
+ dataset="$2"
+ toggle="$3"
+
+ current=`zfs get -H $type -o value $dataset`
+ if [ "$current" != "$toggle" ]; then
+ run "zfs set $type=$toggle $dataset"
+ fi
+}
+
+check_exists() {
+ dataset="$1"
+
+ extra=""
+ [ -n "$2" ] && extra="$2"
+
+ zfs get all "$dataset" > /dev/null 2>&1
+ if [ $? != 0 ]; then
+ run "zfs create $extra $dataset"
+ fi
+}
+
+check_shares() {
+ if [ "$TEST_SMBFS" == "1" ]; then
+ echo "Shares:"
+ echo "=> usershare list:"
+ net usershare list
+ echo
+ echo "=> /etc/dfs/sharetab:"
+ cat /etc/dfs/sharetab
+ echo
+ fi
+
+ sleep 2
+}
+
+test_header() {
+ echo "TEST: $*"
+ echo "======================================"
+}
+
+run() {
+ cmd="$*"
+
+ echo "CMD: $cmd"
+ $cmd
+}
+
+# ---------
+# Needs more work...
+if echo "$*" | grep -qi "unpack"; then
+ zfs unmount -a
+ zfs unshare -a
+ run "zfs destroy -r $BASETANK/tests"
+
+ sh /etc/init.d/zfs stop
+
+# for tid in `grep ^tid /proc/net/iet/volume | sed "s@.*:\([0-9].*\) name.*@\1@"`
+# do
+# ietadm --op delete --tid $tid
+# done
+
+ set -e
+ rmmod `lsmod | grep ^z | grep -v zlib_deflate | sed 's@ .*@@'` spl zlib_deflate
+
+ pushd / > /dev/null
+ [ -f "tmp/zfs.tgz" ] && tar xzf tmp/zfs.tgz && rm tmp/zfs.tgz
+ [ -f "tmp/spl.tgz" ] && tar xzf tmp/spl.tgz && rm tmp/spl.tgz
+ popd > /dev/null
+
+ depmod -a
+
+ sh /etc/init.d/zfs start
+ set +e
+fi
+
+# ---------
+if echo "$*" | egrep -qi "smbfs|all"; then
+ check_exists $BASETANK/tests
+
+ TEST_SMBFS=1
+
+ test_header "Exists || Create"
+ str=
+ for volnr in 1 2 3; do
+ check_exists $BASETANK/tests/smbfs$volnr
+
+ str="$str $BASETANK/tests/smbfs$volnr"
+ done
+ run "zfs get sharesmb $str"
+
+ # Set sharesmb=on
+ test_header "Enable SMB share"
+ for volnr in 1 2 3; do
+ set_onoff sharesmb "$BASETANK/tests/smbfs$volnr" on
+ check_shares
+ done
+
+ # Share all
+ test_header "Share all (individually)"
+ for volnr in 1 2 3; do
+ run "zfs share $BASETANK/tests/smbfs$volnr"
+ check_shares
+ done
+
+ # Unshare all
+ test_header "Unshare all (individually)"
+ for volnr in 1 2 3; do
+ run "zfs unshare $BASETANK/tests/smbfs$volnr"
+ check_shares
+ done
+
+ # Change mountpoint - first unshare and then share individual
+ test_header "Change mount point (unshare ; share)"
+ mkdir -p /tests
+ set_onoff sharesmb "$str" off
+ for volnr in 3 1 2; do
+ run "zfs set mountpoint=/tests/smbfs$volnr $BASETANK/tests/smbfs$volnr"
+ echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr"
+ mount | grep ^$BASETANK/tests/smbfs$volnr
+ echo
+
+ run "zfs mount $BASETANK/tests/smbfs$volnr"
+ echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr"
+ mount | grep ^$BASETANK/tests/smbfs$volnr
+ echo
+
+ set_onoff sharesmb "$BASETANK/tests/smbfs$volnr" on
+ check_shares
+
+ run "zfs share $BASETANK/tests/smbfs$volnr"
+ check_shares
+
+ echo "-------------------"
+ done
+
+ # Change mountpoint - remounting
+ test_header "Change mount point (remounting)"
+ for volnr in 3 1 2; do
+ run "zfs set mountpoint=/$BASETANK/tests/smbfs$volnr $BASETANK/tests/smbfs$volnr"
+ echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr"
+ mount | grep ^$BASETANK/tests/smbfs$volnr
+ echo
+ # => Doesn't seem to remount (!?)
+
+ run "zfs mount $BASETANK/tests/smbfs$volnr"
+ echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr"
+ mount | grep ^$BASETANK/tests/smbfs$volnr
+ echo
+ # => Doesn't seem to reshare (!?)
+
+ check_shares
+
+ run "zfs share $BASETANK/tests/smbfs$volnr"
+ check_shares
+
+ echo "-------------------"
+ done
+fi
+
+# ---------
+if echo "$*" | egrep -qi "smbfs|all"; then
+ test_header "Unshare + Share all"
+
+ run "zfs share -a" ; check_shares
+ run "zfs unshare -a" ; check_shares
+fi
+
+# ---------
+if echo "$*" | grep -qi "snapshot|all"; then
+ test_header "Snapshots"
+
+ echo ; echo "-------------------"
+ check_exists $BASETANK/tests/destroy
+ check_exists $BASETANK/tests/destroy/destroy1
+ run "zfs destroy -r $BASETANK/tests/destroy"
+
+ echo ; echo "-------------------"
+ check_exists $BASETANK/tests/destroy
+ run "zfs snapshot $BASETANK/tests/destroy@$DATE"
+ run "zfs destroy -r $BASETANK/tests/destroy"
+
+ echo ; echo "-------------------"
+ check_exists $BASETANK/tests/destroy
+ run "zfs snapshot $BASETANK/tests/destroy@$DATE"
+ run "zfs destroy -r $BASETANK/tests/destroy@$DATE"
+ run "zfs destroy -r $BASETANK/tests/destroy"
+fi
+
+if echo "$*" | egrep -qi "smbfs|snapshot|all"; then
+ test_header "Cleanup (Share all + Destroy all)"
+
+ run "zfs share -a"
+ check_shares
+
+ run "zfs destroy -r $BASETANK/tests"
+ check_shares
+
+ run "zfs list"
+fi