#!/bin/sh # # Blackbox test for disk-free, quota, and their interaction # if [ $# -lt 6 ]; then cat <>$CONFFILE shift shift done sighup_smbd #let it load... sleep .5 } test_smbclient_dfree() { name="$1" share="$2" dir="$3" confs="$4" expected="$5" shift shift shift shift subunit_start_test "$name" setup_conf $confs output=$($VALGRIND $smbclient //$SERVER/$share -c "cd $dir; l" "$@" 2>&1) status=$? if [ "$status" = "0" ]; then received=$(echo "$output" | awk '/blocks of size/ {print $1, $5, $6}') if [ "$expected" = "$received" ]; then subunit_pass_test "$name" return 0 else echo "$output" | subunit_fail_test "$name" return 1 fi else echo "$output" | subunit_fail_test "$name" return $status fi } # Issue two queries to different directories in one session to test # caching effects test_smbclient_dfree_2() { name="$1" share="$2" dir1="$3" dir2="$4" confs="$5" expected="$6" subunit_start_test "$name" setup_conf $confs output=$($VALGRIND $smbclient //$SERVER/$share \ -c "cd $dir1; du; cd ..; cd $dir2 ; du" "$@" 2>&1) status=$? if [ "$status" = "0" ]; then received=$(echo "$output" | awk '/blocks of size/ {print $1, $5, $6}' | tr '\n' ' ') if [ "$expected" = "$received" ]; then subunit_pass_test "$name" return 0 else echo "$output" | subunit_fail_test "$name" return 1 fi else echo "$output" | subunit_fail_test "$name" return $status fi } test_smbcquotas() { name="$1" conf="$2" user="$3" expected="$4" proto="$5" shift shift shift shift shift subunit_start_test "$name" setup_conf "$conf" "." if [ "$proto" = "smb2" ]; then mproto="-m SMB2" else mproto="-m SMB1" fi output=$($VALGRIND $smbcquotas $mproto //$SERVER/dfq "$@" 2>/dev/null | tr '\\' '/') status=$? if [ "$status" = "0" ]; then received=$(echo "$output" | awk "/$SERVER\\/$user/ {printf \"%s%s%s\", \$3, \$4, \$5}") if [ "$expected" = "$received" ]; then subunit_pass_test "$name" return 0 else echo "$output" | subunit_fail_test "$name" return 1 fi else echo "$output" | subunit_fail_test "$name" return $status fi } if [ $protocol != "SMB3" ] && [ $protocol != "NT1" ]; then echo "unsupported protocol $protocol" | subunit_fail_test "Test dfree quota" failed=$(expr $failed + 1) fi if [ $protocol = "NT1" ]; then setup_conf #basic quota test (SMB1 only) test_smbcquotas "Test user quota" confq1 $USERNAME "40960/4096000/3072000" "smb1" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=NT1 || failed=$(expr $failed + 1) exit $failed fi #basic disk-free tests test_smbclient_dfree "Test dfree share root SMB3 no quota" dfq "." "conf1 ." "10 1024. 5" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test dfree subdir SMB3 no quota" dfq "subdir1" "conf1 . conf2 subdir1" "20 1024. 10" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test large disk" dfq "." "conf3 ." "1125899906842624 1024. 3000" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) #basic quota test (SMB2 only) test_smbcquotas "Test user quota" confq1 $USERNAME "40960/4096000/3072000" "smb2" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB2 || failed=$(expr $failed + 1) # Test dfree cache through queries in two different directories test_smbclient_dfree_2 "Test dfree cache" dfq_cache "." "subdir1" \ "conf1 . conf2 subdir1" "10 1024. 5 20 1024. 10 " \ -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) #quota limit > disk size, remaining quota > disk free test_smbclient_dfree "Test dfree share root df vs quota case 1" dfq "." "confdfq1 ." "80 1024. 40" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) #quota limit > disk size, remaining quota < disk free test_smbclient_dfree "Test dfree share root df vs quota case 2" dfq "." "confdfq2 ." "80 1024. 12" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) #quota limit < disk size, remaining quota > disk free test_smbclient_dfree "Test dfree share root df vs quota case 3" dfq "." "confdfq3 ." "160 1024. 40" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) #quota limit < disk size, remaining quota < disk free test_smbclient_dfree "Test dfree share root df vs quota case 4" dfq "." "confdfq4 ." "160 1024. 12" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test dfree subdir df vs quota case 4" dfq "subdir1" "confdfq4 subdir1" "160 1024. 12" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) #quota-->disk free special cases test_smbclient_dfree "Test quota->dfree soft limit" dfq "subdir1" "slimit subdir1" "168 1024. 0" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test quota->dfree hard limit" dfq "subdir1" "hlimit subdir1" "180 1024. 0" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test quota->dfree inode soft limit" dfq "subdir1" "islimit subdir1" "148 1024. 0" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test quota->dfree inode hard limit" dfq "subdir1" "ihlimit subdir1" "148 1024. 0" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test quota->dfree err try group" dfq "subdir1" "trygrp1 subdir1" "240 1024. 20" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test quota->dfree no-quota try group" dfq "subdir1" "trygrp2 subdir1" "240 1024. 16" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) # sgid on directory test_smbclient_dfree "Test quota on sgid directory" dfq "subdir1" \ "sgid subdir1" "200 1024. 40" -U$USERNAME%$PASSWORD \ --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) #block size different in quota and df systems test_smbclient_dfree "Test quota->dfree different block size" dfq "subdir1" "blksize subdir1" "307200 1024. 307200" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) #quota configured but not enforced test_smbclient_dfree "Test dfree share root quota not enforced" dfq "." "notenforce ." "320 1024. 40" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) #FS quota not implemented (NFS case) test_smbclient_dfree "Test dfree share root FS quota not implemented" dfq "." "nfs ." "160 1024. 12" -U$USERNAME%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) #test for dfree when owner is inherited #setup two folders with different owners rm -rf $WORKDIR/subdir3/* for d in / subdir3; do $VALGRIND $smbcacls -U$USERNAME%$PASSWORD -D "ACL:$SERVER\user1:ALLOWED/0x0/FULL" //$SERVER/dfq $d >/dev/null 2>&1 $VALGRIND $smbcacls -U$USERNAME%$PASSWORD -a "ACL:$SERVER\user1:ALLOWED/0x0/FULL" //$SERVER/dfq $d || failed=$(expr $failed + 1) $VALGRIND $smbcacls -U$USERNAME%$PASSWORD -D "ACL:$SERVER\user2:ALLOWED/0x0/FULL" //$SERVER/dfq $d >/dev/null 2>&1 $VALGRIND $smbcacls -U$USERNAME%$PASSWORD -a "ACL:$SERVER\user2:ALLOWED/0x0/FULL" //$SERVER/dfq $d || failed=$(expr $failed + 1) done $VALGRIND $smbclient //$SERVER/dfq -c "cd subdir3; mkdir user1" -Uuser1%$PASSWORD --option=clientmaxprotocol=SMB3 >/dev/null 2>&1 || failed=$(expr $failed + 1) $VALGRIND $smbclient //$SERVER/dfq -c "cd subdir3; mkdir user2" -Uuser2%$PASSWORD --option=clientmaxprotocol=SMB3 >/dev/null 2>&1 || failed=$(expr $failed + 1) #test quotas test_smbclient_dfree "Test dfree without inherit owner - user1 at user1" \ dfq "subdir3/user1" "confdfqp subdir3/user1 confdfqp subdir3/user2" "160 1024. 16" \ -Uuser1%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test dfree without inherit owner - user1 at user2" \ dfq "subdir3/user2" "confdfqp subdir3/user1 confdfqp subdir3/user2" "160 1024. 16" \ -Uuser1%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test dfree with inherit owner - user1 at user1" \ dfq_owner "subdir3/user1" "confdfqp subdir3/user1 confdfqp subdir3/user2" "160 1024. 16" \ -Uuser1%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) test_smbclient_dfree "Test dfree with inherit owner - user1 at user2" \ dfq_owner "subdir3/user2" "confdfqp subdir3/user1 confdfqp subdir3/user2" "164 1024. 20" \ -Uuser1%$PASSWORD --option=clientmaxprotocol=SMB3 || failed=$(expr $failed + 1) setup_conf exit $failed