diff options
-rwxr-xr-x | source3/script/tests/test_smbclient_tarmode.sh | 181 | ||||
-rwxr-xr-x | source3/selftest/tests.py | 5 |
2 files changed, 185 insertions, 1 deletions
diff --git a/source3/script/tests/test_smbclient_tarmode.sh b/source3/script/tests/test_smbclient_tarmode.sh new file mode 100755 index 0000000000..331ba20219 --- /dev/null +++ b/source3/script/tests/test_smbclient_tarmode.sh @@ -0,0 +1,181 @@ +#!/bin/sh + +# this runs a simple tarmode test + +if [ $# -lt 7 ]; then +cat <<EOF +Usage: test_smbclient_tarmode.sh SERVER SERVER_IP USERNAME PASSWORD LOCAL_PATH PREFIX SMBCLIENT [create|extract] <smbclient arguments> +EOF +exit 1; +fi + +SERVER="$1" +SERVER_IP="$2" +USERNAME="$3" +PASSWORD="$4" +LOCAL_PATH="$5" +PREFIX="$6" +SMBCLIENT="$7" +SMBCLIENT="$VALGRIND ${SMBCLIENT}" +shift 7 +ADDARGS="$*" + +incdir=`dirname $0`/../../../testprogs/blackbox +. $incdir/subunit.sh + +FAILCOUNT=0 + +# Check command is available +have_command() { + type "$1" > /dev/null 2>&1 + return $? +} + +# Create a test corpus +create_test_data() { + + local DIR="$1" + local BS=1024 + local NUM_FILES=10 + local NORND_COUNT=25 + + # Bomb if dir exists + if [ -e "$DIR" ]; then + echo "Test data directory '$DIR' already exists!" + false + return + fi + + if ! mkdir -p "$DIR" > /dev/null 2>&1; then + echo "Couldn't create test data directory '$DIR'" + false + return + fi + + local I=1 + if have_command "od"; then # Use random file sizes + local RND_COUNT + for RND_COUNT in `od -An -N$NUM_FILES -tu1 < /dev/urandom`; do + if ! dd if=/dev/urandom of="$DIR/file.$I" bs=$BS count=$RND_COUNT > /dev/null 2>&1; then + echo "Couldn't create test file '$DIR/file.$I' (random size)" + false + return + fi + I=`expr $I + 1` + done + else # Fallback to same file sizes + while [ $I -le $NUM_FILES ]; do + if ! dd if=/dev/urandom of="$DIR/file.$I" bs=$BS count=$NORND_COUNT > /dev/null 2>&1; then + echo "Couldn't create test file '$DIR/file.$I' (static size)" + false + return + fi + I=`expr $I + 1` + done + fi + + true + return + +} + +# Check that two directories are equivalent (In Data content) +validate_data() { + local DIR1="$1" + local DIR2="$2" + + diff -r "$DIR1" "$DIR2" + return $? +} + +# Test tarmode -Tc +test_tarmode_creation() { + + # Clear temp data + rm -rf -- "$PREFIX"/tarmode > /dev/null 2>&1 + rm -f "$PREFIX"/tarmode.tar > /dev/null 2>&1 + rm -rf "$LOCAL_PATH"/tarmode > /dev/null 2>&1 + + # Build the test data + if ! create_test_data "$LOCAL_PATH/tarmode"; then + echo "Test data creation failed" + false + return + fi + + # Create tarfile with smbclient + if ! $SMBCLIENT //$SERVER/tmp $CONFIGURATION -U$USERNAME%$PASSWORD -I $SERVER_IP -p 139 \ + $ADDARGS -c "tarmode full" -Tc "$PREFIX/tarmode.tar" "/tarmode"; then + echo "Couldn't create tar file with tarmode -Tc" + false + return + fi + + # Extract data to verify + if ! tar -xf "$PREFIX/tarmode.tar" -C "$PREFIX"; then + echo "Couldn't extract data from created tarfile" + false + return + fi + + # Verify data + if ! validate_data "$PREFIX/tarmode" "$LOCAL_PATH/tarmode"; then + echo "Data not equivalent" + false + return + fi + + true + return + +} + +# Test tarmode -Tx +test_tarmode_extraction() { + + # Clear temp data + rm -rf -- "$PREFIX"/tarmode > /dev/null 2>&1 + rm -f "$PREFIX"/tarmode.tar > /dev/null 2>&1 + rm -rf "$LOCAL_PATH"/tarmode > /dev/null 2>&1 + + # Build the test data + if ! create_test_data "$PREFIX/tarmode"; then + echo "Test data creation failed" + false + return + fi + + # Create tarfile to extract on client + if ! tar -cf "$PREFIX/tarmode.tar" -C "$PREFIX" tarmode; then + echo "Couldn't create tar archive" + false + return + fi + + # Extract tarfile with smbclient + if ! $SMBCLIENT //$SERVER/tmp $CONFIGURATION -U$USERNAME%$PASSWORD -I $SERVER_IP -p 139 \ + $ADDARGS -c "tarmode full" -Tx "$PREFIX/tarmode.tar"; then + echo "Couldn't extact tar file with tarmode -Tx" + false + return + fi + + # Verify data + if ! validate_data "$PREFIX/tarmode" "$LOCAL_PATH/tarmode"; then + echo "Data not equivalent" + false + return + fi + + true + return + +} + +testit "test_tarmode_creation" \ + test_tarmode_creation || FAILCOUNT=`expr $FAILCOUNT + 1` + +testit "test_tarmode_extraction" \ + test_tarmode_extraction || FAILCOUNT=`expr $FAILCOUNT + 1` + +testok $0 $FAILCOUNT diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index a890372883..945d26a673 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -203,10 +203,13 @@ for env in ["s3dc"]: for env in ["member", "s3member"]: plantestsuite("samba3.blackbox.smbclient_s3.sign (%s) member creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$SERVER', '$SERVER\\\\$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', smbclient, wbinfo, configuration, "--signing=required"]) -# encrypted for env in ["s3dc"]: + # encrypted plantestsuite("samba3.blackbox.smbclient_s3.crypt (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', smbclient, wbinfo, configuration, "-e"]) + # Test smbclient/tarmode + plantestsuite("samba3.blackbox.smbclient_tarmode (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_tarmode.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$LOCAL_PATH', '$PREFIX', smbclient, configuration]) + #TODO encrypted against member, with member creds, and with DC creds plantestsuite("samba3.blackbox.net.misc", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_misc.sh"), |