#!/bin/sh # tests for the "net registry" command - local access to the registry db NET="$VALGRIND ${NET:-$BINDIR/net} $CONFIGURATION" NETREG="${NET} registry" incdir=`dirname $0` . $incdir/test_functions.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 spcified" 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" "$OUTPUT" false fi } test_createkey() { KEY="$1" BASEKEY=`dirname $KEY` SUBKEY=`basename $KEY` ${NETREG} createkey ${KEY} if test "x$?" != "x0" ; then 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" "$OUTPUT" false return fi EXPECTED="Keyname = ${SUBKEY}" printf "%s" "$OUTPUT" | grep '^Keyname' | grep ${SUBKEY} if test "x$?" != "x0" ; then echo "ERROR: did not find expexted '$EXPECTED' in output" echo "output:" printf "%s" "$OUTPUT" false fi # check enumerate of new key works: ${NETREG} enumerate ${KEY} } test_deletekey() { KEY="$1" BASEKEY=`dirname ${KEY}` SUBKEY=`basename ${KEY}` test_createkey "${KEY}" if test "x$?" != "x0" ; then false return fi ${NETREG} deletekey ${KEY} # check enumerate of basekey does not show key anymore: OUTPUT=`${NETREG} enumerate ${BASEKEY}` if test "x$?" != "x0" ; then printf "%s" "$OUTPUT" false return fi UNEXPECTED="Keyname = ${SUBKEY}" printf "%s" "$OUTPUT" | 'grep ^Keyname' | grep ${SUBKEY} if test "x$?" = "x0" ; then echo "ERROR: found '$UNEXPECTED' after delete in output" echo "output:" printf "%s" "$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" test_deletekey "${KEY}" if test "x$?" != "x0" ; then 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}` ${NETREG} createkey ${KEY} if test "x$?" != "x0" ; then false return fi # check we can enumerate to level key ${NETREG} enumerate ${KEY} if test "x$?" != "x0" ; then echo "ERROR: failed to enumerate '${KEY}' after creation" false return fi # clear: ${NETREG} deletekey ${KEY} && ${NETREG} deletekey ${KEY2} } test_deletekey_with_subkey() { KEY="$1" KEY2=`dirname ${KEY}` ${NETREG} createkey ${KEY} if test "x$?" != "x0" ; then false return fi OUTPUT=`${NETREG} deletekey ${KEY2}` if test "x$?" = "x0" ; then echo "ERROR: delete of key with subkey succeeded" echo "output:" printf "%s" "$OUTPUT" false return fi ${NETREG} deletekey ${KEY} && ${NETREG} deletekey ${KEY2} } test_setvalue() { KEY="$1" VALNAME="$2" VALTYPE="$3" VALVALUE="$4" test_createkey ${KEY} if test "x$?" != "x0" ; then false return fi ${NETREG} setvalue ${KEY} ${VALNAME} ${VALTYPE} ${VALVALUE} if test "x$?" != "x0" ; then echo "ERROR: failed to set value testval in key ${KEY}" false return fi OUTPUT=`${NETREG} enumerate ${KEY}` if test "x$?" != "x0" ; then echo "ERROR: failure calling enumerate for key ${KEY}" echo output: printf "%s" "${OUTPUT}" false return fi printf "%s" "$OUTPUT" | { FOUND=0 while read LINE ; do SEARCH1=`echo $LINE | grep '^Valuename' | grep ${VALNAME}` if test "x$?" = "x0" ; then read LINE read LINE SEARCH2=`echo $LINE | grep '^Value ' | grep ${VALVALUE}` if test "x$?" = "x0" ; then FOUND=1 break fi fi done if test "x$FOUND" != "x1" ; then echo "ERROR: did not find value '${VALNAME}' with enumerate" echo "enumerate output:" printf "%s" "$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 printf "%s" "$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` testit "getsd HKLM" \ test_getsd HKLM || \ failed=`expr $failed + 1` 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 "delete key with value" \ test_deletekey HKLM/testkey || \ failed=`expr $failed + 1` testok $0 $failed