xref: /netbsd-src/external/mpl/bind/dist/bin/tests/system/journal/tests.sh (revision 8aaca124c0ad52af9550477f296b63debc7b4c98)
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
14set -e
15
16. ../conf.sh
17
18dig_with_opts() {
19  "$DIG" @10.53.0.1 -p "$PORT" +tcp "$@"
20}
21
22rndc_with_opts() {
23  "$RNDC" -c ../_common/rndc.conf -p "$CONTROLPORT" -s "$@"
24}
25
26status=0
27n=0
28
29n=$((n + 1))
30echo_i "check outdated journal rolled forward (dynamic) ($n)"
31ret=0
32dig_with_opts changed soa >dig.out.test$n
33grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1
34grep '2012010902' dig.out.test$n >/dev/null || ret=1
35grep '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"
37status=$((status + ret))
38
39n=$((n + 1))
40echo_i "check outdated empty journal did not cause an error (dynamic) ($n)"
41ret=0
42dig_with_opts unchanged soa >dig.out.test$n
43grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1
44grep '2012010901' dig.out.test$n >/dev/null || ret=1
45[ $ret -eq 0 ] || echo_i "failed"
46status=$((status + ret))
47
48n=$((n + 1))
49echo_i "check outdated journals were updated or removed (dynamic) ($n)"
50ret=0
51cat -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"
54status=$((status + ret))
55
56n=$((n + 1))
57echo_i "check updated journal has correct RR count (dynamic) ($n)"
58ret=0
59$JOURNALPRINT -x ns1/changed.db.jnl | grep "rrcount 3 " >/dev/null || ret=1
60[ $ret -eq 0 ] || echo_i "failed"
61status=$((status + ret))
62
63n=$((n + 1))
64echo_i "check new-format journal rolled forward (dynamic) ($n)"
65ret=0
66dig_with_opts changed2 soa >dig.out.test$n
67grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1
68grep '2012010902' dig.out.test$n >/dev/null || ret=1
69grep 'zone changed2/IN: journal rollforward completed successfully: success' ns1/named.run >/dev/null || ret=1
70grep '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"
72status=$((status + ret))
73
74n=$((n + 1))
75echo_i "check new-format empty journal did not cause error (dynamic) ($n)"
76ret=0
77dig_with_opts unchanged2 soa >dig.out.test$n
78grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1
79grep '2012010901' dig.out.test$n >/dev/null || ret=1
80grep 'zone unchanged2/IN: journal rollforward completed successfully' ns1/named.run >/dev/null && ret=1
81grep '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"
83status=$((status + ret))
84
85n=$((n + 1))
86echo_i "check new-format journals were updated or removed (dynamic) ($n)"
87ret=0
88cat -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"
91status=$((status + ret))
92
93n=$((n + 1))
94echo_i "check outdated up-to-date journal succeeded (ixfr-from-differences) ($n)"
95ret=0
96dig_with_opts -t soa ixfr >dig.out.test$n
97grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1
98grep '2012010902' dig.out.test$n >/dev/null || ret=1
99grep '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"
101status=$((status + ret))
102
103n=$((n + 1))
104echo_i "check outdated journal was updated (ixfr-from-differences) ($n)"
105ret=0
106cat -v ns1/ixfr.db.jnl | grep "BIND LOG V9.2" >/dev/null || ret=1
107[ $ret -eq 0 ] || echo_i "failed"
108status=$((status + ret))
109
110n=$((n + 1))
111echo_i "check journal with mixed headers succeeded (version 1,2,1,2) ($n)"
112ret=0
113dig_with_opts -t soa hdr1d1d2d1d2 >dig.out.test$n
114grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1
115grep '2012010905' dig.out.test$n >/dev/null || ret=1
116grep 'zone hdr1d1d2d1d2/IN: journal rollforward completed successfully using old journal format: success' ns1/named.run >/dev/null || ret=1
117grep 'zone_journal_compact: zone hdr1d1d2d1d2/IN: repair full journal' ns1/named.run >/dev/null || ret=1
118grep 'hdr1d1d2d1d2/IN: dns_journal_compact: success' ns1/named.run >/dev/null || ret=1
119[ $ret -eq 0 ] || echo_i "failed"
120status=$((status + ret))
121
122n=$((n + 1))
123echo_i "check journal with mixed headers was updated (version 1,2,1,2) ($n)"
124ret=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"
130status=$((status + ret))
131
132n=$((n + 1))
133echo_i "check journal with mixed headers succeeded (version 2,1,2,1) ($n)"
134ret=0
135dig_with_opts -t soa hdr1d2d1d2d1 >dig.out.test$n
136grep 'status: NOERROR' dig.out.test$n >/dev/null || ret=1
137grep '2012010905' dig.out.test$n >/dev/null || ret=1
138grep 'zone hdr1d2d1d2d1/IN: journal rollforward completed successfully using old journal format: success' ns1/named.run >/dev/null || ret=1
139grep 'zone_journal_compact: zone hdr1d2d1d2d1/IN: repair full journal' ns1/named.run >/dev/null || ret=1
140grep 'zone hdr1d2d1d2d1/IN: dns_journal_compact: success' ns1/named.run >/dev/null || ret=1
141[ $ret -eq 0 ] || echo_i "failed"
142status=$((status + ret))
143
144n=$((n + 1))
145echo_i "check journal with mixed headers was updated (version 2,1,2,1) ($n)"
146ret=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"
152status=$((status + ret))
153
154n=$((n + 1))
155echo_i "check there are no journals left un-updated ($n)"
156ret=0
157c1=$(cat -v ns1/*.jnl | grep -c "BIND LOG V9")
158c2=$(cat -v ns1/*.jnl | grep -c "BIND LOG V9.2")
159[ ${c1} -eq ${c2} ] || ret=1
160[ $ret -eq 0 ] || echo_i "failed"
161status=$((status + ret))
162
163n=$((n + 1))
164echo_i "Check that journal with mixed headers can be compacted (version 1,2,1,2) ($n)"
165ret=0
166journal=ns1/d1212.jnl.saved
167seriallist=$($JOURNALPRINT -x $journal | awk '$1 == "Transaction:" { print $11 }')
168for serial in $seriallist; do
169  cp $journal tmp.jnl
170  $JOURNALPRINT -c $serial tmp.jnl || ret=1
171done
172[ $ret -eq 0 ] || echo_i "failed"
173status=$((status + ret))
174
175n=$((n + 1))
176echo_i "Check that journal with mixed headers can be compacted (version 2,1,2,1) ($n)"
177ret=0
178journal=ns1/d2121.jnl.saved
179seriallist=$($JOURNALPRINT -x $journal | awk '$1 == "Transaction:" { print $11 }')
180for serial in $seriallist; do
181  cp ns1/d1212.jnl.saved tmp.jnl
182  $JOURNALPRINT -c $serial tmp.jnl || ret=1
183done
184[ $ret -eq 0 ] || echo_i "failed"
185status=$((status + ret))
186
187n=$((n + 1))
188echo_i "check upgrade of managed-keys.bind.jnl succeeded($n)"
189ret=0
190$JOURNALPRINT ns1/managed-keys.bind.jnl >journalprint.out.test$n
191lines=$(awk '$1 == "add" && $5 == "SOA" && $8 == "3297" { print }' journalprint.out.test$n | wc -l)
192test $lines -eq 1 || ret=1
193[ $ret -eq 0 ] || echo_i "failed"
194status=$((status + ret))
195
196n=$((n + 1))
197echo_i "check journal downgrade/upgrade ($n)"
198ret=0
199cp 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"
207status=$((status + ret))
208
209n=$((n + 1))
210echo_i "check max-journal-size works after journal update ($n)"
211ret=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.
216rndc_with_opts 10.53.0.1 sync maxjournal
217check_size() (
218  [ $(wc -c <ns1/maxjournal.db.jnl) -lt 4000 ]
219)
220retry_quiet 10 check_size || ret=1
221[ $ret -eq 0 ] || echo_i "failed"
222status=$((status + ret))
223
224n=$((n + 1))
225echo_i "check max-journal-size works with non-updated journals ($n)"
226ret=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.
231rndc_with_opts 10.53.0.1 sync maxjournal2
232check_size() (
233  [ $(wc -c <ns1/maxjournal2.db.jnl) -lt 4000 ]
234)
235retry_quiet 10 check_size || ret=1
236[ $ret -eq 0 ] || echo_i "failed"
237status=$((status + ret))
238
239n=$((n + 1))
240echo_i "check journal index consistency ($n)"
241ret=0
242for jnl in ns1/*.jnl; do
243  $JOURNALPRINT -x $jnl 2>&1 | grep -q "Offset mismatch" && ret=1
244done
245[ $ret -eq 0 ] || echo_i "failed"
246status=$((status + ret))
247
248n=$((n + 1))
249echo_i "check that journal is applied to zone with keydata placeholder record"
250ret=0
251grep '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
254echo_i "exit status: $status"
255[ $status -eq 0 ] || exit 1
256