diff options
Diffstat (limited to 'source3/script/tests/test_net_registry_roundtrip.sh')
-rwxr-xr-x | source3/script/tests/test_net_registry_roundtrip.sh | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/source3/script/tests/test_net_registry_roundtrip.sh b/source3/script/tests/test_net_registry_roundtrip.sh new file mode 100755 index 0000000..6aeed0c --- /dev/null +++ b/source3/script/tests/test_net_registry_roundtrip.sh @@ -0,0 +1,158 @@ +#!/bin/sh +# +# Blackbox test for net conf/registry roundtrips. +# +# Copyright (C) 2010 Gregor Beck <gbeck@sernet.de> +# Copyright (C) 2011 Michael Adam <obnox@samba.org> + +if [ $# -lt 3 ]; then + cat <<EOF +Usage: test_net_registry_roundtrip.sh SCRIPTDIR SERVERCONFFILE NET CONFIGURATION RPC +EOF + exit 1 +fi + +SCRIPTDIR="$1" +SERVERCONFFILE="$2" +NET="$3" +CONFIGURATION="$4" +RPC="$5" + +NET="$VALGRIND ${NET} $CONFIGURATION" + +if test "x${RPC}" = "xrpc"; then + NETCMD="${NET} -U${USERNAME}%${PASSWORD} -I ${SERVER_IP} rpc" +else + NETCMD="${NET}" +fi + +incdir=$(dirname $0)/../../../testprogs/blackbox +. $incdir/subunit.sh + +failed=0 + +# +# List of parameters to skip when importing configuration files: +# They are forbidden in the registry and would lead import to fail. +# +SED_INVALID_PARAMS="{ +s/state directory/;&/g +s/lock directory/;&/g +s/lock dir/;&/g +s/config backend/;&/g +s/include/;&/g +}" + +REGPATH="HKLM\Software\Samba" + +conf_roundtrip_step() +{ + echo "CMD: $*" >>$LOG + $@ 2>>$LOG + RC=$? + echo "RC: $RC" >>$LOG + test "x$RC" = "x0" || { + echo "ERROR: $@ failed (RC=$RC)" | tee -a $LOG + } + return $RC + # echo -n . +} + +LOGDIR_PREFIX="conf_roundtrip" + +conf_roundtrip() +( + DIR=$(mktemp -d ${PREFIX}/${LOGDIR_PREFIX}_XXXXXX) + LOG=$DIR/log + + echo conf_roundtrip $1 >$LOG + + sed -e "$SED_INVALID_PARAMS" $1 >$DIR/conf_in + + conf_roundtrip_step $NETCMD conf drop + test "x$?" = "x0" || { + return 1 + } + + test -z "$($NETCMD conf list)" 2>>$LOG + if [ "$?" = "1" ]; then + echo "ERROR: conf drop failed" | tee -a $LOG + return 1 + fi + + conf_roundtrip_step $NETCMD conf import $DIR/conf_in + test "x$?" = "x0" || { + return 1 + } + + conf_roundtrip_step $NETCMD conf list >$DIR/conf_exp + test "x$?" = "x0" || { + return 1 + } + + grep "\[global\]" $DIR/conf_exp >/dev/null 2>>$LOG + if [ "$?" = "1" ]; then + echo "ERROR: conf import => conf export failed" | tee -a $LOG + return 1 + fi + + conf_roundtrip_step $NETCMD -d10 registry export $REGPATH $DIR/conf_exp.reg + test "x$?" = "x0" || { + return 1 + } + + conf_roundtrip_step $NETCMD conf drop + test "x$?" = "x0" || { + return 1 + } + + test -z "$($NETCMD conf list)" 2>>$LOG + if [ "$?" = "1" ]; then + echo "ERROR: conf drop failed" | tee -a $LOG + return 1 + fi + + conf_roundtrip_step $NETCMD registry import $DIR/conf_exp.reg + test "x$?" = "x0" || { + return 1 + } + + conf_roundtrip_step $NETCMD conf list >$DIR/conf_out + test "x$?" = "x0" || { + return 1 + } + + diff -q $DIR/conf_out $DIR/conf_exp >>$LOG + if [ "$?" = "1" ]; then + echo "ERROR: registry import => conf export failed" | tee -a $LOG + return 1 + fi + + conf_roundtrip_step $NETCMD registry export $REGPATH $DIR/conf_out.reg + test "x$?" = "x0" || { + return 1 + } + + diff -q $DIR/conf_out.reg $DIR/conf_exp.reg >>$LOG + if [ "$?" = "1" ]; then + echo "Error: registry import => registry export failed" | tee -a $LOG + return 1 + fi + rm -r $DIR +) + +CONF_FILES=$SERVERCONFFILE + +# remove old logs: +for OLDDIR in $(find ${PREFIX} -type d -name "${LOGDIR_PREFIX}_*"); do + echo "removing old directory ${OLDDIR}" + rm -rf ${OLDDIR} +done + +for conf_file in $CONF_FILES; do + testit "conf_roundtrip $conf_file" \ + conf_roundtrip $conf_file || + failed=$(expr $failed + 1) +done + +testok $0 $failed |