3 # Test for registry upgrades.
5 # Copyright (C) 2011 Björn Baumbach <bb@sernet.de>
8 echo "Usage: test_registry_upgrade.sh NET DBWRAP_TOOL"
12 SCRIPT_DIR
=$
(dirname $0)
13 BASE_DIR
="${SCRIPT_DIR}/../../.."
17 DATADIR
="${BASE_DIR}/testdata/samba3"
18 WORKSPACE
="${PREFIX}/registry_upgrade"
19 CONFIG_FILE
="${WORKSPACE}/smb.conf"
20 CONFIGURATION
="--configfile=${CONFIG_FILE}"
22 NETCMD
="$NET $CONFIGURATION"
24 incdir
="${BASE_DIR}/testprogs/blackbox"
29 REGPATH
="HKLM\Software\Samba"
31 LOGDIR_PREFIX
="registry_upgrade"
38 local ALLOWEDERR
="INFO: version =|Check database:|overwrite registry format version 0 with 1|no INFO/version found"
40 test "x$CHECKNO" = "x0" && {
41 REGVER
="--reg-version=1"
44 echo "Registry check $CHECKNO" >> $LOG
45 CHECK
="$($NETCMD registry check $REGVER 2>&1)"
47 ERRORSTR
="$(echo "$CHECK" | grep -vE $ALLOWEDERR )"
49 test "x$RC" = "x0" ||
{
50 echo "upgrade check $CHECKNO failed:" >> $LOG
54 test "x$ERRORSTR" = "x" ||
{
55 echo "upgrade check $CHECKNO failed:" >> $LOG
56 echo "reason: $CHECK" >> $LOG
60 test "x$CHECKDIFF" = "xcheckdiff" && {
61 $NETCMD registry
export 'HKLM' $WORKSPACE/export_
${CHECKNO}.reg
>> $LOG 2>&1
62 diff $WORKSPACE/export_0.reg
$WORKSPACE/export_
${CHECKNO}.reg
>> $LOG 2>&1
63 test "x$?" = "x0" ||
{
64 echo "Error: $WORKSPACE/export_0.reg differs from $WORKSPACE/export_${CHECKNO}.reg" >> $LOG
74 local DIR
=$
(mktemp
-d ${PREFIX}/${LOGDIR_PREFIX}_XXXXXX
)
77 echo registry_upgrade
$1 > $LOG
80 cp -v $DATADIR/registry.tdb
$WORKSPACE/registry.tdb
>> $LOG 2>&1
82 REGISTRY
="${WORKSPACE}/registry.tdb"
84 test -e $REGISTRY ||
{
85 echo "Error: Database file not available" >> $LOG
90 echo '[global]' > ${CONFIG_FILE}
91 echo " state directory = ${WORKSPACE}" >> ${CONFIG_FILE}
93 # set database INFO/version to 1
94 #$DBWRAP_TOOL $REGISTRY store 'INFO/version' uint32 1
95 #test "x$?" = "x0" || {
96 # echo "Error: Can not set INFO/version" >> $LOG
100 # check original registry.tdb
101 echo "$REGISTRY" >> $LOG
103 test "x$?" = "x0" ||
{
108 $NETCMD registry enumerate
$REGPATH >> $LOG 2>&1
109 test "x$?" = "x0" ||
{
113 # check upgraded database
115 test "x$?" = "x0" ||
{
119 # export database for diffs
120 $NETCMD registry
export 'HKLM' $WORKSPACE/export_0.reg
>> $LOG 2>&1
122 # remove version string
123 $DBWRAP_TOOL $REGISTRY delete INFO
/version
>> $LOG 2>&1
124 test "x$?" = "x0" ||
{
125 echo "Error: Can not remove INFO/version key from registry" >> $LOG
129 # trigger upgrade on upgraded database
130 $NETCMD registry enumerate
$REGPATH >> $LOG 2>&1
131 test "x$?" = "x0" ||
{
135 # check upgraded database again
136 registry_check
2 checkdiff
137 test "x$?" = "x0" ||
{
141 # set database INFO/version to version 2
142 $DBWRAP_TOOL $REGISTRY store
'INFO/version' uint32
2
143 test "x$?" = "x0" ||
{
144 echo "Error: Can not set INFO/version" >> $LOG
149 $NETCMD registry enumerate
$REGPATH >> $LOG 2>&1
150 test "x$?" = "x0" ||
{
154 # check upgraded database again
155 registry_check
3 checkdiff
156 test "x$?" = "x0" ||
{
166 for OLDDIR
in $
(find ${PREFIX} -type d
-name "${LOGDIR_PREFIX}_*") ; do
167 echo "removing old directory ${OLDDIR}"
170 # remove old workspace
173 testit
"registry_upgrade" registry_upgrade || failed
=`expr $failed + 1`