s3-selftest: introduce new net registry check check
authorBjörn Baumbach <bb@sernet.de>
Wed, 9 Nov 2011 12:24:42 +0000 (13:24 +0100)
committerMichael Adam <obnox@samba.org>
Wed, 21 Mar 2012 23:21:56 +0000 (00:21 +0100)
Add a new check which checks for defects in the net registry
check tool.

Signed-off-by: Michael Adam <obnox@samba.org>
source3/script/tests/test_net_registry_check.sh [new file with mode: 0755]

diff --git a/source3/script/tests/test_net_registry_check.sh b/source3/script/tests/test_net_registry_check.sh
new file mode 100755 (executable)
index 0000000..627f67c
--- /dev/null
@@ -0,0 +1,146 @@
+#!/bin/sh
+#
+# Blackbox tests for the "net registry check" command.
+#
+# Copyright (C) 2011 Björn Baumbach <bb@sernet.de>
+
+if [ $# -lt 5 ]; then
+       echo "Usage: test_net_registry.sh SCRIPTDIR SERVERCONFFILE NET CONFIGURATION DBWRAP_TOOL"
+       exit 1
+fi
+
+SCRIPTDIR="$1"
+SERVERCONFFILE="$2"
+NET="$3"
+CONFIGURATION="$4"
+DBWRAP_TOOL="$5"
+
+NET="$VALGRIND ${NET:-$BINDIR/net} $CONFIGURATION"
+
+NETREG="${NET} registry"
+REGORIG="$(grep 'state directory = ' $SERVERCONFFILE | sed 's/[^=]*=//')/registry.tdb"
+REG=$REGORIG.wip
+
+incdir=`dirname $0`/../../../testprogs/blackbox
+. $incdir/subunit.sh
+
+failed=0
+
+# run registry check and filter allowed errors
+regcheck()
+{
+       ALLOWEDERR="Check database:|INFO: version ="
+       ERRSTR=$(${NETREG} check $REG $@ 2>&1 | grep -E -v "$ALLOWEDERR")
+}
+
+# try to repair registry
+regrepair()
+{
+       regcheck -a
+}
+
+# check if $ERRSTR contains expected error
+checkerr()
+{
+       EXPERR=$1
+
+       ERRCNT=$(echo "$ERRSTR" | grep "$EXPERR" | wc -l)
+       return $ERRCNT
+}
+
+regchecknrepair()
+{
+       EXPERR="$1"
+       EXPERRCNT="$2"
+
+       regcheck
+       checkerr "$EXPERR"
+       test "x$?" = "x$ERRCNT" || {
+               echo "Expected $EXPERRCNT of error $EXPERR. Received $ERRCNT"
+               return 1
+       }
+
+       regrepair
+       regcheck
+       test "x$ERRSTR" = "x" || {
+               echo "Error: Can't repair database"
+               return 1
+       }
+}
+
+test_simple()
+{
+       local ERRSTR=""
+       cp $REGORIG $REG
+
+       regcheck
+       test "x$ERRSTR" = "x" || {
+               echo $ERRSTR
+               return 1
+       }
+}
+
+test_damage()
+{
+       diff $REGORIG $REG
+}
+
+test_duplicate()
+{
+       local ERRSTR=""
+       $DBWRAP_TOOL $REG store 'HKLM/SOFTWARE' hex '02000000534F4654574152450053595354454D00'
+
+       regchecknrepair "Duplicate subkeylist" 1
+}
+
+test_slashes()
+{
+       local ERRSTR=""
+       $DBWRAP_TOOL $REG store 'HKLM/SOFTWARE' hex '02000000534F4654574152450053595354454D00'
+
+       regchecknrepair "Unnormal key:" 1
+}
+
+test_uppercase()
+{
+       local ERRSTR=""
+       $DBWRAP_TOOL $REG store 'HKLM\Software' hex '02000000534F4654574152450053595354454D00'
+
+       regchecknrepair "Unnormal key:" 1
+}
+
+test_strangeletters()
+{
+       local ERRSTR=""
+       $DBWRAP_TOOL $REG store 'HKLM\SOFTWARE' hex '02000000534F4654574FABFABFABFAB354454D00'
+
+       regchecknrepair "Conversion error: Incomplete multibyte sequence" 1
+}
+
+testit "simple" \
+       test_simple || \
+       failed=`expr $failed + 1`
+
+testit "damages_registry" \
+       test_damage || \
+       failed=`expr $failed + 1`
+
+testit "duplicate" \
+       test_duplicate || \
+       failed=`expr $failed + 1`
+
+testit "slashes" \
+       test_slashes || \
+       failed=`expr $failed + 1`
+
+testit "uppercase" \
+       test_uppercase || \
+       failed=`expr $failed + 1`
+
+#Can't repair this atm
+#testit "strangeletters" \
+#      test_strangeletters || \
+#      failed=`expr $failed + 1`
+
+testok $0 $failed
+