mirror of
https://github.com/samba-team/samba.git
synced 2025-01-10 01:18:15 +03:00
4bb3bffa4b
Make sure samba3.blackbox.smbclient_tarmode removes data files not just before running the test but also after BUG: https://bugzilla.samba.org/show_bug.cgi?id=14581 Signed-off-by: Noel Power <noel.power@suse.com> Reviewed-by: Jeremy Allison <jra@samba.org>
193 lines
4.4 KiB
Bash
Executable File
193 lines
4.4 KiB
Bash
Executable File
#!/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
|
|
$SMBCLIENT //$SERVER/tarmode $CONFIGURATION -U$USERNAME%$PASSWORD -c "deltree smbclient_tar"
|
|
|
|
# Build the test data
|
|
if ! create_test_data "$LOCAL_PATH"; then
|
|
echo "Test data creation failed"
|
|
false
|
|
return
|
|
fi
|
|
|
|
# Create tarfile with smbclient
|
|
if ! $SMBCLIENT //$SERVER/tarmode $CONFIGURATION -U$USERNAME%$PASSWORD -I $SERVER_IP -p 139 \
|
|
$ADDARGS -c "tarmode full" -Tc "$PREFIX/tarmode.tar" "/smbclient_tar"; then
|
|
echo "Couldn't create tar file with tarmode -Tc"
|
|
false
|
|
return
|
|
fi
|
|
|
|
# Extract data to verify - this puts it into $PREFIX/smbclient_tar/
|
|
# but we must leave it there as it's used to verify in test_tarmode_extraction()
|
|
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/smbclient_tar" "$LOCAL_PATH"; then
|
|
echo "Data not equivalent"
|
|
false
|
|
return
|
|
fi
|
|
|
|
# Clear temp data
|
|
rm -rf -- "$PREFIX"/tarmode > /dev/null 2>&1
|
|
rm -f "$PREFIX"/tarmode.tar > /dev/null 2>&1
|
|
$SMBCLIENT //$SERVER/tarmode $CONFIGURATION -U$USERNAME%$PASSWORD -c "deltree smbclient_tar"
|
|
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
|
|
$SMBCLIENT //$SERVER/tarmode $CONFIGURATION -U$USERNAME%$PASSWORD -c "deltree smbclient_tar"
|
|
|
|
# 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" smbclient_tar; then
|
|
echo "Couldn't create tar archive"
|
|
false
|
|
return
|
|
fi
|
|
|
|
# Extract tarfile with smbclient
|
|
if ! $SMBCLIENT //$SERVER/tarmode $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/smbclient_tar" "$LOCAL_PATH"; then
|
|
echo "Data not equivalent"
|
|
false
|
|
return
|
|
fi
|
|
|
|
# Clear temp data
|
|
rm -rf -- "$PREFIX"/tarmode > /dev/null 2>&1
|
|
rm -f "$PREFIX"/tarmode.tar > /dev/null 2>&1
|
|
$SMBCLIENT //$SERVER/tarmode $CONFIGURATION -U$USERNAME%$PASSWORD -c "deltree smbclient_tar"
|
|
# Cleanup the verification data created by test_tarmode_creation().
|
|
rm -rf "$PREFIX"/smbclient_tar > /dev/null 2>&1
|
|
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
|