s3-selftest: introduce registry upgrade test
[Samba/gebeck_regimport.git] / source3 / script / tests / test_registry_upgrade.sh
blobb860ef4c35b0b2bd3a5c8a6f93a81989214ffd67
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"
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 local CHECKNO="$1"
36 local CHECKDIFF="$2"
37 local REGVER=""
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)"
46 RC=$?
47 ERRORSTR="$(echo "$CHECK" | grep -vE $ALLOWEDERR )"
49 test "x$RC" = "x0" || {
50 echo "upgrade check $CHECKNO failed:" >> $LOG
51 return 1
54 test "x$ERRORSTR" = "x" || {
55 echo "upgrade check $CHECKNO failed:" >> $LOG
56 echo "reason: $CHECK" >> $LOG
57 return 1
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
65 return 1
69 return 0
72 registry_upgrade()
74 local DIR=$(mktemp -d ${PREFIX}/${LOGDIR_PREFIX}_XXXXXX)
75 local LOG=$DIR/log
77 echo registry_upgrade $1 > $LOG
79 mkdir $WORKSPACE
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
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" >> $LOG
102 registry_check 0
103 test "x$?" = "x0" || {
104 return 1
107 # trigger upgrade
108 $NETCMD registry enumerate $REGPATH >> $LOG 2>&1
109 test "x$?" = "x0" || {
110 return 1
113 # check upgraded database
114 registry_check 1
115 test "x$?" = "x0" || {
116 return 1
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
126 return 1
129 # trigger upgrade on upgraded database
130 $NETCMD registry enumerate $REGPATH >> $LOG 2>&1
131 test "x$?" = "x0" || {
132 return 1
135 # check upgraded database again
136 registry_check 2 checkdiff
137 test "x$?" = "x0" || {
138 return 1
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
145 return 1
148 # trigger upgrade
149 $NETCMD registry enumerate $REGPATH >> $LOG 2>&1
150 test "x$?" = "x0" || {
151 return 1
154 # check upgraded database again
155 registry_check 3 checkdiff
156 test "x$?" = "x0" || {
157 return 1
160 # remove workspace
161 rm -r $DIR
162 rm -r $WORKSPACE
165 # remove old logs
166 for OLDDIR in $(find ${PREFIX} -type d -name "${LOGDIR_PREFIX}_*") ; do
167 echo "removing old directory ${OLDDIR}"
168 rm -rf ${OLDDIR}
169 done
170 # remove old workspace
171 rm -rf $WORKSPACE
173 testit "registry_upgrade" registry_upgrade || failed=`expr $failed + 1`
175 testok $0 $failed