Home | History | Annotate | Line # | Download | only in journal
      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