diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 17:20:00 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 17:20:00 +0000 |
commit | 8daa83a594a2e98f39d764422bfbdbc62c9efd44 (patch) | |
tree | 4099e8021376c7d8c05bdf8503093d80e9c7bad0 /source3/script/tests/test_net_registry.sh | |
parent | Initial commit. (diff) | |
download | samba-8daa83a594a2e98f39d764422bfbdbc62c9efd44.tar.xz samba-8daa83a594a2e98f39d764422bfbdbc62c9efd44.zip |
Adding upstream version 2:4.20.0+dfsg.upstream/2%4.20.0+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rwxr-xr-x | source3/script/tests/test_net_registry.sh | 411 |
1 files changed, 411 insertions, 0 deletions
diff --git a/source3/script/tests/test_net_registry.sh b/source3/script/tests/test_net_registry.sh new file mode 100755 index 0000000..155533e --- /dev/null +++ b/source3/script/tests/test_net_registry.sh @@ -0,0 +1,411 @@ +#!/bin/sh +# +# Blackbox tests for the "net registry" and "net rpc registry" commands. +# +# Copyright (C) 2010-2011 Michael Adam <obnox@samba.org> +# Copyright (C) 2010 Gregor Beck <gbeck@sernet.de> +# +# rpc tests are chose by specifying "rpc" as commandline parameter. + +if [ $# -lt 3 ]; then + cat <<EOF +Usage: test_net_registry.sh SCRIPTDIR SERVERCONFFILE NET CONFIGURATION RPC +EOF + exit 1 +fi + +SCRIPTDIR="$1" +SERVERCONFFILE="$2" +NET="$3" +CONFIGURATION="$4" +RPC="$5" + +NET="$VALGRIND ${NET:-$BINDIR/net} $CONFIGURATION" + +if test "x${RPC}" = "xrpc"; then + NETREG="${NET} -U${USERNAME}%${PASSWORD} -I ${SERVER_IP} rpc registry" +else + NETREG="${NET} registry" +fi + +incdir=$(dirname $0)/../../../testprogs/blackbox +. $incdir/subunit.sh + +failed=0 + +test_enumerate() +{ + KEY="$1" + + ${NETREG} enumerate ${KEY} +} + +test_getsd() +{ + KEY="$1" + + ${NETREG} getsd ${KEY} +} + +test_enumerate_nonexisting() +{ + KEY="$1" + ${NETREG} enumerate ${KEY} + + if test "x$?" = "x0"; then + echo "ERROR: enumerate succeeded with key '${KEY}'" + false + else + true + fi +} + +test_enumerate_no_key() +{ + ${NETREG} enumerate + if test "x$?" = "x0"; then + echo "ERROR: enumerate succeeded without any key specified" + false + else + true + fi +} + +test_create_existing() +{ + KEY="HKLM" + EXPECTED="createkey opened existing ${KEY}" + + OUTPUT=$(${NETREG} createkey ${KEY}) + if test "x$?" = "x0"; then + if test "$OUTPUT" = "$EXPECTED"; then + true + else + echo "got '$OUTPUT', expected '$EXPECTED'" + false + fi + else + printf "%s\n" "$OUTPUT" + false + fi +} + +test_createkey() +{ + KEY="$1" + BASEKEY=$(dirname $KEY) + SUBKEY=$(basename $KEY) + + OUTPUT=$(${NETREG} createkey ${KEY}) + if test "x$?" != "x0"; then + echo "ERROR: createkey ${KEY} failed" + echo "output:" + printf "%s\n" "$OUTPUT" + false + return + fi + + # check enumerate of basekey lists new key: + OUTPUT=$(${NETREG} enumerate ${BASEKEY}) + if test "x$?" != "x0"; then + echo "ERROR: failed to enumerate key '${BASEKEY}'" + echo "output:" + printf "%s\n" "$OUTPUT" + false + return + fi + + EXPECTED="Keyname = ${SUBKEY}" + printf "%s\n" "$OUTPUT" | grep '^Keyname' | grep ${SUBKEY} + if test "x$?" != "x0"; then + echo "ERROR: did not find expected '$EXPECTED' in output" + echo "output:" + printf "%s\n" "$OUTPUT" + false + fi + + # check enumerate of new key works: + ${NETREG} enumerate ${KEY} +} + +test_deletekey() +{ + KEY="$1" + BASEKEY=$(dirname ${KEY}) + SUBKEY=$(basename ${KEY}) + + OUTPUT=$(test_createkey "${KEY}") + if test "x$?" != "x0"; then + printf "%s\n" "${OUTPUT}" + false + return + fi + + OUTPUT=$(${NETREG} deletekey ${KEY}) + if test "x$?" != "x0"; then + printf "%s\n" "${OUTPUT}" + false + return + fi + + # check enumerate of basekey does not show key anymore: + OUTPUT=$(${NETREG} enumerate ${BASEKEY}) + if test "x$?" != "x0"; then + printf "%s\n" "$OUTPUT" + false + return + fi + + UNEXPECTED="Keyname = ${SUBKEY}" + printf "%s\n" "$OUTPUT" | grep '^Keyname' | grep ${SUBKEY} + if test "x$?" = "x0"; then + echo "ERROR: found '$UNEXPECTED' after delete in output" + echo "output:" + printf "%s\n" "$OUTPUT" + false + fi + + # check enumerate of key itself does not work anymore: + ${NETREG} enumerate ${KEY} + if test "x$?" = "x0"; then + echo "ERROR: 'enumerate ${KEY}' works after 'deletekey ${KEY}'" + false + else + true + fi +} + +test_deletekey_nonexisting() +{ + KEY="$1" + + OUTPUT=$(test_deletekey "${KEY}") + if test "x$?" != "x0"; then + printf "%s\n" "${OUTPUT}" + false + return + fi + + ${NETREG} deletekey "${KEY}" + if test "x$?" = "x0"; then + echo "ERROR: delete after delete succeeded for key '${KEY}'" + false + fi +} + +test_createkey_with_subkey() +{ + KEY="$1" + KEY2=$(dirname ${KEY}) + SUBKEYNAME2=$(basename ${KEY}) + BASENAME=$(dirname ${KEY2}) + SUBKEYNAME1=$(basename ${KEY2}) + + OUTPUT=$(${NETREG} createkey ${KEY}) + if test "x$?" != "x0"; then + echo "ERROR: createkey ${KEY} failed" + printf "%s\n" "${OUTPUT}" + false + return + fi + + # check we can enumerate to level key + OUTPUT=$(${NETREG} enumerate ${KEY}) + if test "x$?" != "x0"; then + echo "ERROR: failed to enumerate '${KEY}' after creation" + printf "%s\n" "${OUTPUT}" + false + return + fi + + # clear: + ${NETREG} deletekey ${KEY} && ${NETREG} deletekey ${KEY2} +} + +test_deletekey_with_subkey() +{ + KEY="$1" + KEY2=$(dirname ${KEY}) + + OUTPUT=$(${NETREG} createkey ${KEY}) + if test "x$?" != "x0"; then + printf "%s\n" "${OUTPUT}" + false + return + fi + + OUTPUT=$(${NETREG} deletekey ${KEY2}) + + if test "x$?" = "x0"; then + echo "ERROR: delete of key with subkey succeeded" + echo "output:" + printf "%s\n" "$OUTPUT" + false + return + fi + + ${NETREG} deletekey ${KEY} && ${NETREG} deletekey ${KEY2} +} + +test_setvalue() +{ + KEY="$1" + VALNAME="${2#_}" + VALTYPE="$3" + VALVALUE="$4" + + OUTPUT=$(test_createkey ${KEY}) + if test "x$?" != "x0"; then + printf "%s\n" "${OUTPUT}" + false + return + fi + + OUTPUT=$(${NETREG} setvalue ${KEY} "${VALNAME}" ${VALTYPE} ${VALVALUE}) + if test "x$?" != "x0"; then + echo "ERROR: failed to set value testval in key ${KEY}" + printf "%s\n" "${OUTPUT}" + false + return + fi + + OUTPUT=$(${NETREG} getvalueraw ${KEY} "${VALNAME}") + if test "x$?" != "x0"; then + echo "ERROR: failure calling getvalueraw for key ${KEY}" + echo output: + printf "%s\n" "${OUTPUT}" + false + return + fi + + if test "x${OUTPUT}" != "x${VALVALUE}"; then + echo "ERROR: failure retrieving value ${VALNAME} for key ${KEY}" + printf "expected: %s\ngot: %s\n" "${VALVALUE}" "${OUTPUT}" + false + return + fi + +} + +test_deletevalue() +{ + KEY="$1" + VALNAME="${2#_}" + + ${NETREG} deletevalue ${KEY} "${VALNAME}" +} + +test_deletevalue_nonexisting() +{ + KEY="$1" + VALNAME="${2#_}" + + ${NETREG} deletevalue ${KEY} "${VALNAME}" + if test "x$?" = "x0"; then + echo "ERROR: succeeded deleting value ${VALNAME}" + false + else + true + fi +} + +test_setvalue_twice() +{ + KEY="$1" + VALNAME="${2#_}" + VALTYPE1="$3" + VALVALUE1="$4" + VALTYPE2="$5" + VALVALUE2="$6" + + OUTPUT=$(test_setvalue ${KEY} _"${VALNAME}" ${VALTYPE1} ${VALVALUE1}) + if test "x$?" != "x0"; then + echo "ERROR: first setvalue call failed" + printf "%s\n" "$OUTPUT" + false + return + fi + + ${NETREG} setvalue ${KEY} "${VALNAME}" ${VALTYPE2} ${VALVALUE2} +} + +testit "enumerate HKLM" \ + test_enumerate HKLM || + failed=$(expr $failed + 1) + +testit "enumerate nonexisting hive" \ + test_enumerate_nonexisting XYZ || + failed=$(expr $failed + 1) + +testit "enumerate without key" \ + test_enumerate_no_key || + failed=$(expr $failed + 1) + +# skip getsd test for registry currently: it fails +if test "x${RPC}" != "xrpc"; then + testit "getsd HKLM" \ + test_getsd HKLM || + failed=$(expr $failed + 1) +fi + +testit "create existing HKLM" \ + test_create_existing || + failed=$(expr $failed + 1) + +testit "create key" \ + test_createkey HKLM/testkey || + failed=$(expr $failed + 1) + +testit "delete key" \ + test_deletekey HKLM/testkey || + failed=$(expr $failed + 1) + +testit "delete^2 key" \ + test_deletekey_nonexisting HKLM/testkey || + failed=$(expr $failed + 1) + +testit "enumerate nonexisting key" \ + test_enumerate_nonexisting HKLM/testkey || + failed=$(expr $failed + 1) + +testit "create key with subkey" \ + test_createkey_with_subkey HKLM/testkey/subkey || + failed=$(expr $failed + 1) + +testit "delete key with subkey" \ + test_deletekey_with_subkey HKLM/testkey/subkey || + failed=$(expr $failed + 1) + +testit "set value" \ + test_setvalue HKLM/testkey _testval sz moin || + failed=$(expr $failed + 1) + +testit "delete value" \ + test_deletevalue HKLM/testkey _testval || + failed=$(expr $failed + 1) + +testit "delete nonexisting value" \ + test_deletevalue_nonexisting HKLM/testkey _testval || + failed=$(expr $failed + 1) + +testit "set value to different type" \ + test_setvalue_twice HKLM/testkey testval sz moin dword 42 || + failed=$(expr $failed + 1) + +testit "set default value" \ + test_setvalue HKLM/testkey _"" sz 42 || + failed=$(expr $failed + 1) + +testit "delete default value" \ + test_deletevalue HKLM/testkey _"" || + failed=$(expr $failed + 1) + +testit "delete nonexisting default value" \ + test_deletevalue_nonexisting HKLM/testkey _"" || + failed=$(expr $failed + 1) + +testit "delete key with value" \ + test_deletekey HKLM/testkey || + failed=$(expr $failed + 1) + +testok $0 $failed |