test: dbwrap_tool requires --persistent for the registry now
[Samba/gebeck_regimport.git] / source3 / script / tests / test_registry_upgrade.sh
blobf15ac0756cc86f72073c1315ac9a6d2860b834ba
1 #!/bin/sh
3 # Test for registry upgrades.
5 # Copyright (C) 2011 Björn Baumbach <bb@sernet.de>
7 if [ $# -lt 2 ]; then
8 echo "Usage: test_registry_upgrade.sh NET DBWRAP_TOOL"
9 exit 1
12 SCRIPT_DIR=$(dirname $0)
13 BASE_DIR="${SCRIPT_DIR}/../../.."
15 NET="$1"
16 DBWRAP_TOOL="$2 --persistent"
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"
25 . $incdir/subunit.sh
27 failed=0
29 REGPATH="HKLM\Software\Samba"
31 LOGDIR_PREFIX="registry_upgrade"
33 registry_check()
35 CHECKNO="$1"
36 CHECKDIFF="$2"
37 REGVER=""
38 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)"
46 RC=$?
48 ERRORSTR="$(echo "$CHECK" | grep -vE $ALLOWEDERR )"
49 test "x$RC" = "x0" || {
50 echo "upgrade check $CHECKNO failed:" | tee -a $LOG
51 return 1
54 test "x$ERRORSTR" = "x" || {
55 echo "upgrade check $CHECKNO failed:" | tee -a $LOG
56 echo "reason: $CHECK" | tee -a $LOG
57 return 1
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
69 return 1
73 return 0
76 registry_upgrade()
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
86 return 1
89 # create config file
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
97 # return 1
100 # check original registry.tdb
101 echo "$REGISTRY" | tee -a $LOG
102 registry_check 0
103 test "x$?" = "x0" || {
104 echo "Error: initial 'registry_check 0' failed" | tee -a $LOG
105 return 1
108 # trigger upgrade
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
113 return 1
116 # check upgraded database
117 registry_check 1
118 test "x$?" = "x0" || {
119 echo "Error: 'registry_check 1' after upgrade failed" | tee -a $LOG
120 return 1
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
127 return 1
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
134 return 1
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
142 return 1
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
149 return 1
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
156 return 1
159 # trigger upgrade
160 $NETCMD registry enumerate $REGPATH >> $LOG
161 test "x$?" = "x0" || {
162 echo "Error: 'net registry enumerate $REGPATH' failed" | tee -a $LOG
163 return 1
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
170 return 1
174 # remove old logs
175 for OLDDIR in $(find ${PREFIX} -type d -name "${LOGDIR_PREFIX}_*") ; do
176 echo "removing old directory ${OLDDIR}"
177 rm -rf ${OLDDIR}
178 done
180 # remove old workspace
181 rm -rf $WORKSPACE
183 mkdir $WORKSPACE
185 DIR=$(mktemp -d ${PREFIX}/${LOGDIR_PREFIX}_XXXXXX)
186 LOG=$DIR/log
188 testit "registry_upgrade" registry_upgrade || failed=`expr $failed + 1`
190 if [ $failed -eq 0 ]; then
191 rm -r $DIR
194 testok $0 $failed