xref: /netbsd-src/external/mpl/bind/dist/bin/tests/system/builtin/tests.sh (revision 734a9f3d6cd20770d53d02e90be56c0051c48e5f)
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
18DIGOPTS="-p ${PORT}"
19RNDCCMD="$RNDC -c ../_common/rndc.conf -p ${CONTROLPORT} -s"
20
21status=0
22n=0
23
24emptyzones="
2510.IN-ADDR.ARPA
2616.172.IN-ADDR.ARPA
2717.172.IN-ADDR.ARPA
2818.172.IN-ADDR.ARPA
2919.172.IN-ADDR.ARPA
3020.172.IN-ADDR.ARPA
3121.172.IN-ADDR.ARPA
3222.172.IN-ADDR.ARPA
3323.172.IN-ADDR.ARPA
3424.172.IN-ADDR.ARPA
3525.172.IN-ADDR.ARPA
3626.172.IN-ADDR.ARPA
3727.172.IN-ADDR.ARPA
3828.172.IN-ADDR.ARPA
3929.172.IN-ADDR.ARPA
4030.172.IN-ADDR.ARPA
4131.172.IN-ADDR.ARPA
42168.192.IN-ADDR.ARPA
4364.100.IN-ADDR.ARPA
4465.100.IN-ADDR.ARPA
4566.100.IN-ADDR.ARPA
4667.100.IN-ADDR.ARPA
4768.100.IN-ADDR.ARPA
4869.100.IN-ADDR.ARPA
4970.100.IN-ADDR.ARPA
5071.100.IN-ADDR.ARPA
5172.100.IN-ADDR.ARPA
5273.100.IN-ADDR.ARPA
5374.100.IN-ADDR.ARPA
5475.100.IN-ADDR.ARPA
5576.100.IN-ADDR.ARPA
5677.100.IN-ADDR.ARPA
5778.100.IN-ADDR.ARPA
5879.100.IN-ADDR.ARPA
5980.100.IN-ADDR.ARPA
6081.100.IN-ADDR.ARPA
6182.100.IN-ADDR.ARPA
6283.100.IN-ADDR.ARPA
6384.100.IN-ADDR.ARPA
6485.100.IN-ADDR.ARPA
6586.100.IN-ADDR.ARPA
6687.100.IN-ADDR.ARPA
6788.100.IN-ADDR.ARPA
6889.100.IN-ADDR.ARPA
6990.100.IN-ADDR.ARPA
7091.100.IN-ADDR.ARPA
7192.100.IN-ADDR.ARPA
7293.100.IN-ADDR.ARPA
7394.100.IN-ADDR.ARPA
7495.100.IN-ADDR.ARPA
7596.100.IN-ADDR.ARPA
7697.100.IN-ADDR.ARPA
7798.100.IN-ADDR.ARPA
7899.100.IN-ADDR.ARPA
79100.100.IN-ADDR.ARPA
80101.100.IN-ADDR.ARPA
81102.100.IN-ADDR.ARPA
82103.100.IN-ADDR.ARPA
83104.100.IN-ADDR.ARPA
84105.100.IN-ADDR.ARPA
85106.100.IN-ADDR.ARPA
86107.100.IN-ADDR.ARPA
87108.100.IN-ADDR.ARPA
88109.100.IN-ADDR.ARPA
89110.100.IN-ADDR.ARPA
90111.100.IN-ADDR.ARPA
91112.100.IN-ADDR.ARPA
92113.100.IN-ADDR.ARPA
93114.100.IN-ADDR.ARPA
94115.100.IN-ADDR.ARPA
95116.100.IN-ADDR.ARPA
96117.100.IN-ADDR.ARPA
97118.100.IN-ADDR.ARPA
98119.100.IN-ADDR.ARPA
99120.100.IN-ADDR.ARPA
100121.100.IN-ADDR.ARPA
101122.100.IN-ADDR.ARPA
102123.100.IN-ADDR.ARPA
103124.100.IN-ADDR.ARPA
104125.100.IN-ADDR.ARPA
105126.100.IN-ADDR.ARPA
106127.100.IN-ADDR.ARPA
1070.IN-ADDR.ARPA
108127.IN-ADDR.ARPA
109254.169.IN-ADDR.ARPA
1102.0.192.IN-ADDR.ARPA
111100.51.198.IN-ADDR.ARPA
112113.0.203.IN-ADDR.ARPA
113255.255.255.255.IN-ADDR.ARPA
1140.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA
1151.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA
116D.F.IP6.ARPA
1178.E.F.IP6.ARPA
1189.E.F.IP6.ARPA
119A.E.F.IP6.ARPA
120B.E.F.IP6.ARPA
1218.B.D.0.1.0.0.2.IP6.ARPA
122EMPTY.AS112.ARPA
123HOME.ARPA
124RESOLVER.ARPA"
125
126n=$((n + 1))
127ret=0
128count=0
129echo_i "Checking expected empty zones were configured ($n)"
130for zone in ${emptyzones}; do
131  grep "automatic empty zone: $zone" ns1/named.run >/dev/null || {
132    echo_i "failed (empty zone $zone missing)"
133    ret=1
134  }
135  count=$((count + 1))
136done
137lines=$(grep "automatic empty zone: " ns1/named.run | wc -l)
138test $count -eq $lines -a $count -eq 100 || {
139  ret=1
140  echo_i "failed (count mismatch)"
141}
142if [ $ret != 0 ]; then status=$((status + ret)); fi
143
144n=$((n + 1))
145echo_i "Checking that reconfiguring empty zones is silent ($n)"
146$RNDCCMD 10.53.0.1 reconfig
147ret=0
148grep "automatic empty zone" ns1/named.run >/dev/null || ret=1
149grep "received control channel command 'reconfig'" ns1/named.run >/dev/null || ret=1
150grep "reloading configuration succeeded" ns1/named.run >/dev/null || ret=1
151sleep 1
152grep "zone serial (0) unchanged." ns1/named.run >/dev/null && ret=1
153if [ $ret != 0 ]; then
154  echo_i "failed"
155  status=$((status + ret))
156fi
157
158n=$((n + 1))
159echo_i "Checking that reloading empty zones is silent ($n)"
160rndc_reload ns1 10.53.0.1
161ret=0
162grep "automatic empty zone" ns1/named.run >/dev/null || ret=1
163grep "received control channel command 'reload'" ns1/named.run >/dev/null || ret=1
164grep "reloading configuration succeeded" ns1/named.run >/dev/null || ret=1
165sleep 1
166grep "zone serial (0) unchanged." ns1/named.run >/dev/null && ret=1
167if [ $ret != 0 ]; then
168  echo_i "failed"
169  status=$((status + ret))
170fi
171
172HOST_NAME=$($FEATURETEST --gethostname)
173BIND_VERSION_STRING=$($NAMED -V | head -1)
174BIND_VERSION=$($NAMED -V | sed -ne 's/^BIND \([^ ]*\).*/\1/p')
175
176n=$((n + 1))
177ret=0
178echo_i "Checking that default version works for rndc ($n)"
179$RNDCCMD 10.53.0.1 status >rndc.status.ns1.$n 2>&1
180grep -F "version: $BIND_VERSION_STRING" rndc.status.ns1.$n >/dev/null || ret=1
181if [ $ret != 0 ]; then
182  echo_i "failed"
183  status=$((status + ret))
184fi
185
186n=$((n + 1))
187ret=0
188echo_i "Checking that custom version works for rndc ($n)"
189$RNDCCMD 10.53.0.3 status >rndc.status.ns3.$n 2>&1
190grep -F "version: $BIND_VERSION_STRING (this is a test of version)" rndc.status.ns3.$n >/dev/null || ret=1
191if [ $ret != 0 ]; then
192  echo_i "failed"
193  status=$((status + ret))
194fi
195
196n=$((n + 1))
197ret=0
198echo_i "Checking that default version works for query ($n)"
199$DIG $DIGOPTS +short version.bind txt ch @10.53.0.1 >dig.out.ns1.$n || ret=1
200grep "^\"$BIND_VERSION\"$" dig.out.ns1.$n >/dev/null || ret=1
201if [ $ret != 0 ]; then
202  echo_i "failed"
203  status=$((status + ret))
204fi
205
206n=$((n + 1))
207ret=0
208echo_i "Checking that custom version works for query ($n)"
209$DIG $DIGOPTS +short version.bind txt ch @10.53.0.3 >dig.out.ns3.$n || ret=1
210grep "^\"this is a test of version\"$" dig.out.ns3.$n >/dev/null || ret=1
211if [ $ret != 0 ]; then
212  echo_i "failed"
213  status=$((status + ret))
214fi
215
216n=$((n + 1))
217ret=0
218echo_i "Checking that default hostname works for query ($n)"
219$DIG $DIGOPTS +short hostname.bind txt ch @10.53.0.1 >dig.out.ns1.$n || ret=1
220grep "^\"$HOST_NAME\"$" dig.out.ns1.$n >/dev/null || ret=1
221if [ $ret != 0 ]; then
222  echo_i "failed"
223  status=$((status + ret))
224fi
225
226n=$((n + 1))
227ret=0
228echo_i "Checking that custom hostname works for query ($n)"
229$DIG $DIGOPTS +short hostname.bind txt ch @10.53.0.3 >dig.out.ns3.$n || ret=1
230grep "^\"this.is.a.test.of.hostname\"$" dig.out.ns3.$n >/dev/null || ret=1
231if [ $ret != 0 ]; then
232  echo_i "failed"
233  status=$((status + ret))
234fi
235
236n=$((n + 1))
237ret=0
238echo_i "Checking that default server-id is none for query ($n)"
239$DIG $DIGOPTS id.server txt ch @10.53.0.1 >dig.out.ns1.$n || ret=1
240grep "status: NOERROR" dig.out.ns1.$n >/dev/null || ret=1
241grep "ANSWER: 0" dig.out.ns1.$n >/dev/null || ret=1
242if [ $ret != 0 ]; then
243  echo_i "failed"
244  status=$((status + ret))
245fi
246
247n=$((n + 1))
248ret=0
249echo_i "Checking that server-id hostname works for query ($n)"
250$DIG $DIGOPTS +short id.server txt ch @10.53.0.2 >dig.out.ns2.$n || ret=1
251grep "^\"$HOST_NAME\"$" dig.out.ns2.$n >/dev/null || ret=1
252if [ $ret != 0 ]; then
253  echo_i "failed"
254  status=$((status + ret))
255fi
256
257n=$((n + 1))
258ret=0
259echo_i "Checking that server-id hostname works for EDNS name server ID request ($n)"
260$DIG $DIGOPTS +norec +nsid foo @10.53.0.2 >dig.out.ns2.$n || ret=1
261grep "^; NSID: .* (\"$HOST_NAME\")$" dig.out.ns2.$n >/dev/null || ret=1
262if [ $ret != 0 ]; then
263  echo_i "failed"
264  status=$((status + ret))
265fi
266
267n=$((n + 1))
268ret=0
269echo_i "Checking that custom server-id works for query ($n)"
270$DIG $DIGOPTS +short id.server txt ch @10.53.0.3 >dig.out.ns3.$n || ret=1
271grep "^\"this.is.a.test.of.server-id\"$" dig.out.ns3.$n >/dev/null || ret=1
272if [ $ret != 0 ]; then
273  echo_i "failed"
274  status=$((status + ret))
275fi
276
277n=$((n + 1))
278ret=0
279echo_i "Checking that custom server-id works for EDNS name server ID request ($n)"
280$DIG $DIGOPTS +norec +nsid foo @10.53.0.3 >dig.out.ns3.$n || ret=1
281grep "^; NSID: .* (\"this.is.a.test.of.server-id\")$" dig.out.ns3.$n >/dev/null || ret=1
282if [ $ret != 0 ]; then
283  echo_i "failed"
284  status=$((status + ret))
285fi
286
287echo_i "exit status: $status"
288[ $status -eq 0 ] || exit 1
289