1 #!/bin/sh 2 3 # Copyright (C) Internet Systems Consortium, Inc. ("ISC") 4 # 5 # SPDX-License-Identifier: MPL-2.0 6 # 7 # This Source Code Form is subject to the terms of the Mozilla Public 8 # License, v. 2.0. If a copy of the MPL was not distributed with this 9 # file, you can obtain one at https://mozilla.org/MPL/2.0/. 10 # 11 # See the COPYRIGHT file distributed with this work for additional 12 # information regarding copyright ownership. 13 14 set -e 15 16 . ../conf.sh 17 18 dig_with_opts() { 19 "$DIG" @10.53.0.1 -p "$PORT" +tcp "$@" 20 } 21 22 rndc_with_opts() { 23 "$RNDC" -c ../_common/rndc.conf -p "$CONTROLPORT" -s "$@" 24 } 25 26 status=0 27 n=0 28 29 n=$((n + 1)) 30 echo_i "check outdated journal rolled forward (dynamic) ($n)" 31 ret=0 32 dig_with_opts changed soa >dig.out.test$n 33 grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1 34 grep '2012010902' dig.out.test$n >/dev/null || ret=1 35 grep 'zone changed/IN: journal rollforward completed successfully using old journal format' ns1/named.run >/dev/null || ret=1 36 [ $ret -eq 0 ] || echo_i "failed" 37 status=$((status + ret)) 38 39 n=$((n + 1)) 40 echo_i "check outdated empty journal did not cause an error (dynamic) ($n)" 41 ret=0 42 dig_with_opts unchanged soa >dig.out.test$n 43 grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1 44 grep '2012010901' dig.out.test$n >/dev/null || ret=1 45 [ $ret -eq 0 ] || echo_i "failed" 46 status=$((status + ret)) 47 48 n=$((n + 1)) 49 echo_i "check outdated journals were updated or removed (dynamic) ($n)" 50 ret=0 51 cat -v ns1/changed.db.jnl | grep "BIND LOG V9.2" >/dev/null || ret=1 52 [ -f ns1/unchanged.db.jnl ] && ret=1 53 [ $ret -eq 0 ] || echo_i "failed" 54 status=$((status + ret)) 55 56 n=$((n + 1)) 57 echo_i "check updated journal has correct RR count (dynamic) ($n)" 58 ret=0 59 $JOURNALPRINT -x ns1/changed.db.jnl | grep "rrcount 3 " >/dev/null || ret=1 60 [ $ret -eq 0 ] || echo_i "failed" 61 status=$((status + ret)) 62 63 n=$((n + 1)) 64 echo_i "check new-format journal rolled forward (dynamic) ($n)" 65 ret=0 66 dig_with_opts changed2 soa >dig.out.test$n 67 grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1 68 grep '2012010902' dig.out.test$n >/dev/null || ret=1 69 grep 'zone changed2/IN: journal rollforward completed successfully: success' ns1/named.run >/dev/null || ret=1 70 grep 'zone changed2/IN: journal rollforward completed successfully using old journal format' ns1/named.run >/dev/null && ret=1 71 [ $ret -eq 0 ] || echo_i "failed" 72 status=$((status + ret)) 73 74 n=$((n + 1)) 75 echo_i "check new-format empty journal did not cause error (dynamic) ($n)" 76 ret=0 77 dig_with_opts unchanged2 soa >dig.out.test$n 78 grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1 79 grep '2012010901' dig.out.test$n >/dev/null || ret=1 80 grep 'zone unchanged2/IN: journal rollforward completed successfully' ns1/named.run >/dev/null && ret=1 81 grep 'zone unchanged2/IN: journal rollforward completed successfully using old journal format' ns1/named.run >/dev/null && ret=1 82 [ $ret -eq 0 ] || echo_i "failed" 83 status=$((status + ret)) 84 85 n=$((n + 1)) 86 echo_i "check new-format journals were updated or removed (dynamic) ($n)" 87 ret=0 88 cat -v ns1/changed2.db.jnl | grep "BIND LOG V9.2" >/dev/null || ret=1 89 [ -f ns1/unchanged2.db.jnl ] && ret=1 90 [ $ret -eq 0 ] || echo_i "failed" 91 status=$((status + ret)) 92 93 n=$((n + 1)) 94 echo_i "check outdated up-to-date journal succeeded (ixfr-from-differences) ($n)" 95 ret=0 96 dig_with_opts -t soa ixfr >dig.out.test$n 97 grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1 98 grep '2012010902' dig.out.test$n >/dev/null || ret=1 99 grep 'zone ixfr/IN: journal rollforward completed successfully using old journal format: up to date' ns1/named.run >/dev/null || ret=1 100 [ $ret -eq 0 ] || echo_i "failed" 101 status=$((status + ret)) 102 103 n=$((n + 1)) 104 echo_i "check outdated journal was updated (ixfr-from-differences) ($n)" 105 ret=0 106 cat -v ns1/ixfr.db.jnl | grep "BIND LOG V9.2" >/dev/null || ret=1 107 [ $ret -eq 0 ] || echo_i "failed" 108 status=$((status + ret)) 109 110 n=$((n + 1)) 111 echo_i "check journal with mixed headers succeeded (version 1,2,1,2) ($n)" 112 ret=0 113 dig_with_opts -t soa hdr1d1d2d1d2 >dig.out.test$n 114 grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1 115 grep '2012010905' dig.out.test$n >/dev/null || ret=1 116 grep 'zone hdr1d1d2d1d2/IN: journal rollforward completed successfully using old journal format: success' ns1/named.run >/dev/null || ret=1 117 grep 'zone_journal_compact: zone hdr1d1d2d1d2/IN: repair full journal' ns1/named.run >/dev/null || ret=1 118 grep 'hdr1d1d2d1d2/IN: dns_journal_compact: success' ns1/named.run >/dev/null || ret=1 119 [ $ret -eq 0 ] || echo_i "failed" 120 status=$((status + ret)) 121 122 n=$((n + 1)) 123 echo_i "check journal with mixed headers was updated (version 1,2,1,2) ($n)" 124 ret=0 125 [ $($JOURNALPRINT -x ns1/d1212.jnl.saved | grep -c "version 1") -eq 2 ] || ret=1 126 [ $($JOURNALPRINT -x ns1/d1212.jnl.saved | grep -c "version 2") -eq 2 ] || ret=1 127 [ $($JOURNALPRINT -x ns1/d1212.db.jnl | grep -c "version 1") -eq 0 ] || ret=1 128 [ $($JOURNALPRINT -x ns1/d1212.db.jnl | grep -c "version 2") -eq 4 ] || ret=1 129 [ $ret -eq 0 ] || echo_i "failed" 130 status=$((status + ret)) 131 132 n=$((n + 1)) 133 echo_i "check journal with mixed headers succeeded (version 2,1,2,1) ($n)" 134 ret=0 135 dig_with_opts -t soa hdr1d2d1d2d1 >dig.out.test$n 136 grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1 137 grep '2012010905' dig.out.test$n >/dev/null || ret=1 138 grep 'zone hdr1d2d1d2d1/IN: journal rollforward completed successfully using old journal format: success' ns1/named.run >/dev/null || ret=1 139 grep 'zone_journal_compact: zone hdr1d2d1d2d1/IN: repair full journal' ns1/named.run >/dev/null || ret=1 140 grep 'zone hdr1d2d1d2d1/IN: dns_journal_compact: success' ns1/named.run >/dev/null || ret=1 141 [ $ret -eq 0 ] || echo_i "failed" 142 status=$((status + ret)) 143 144 n=$((n + 1)) 145 echo_i "check journal with mixed headers was updated (version 2,1,2,1) ($n)" 146 ret=0 147 [ $($JOURNALPRINT -x ns1/d2121.jnl.saved | grep -c "version 1") -eq 2 ] || ret=1 148 [ $($JOURNALPRINT -x ns1/d2121.jnl.saved | grep -c "version 2") -eq 2 ] || ret=1 149 [ $($JOURNALPRINT -x ns1/d2121.db.jnl | grep -c "version 1") -eq 0 ] || ret=1 150 [ $($JOURNALPRINT -x ns1/d2121.db.jnl | grep -c "version 2") -eq 4 ] || ret=1 151 [ $ret -eq 0 ] || echo_i "failed" 152 status=$((status + ret)) 153 154 n=$((n + 1)) 155 echo_i "check there are no journals left un-updated ($n)" 156 ret=0 157 c1=$(cat -v ns1/*.jnl | grep -c "BIND LOG V9") 158 c2=$(cat -v ns1/*.jnl | grep -c "BIND LOG V9.2") 159 [ ${c1} -eq ${c2} ] || ret=1 160 [ $ret -eq 0 ] || echo_i "failed" 161 status=$((status + ret)) 162 163 n=$((n + 1)) 164 echo_i "Check that journal with mixed headers can be compacted (version 1,2,1,2) ($n)" 165 ret=0 166 journal=ns1/d1212.jnl.saved 167 seriallist=$($JOURNALPRINT -x $journal | awk '$1 == "Transaction:" { print $11 }') 168 for serial in $seriallist; do 169 cp $journal tmp.jnl 170 $JOURNALPRINT -c $serial tmp.jnl || ret=1 171 done 172 [ $ret -eq 0 ] || echo_i "failed" 173 status=$((status + ret)) 174 175 n=$((n + 1)) 176 echo_i "Check that journal with mixed headers can be compacted (version 2,1,2,1) ($n)" 177 ret=0 178 journal=ns1/d2121.jnl.saved 179 seriallist=$($JOURNALPRINT -x $journal | awk '$1 == "Transaction:" { print $11 }') 180 for serial in $seriallist; do 181 cp ns1/d1212.jnl.saved tmp.jnl 182 $JOURNALPRINT -c $serial tmp.jnl || ret=1 183 done 184 [ $ret -eq 0 ] || echo_i "failed" 185 status=$((status + ret)) 186 187 n=$((n + 1)) 188 echo_i "check upgrade of managed-keys.bind.jnl succeeded($n)" 189 ret=0 190 $JOURNALPRINT ns1/managed-keys.bind.jnl >journalprint.out.test$n 191 lines=$(awk '$1 == "add" && $5 == "SOA" && $8 == "3297" { print }' journalprint.out.test$n | wc -l) 192 test $lines -eq 1 || ret=1 193 [ $ret -eq 0 ] || echo_i "failed" 194 status=$((status + ret)) 195 196 n=$((n + 1)) 197 echo_i "check journal downgrade/upgrade ($n)" 198 ret=0 199 cp ns1/changed.db.jnl ns1/temp.jnl 200 $JOURNALPRINT -d ns1/temp.jnl 201 [ $($JOURNALPRINT -x ns1/temp.jnl | grep -c "version 1") -eq 1 ] || ret=1 202 $JOURNALPRINT -x ns1/temp.jnl | grep -q "Header version = 1" || ret=1 203 $JOURNALPRINT -u ns1/temp.jnl 204 $JOURNALPRINT -x ns1/temp.jnl | grep -q "Header version = 2" || ret=1 205 [ $($JOURNALPRINT -x ns1/temp.jnl | grep -c "version 2") -eq 1 ] || ret=1 206 [ $ret -eq 0 ] || echo_i "failed" 207 status=$((status + ret)) 208 209 n=$((n + 1)) 210 echo_i "check max-journal-size works after journal update ($n)" 211 ret=0 212 # journal was repaired, it should still be big 213 [ $(wc -c <ns1/maxjournal.db.jnl) -gt 12000 ] || ret=1 214 # the zone hasn't been dumped yet, so 'rndc sync' should work without 215 # needing a zone update first. 216 rndc_with_opts 10.53.0.1 sync maxjournal 217 check_size() ( 218 [ $(wc -c <ns1/maxjournal.db.jnl) -lt 4000 ] 219 ) 220 retry_quiet 10 check_size || ret=1 221 [ $ret -eq 0 ] || echo_i "failed" 222 status=$((status + ret)) 223 224 n=$((n + 1)) 225 echo_i "check max-journal-size works with non-updated journals ($n)" 226 ret=0 227 # journal was not repaired, so it should still be big 228 [ $(wc -c <ns1/maxjournal2.db.jnl) -gt 12000 ] || ret=1 229 # the zone hasn't been dumped yet, so 'rndc sync' should work without 230 # needing a zone update first. 231 rndc_with_opts 10.53.0.1 sync maxjournal2 232 check_size() ( 233 [ $(wc -c <ns1/maxjournal2.db.jnl) -lt 4000 ] 234 ) 235 retry_quiet 10 check_size || ret=1 236 [ $ret -eq 0 ] || echo_i "failed" 237 status=$((status + ret)) 238 239 n=$((n + 1)) 240 echo_i "check journal index consistency ($n)" 241 ret=0 242 for jnl in ns1/*.jnl; do 243 $JOURNALPRINT -x $jnl 2>&1 | grep -q "Offset mismatch" && ret=1 244 done 245 [ $ret -eq 0 ] || echo_i "failed" 246 status=$((status + ret)) 247 248 n=$((n + 1)) 249 echo_i "check that journal is applied to zone with keydata placeholder record" 250 ret=0 251 grep 'managed-keys-zone: journal rollforward completed successfully: up to date' ns2/named.run >/dev/null 2>&1 || ret=1 252 [ $ret -eq 0 ] || echo_i "failed" 253 254 echo_i "exit status: $status" 255 [ $status -eq 0 ] || exit 1 256