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" |
tee -a $LOG
45 CHECK
="$($NETCMD registry check $REGVER 2>&1)"
48 ERRORSTR
="$(echo "$CHECK" | grep -vE $ALLOWEDERR )"
49 test "x$RC" = "x0" ||
{
50 echo "upgrade check $CHECKNO failed:" |
tee -a $LOG
54 test "x$ERRORSTR" = "x" ||
{
55 echo "upgrade check $CHECKNO failed:" |
tee -a $LOG
56 echo "reason: $CHECK" |
tee -a $LOG
60 test "x$CHECKDIFF" = "xcheckdiff" && {
61 $NETCMD registry
export 'HKLM' $WORKSPACE/export_
${CHECKNO}.reg
>> $LOG
62 test "x$?" = "x0" ||
{
63 echo "Error: 'net registry export HKLM' failed" |
tee -a $LOG
66 diff -q $WORKSPACE/export_0.reg
$WORKSPACE/export_
${CHECKNO}.reg
>> $LOG
67 test "x$?" = "x0" ||
{
68 echo "Error: $WORKSPACE/export_0.reg differs from $WORKSPACE/export_${CHECKNO}.reg" |
tee -a $LOG
78 echo registry_upgrade
$1 |
tee -a $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" |
tee -a $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" |
tee -a $LOG
103 test "x$?" = "x0" ||
{
104 echo "Error: initial 'registry_check 0' failed" |
tee -a $LOG
109 echo "$NETCMD registry enumerate $REGPATH" >> $LOG
110 $NETCMD registry enumerate
$REGPATH >> $LOG
111 test "x$?" = "x0" ||
{
112 echo "Error: 'net registry enumerate $REGPATH' failed" |
tee -a $LOG
116 # check upgraded database
118 test "x$?" = "x0" ||
{
119 echo "Error: 'registry_check 1' after upgrade failed" |
tee -a $LOG
123 # export database for diffs
124 $NETCMD registry
export 'HKLM' $WORKSPACE/export_0.reg |
tee -a $LOG
125 test "x$?" = "x0" ||
{
126 echo "Error 'net registry export' failed" |
tee -a $LOG
130 # remove version string
131 $DBWRAP_TOOL $REGISTRY delete INFO
/version |
tee -a $LOG
132 test "x$?" = "x0" ||
{
133 echo "Error: Can not remove INFO/version key from registry" |
tee -a $LOG
137 # trigger upgrade on upgraded database
138 echo "$NETCMD registry enumerate $REGPATH" >> $LOG
139 $NETCMD registry enumerate
$REGPATH >> $LOG 2>&1
140 test "x$?" = "x0" ||
{
141 echo "Error: 'net registry enumerate $REGPATH' failed" |
tee -a $LOG
145 # check upgraded database again
146 registry_check
2 checkdiff
147 test "x$?" = "x0" ||
{
148 echo "Error: 'registry_check 2' after upgrade failed" |
tee -a $LOG
152 # set database INFO/version to version 2
153 $DBWRAP_TOOL $REGISTRY store
'INFO/version' uint32
2
154 test "x$?" = "x0" ||
{
155 echo "Error: Can not set INFO/version" |
tee -a $LOG
160 $NETCMD registry enumerate
$REGPATH >> $LOG
161 test "x$?" = "x0" ||
{
162 echo "Error: 'net registry enumerate $REGPATH' failed" |
tee -a $LOG
166 # check upgraded database again
167 registry_check
3 checkdiff
168 test "x$?" = "x0" ||
{
169 echo "Error: 'registry_check 3' after upgrade failed" |
tee -a $LOG
175 for OLDDIR
in $
(find ${PREFIX} -type d
-name "${LOGDIR_PREFIX}_*") ; do
176 echo "removing old directory ${OLDDIR}"
180 # remove old workspace
185 DIR
=$
(mktemp
-d ${PREFIX}/${LOGDIR_PREFIX}_XXXXXX
)
188 testit
"registry_upgrade" registry_upgrade || failed
=`expr $failed + 1`
190 if [ $failed -eq 0 ]; then