xref: /netbsd-src/external/mpl/bind/dist/bin/tests/system/builtin/tests.sh (revision 901e7e84758515fbf39dfc064cb0b45ab146d8b0)
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
14SYSTEMTESTTOP=..
15. $SYSTEMTESTTOP/conf.sh
16
17DIGOPTS="-p ${PORT}"
18RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s"
19
20status=0
21n=0
22
23emptyzones="
2410.IN-ADDR.ARPA
2516.172.IN-ADDR.ARPA
2617.172.IN-ADDR.ARPA
2718.172.IN-ADDR.ARPA
2819.172.IN-ADDR.ARPA
2920.172.IN-ADDR.ARPA
3021.172.IN-ADDR.ARPA
3122.172.IN-ADDR.ARPA
3223.172.IN-ADDR.ARPA
3324.172.IN-ADDR.ARPA
3425.172.IN-ADDR.ARPA
3526.172.IN-ADDR.ARPA
3627.172.IN-ADDR.ARPA
3728.172.IN-ADDR.ARPA
3829.172.IN-ADDR.ARPA
3930.172.IN-ADDR.ARPA
4031.172.IN-ADDR.ARPA
41168.192.IN-ADDR.ARPA
4264.100.IN-ADDR.ARPA
4365.100.IN-ADDR.ARPA
4466.100.IN-ADDR.ARPA
4567.100.IN-ADDR.ARPA
4668.100.IN-ADDR.ARPA
4769.100.IN-ADDR.ARPA
4870.100.IN-ADDR.ARPA
4971.100.IN-ADDR.ARPA
5072.100.IN-ADDR.ARPA
5173.100.IN-ADDR.ARPA
5274.100.IN-ADDR.ARPA
5375.100.IN-ADDR.ARPA
5476.100.IN-ADDR.ARPA
5577.100.IN-ADDR.ARPA
5678.100.IN-ADDR.ARPA
5779.100.IN-ADDR.ARPA
5880.100.IN-ADDR.ARPA
5981.100.IN-ADDR.ARPA
6082.100.IN-ADDR.ARPA
6183.100.IN-ADDR.ARPA
6284.100.IN-ADDR.ARPA
6385.100.IN-ADDR.ARPA
6486.100.IN-ADDR.ARPA
6587.100.IN-ADDR.ARPA
6688.100.IN-ADDR.ARPA
6789.100.IN-ADDR.ARPA
6890.100.IN-ADDR.ARPA
6991.100.IN-ADDR.ARPA
7092.100.IN-ADDR.ARPA
7193.100.IN-ADDR.ARPA
7294.100.IN-ADDR.ARPA
7395.100.IN-ADDR.ARPA
7496.100.IN-ADDR.ARPA
7597.100.IN-ADDR.ARPA
7698.100.IN-ADDR.ARPA
7799.100.IN-ADDR.ARPA
78100.100.IN-ADDR.ARPA
79101.100.IN-ADDR.ARPA
80102.100.IN-ADDR.ARPA
81103.100.IN-ADDR.ARPA
82104.100.IN-ADDR.ARPA
83105.100.IN-ADDR.ARPA
84106.100.IN-ADDR.ARPA
85107.100.IN-ADDR.ARPA
86108.100.IN-ADDR.ARPA
87109.100.IN-ADDR.ARPA
88110.100.IN-ADDR.ARPA
89111.100.IN-ADDR.ARPA
90112.100.IN-ADDR.ARPA
91113.100.IN-ADDR.ARPA
92114.100.IN-ADDR.ARPA
93115.100.IN-ADDR.ARPA
94116.100.IN-ADDR.ARPA
95117.100.IN-ADDR.ARPA
96118.100.IN-ADDR.ARPA
97119.100.IN-ADDR.ARPA
98120.100.IN-ADDR.ARPA
99121.100.IN-ADDR.ARPA
100122.100.IN-ADDR.ARPA
101123.100.IN-ADDR.ARPA
102124.100.IN-ADDR.ARPA
103125.100.IN-ADDR.ARPA
104126.100.IN-ADDR.ARPA
105127.100.IN-ADDR.ARPA
1060.IN-ADDR.ARPA
107127.IN-ADDR.ARPA
108254.169.IN-ADDR.ARPA
1092.0.192.IN-ADDR.ARPA
110100.51.198.IN-ADDR.ARPA
111113.0.203.IN-ADDR.ARPA
112255.255.255.255.IN-ADDR.ARPA
1130.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
1141.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
115D.F.IP6.ARPA
1168.E.F.IP6.ARPA
1179.E.F.IP6.ARPA
118A.E.F.IP6.ARPA
119B.E.F.IP6.ARPA
1208.B.D.0.1.0.0.2.IP6.ARPA
121EMPTY.AS112.ARPA
122HOME.ARPA"
123
124n=`expr $n + 1`
125ret=0
126count=0
127echo_i "Checking expected empty zones were configured ($n)"
128for zone in ${emptyzones}
129do
130	grep "automatic empty zone: $zone" ns1/named.run > /dev/null || {
131		echo_i "failed (empty zone $zone missing)"
132		ret=1
133	}
134	count=`expr $count + 1`
135done
136lines=`grep "automatic empty zone: " ns1/named.run | wc -l`
137test $count -eq $lines -a $count -eq 99 || {
138	ret=1; echo_i "failed (count mismatch)";
139}
140if [ $ret != 0 ] ; then status=`expr $status + $ret`; fi
141
142n=`expr $n + 1`
143echo_i "Checking that reconfiguring empty zones is silent ($n)"
144$RNDCCMD 10.53.0.1 reconfig
145ret=0
146grep "automatic empty zone" ns1/named.run > /dev/null || ret=1
147grep "received control channel command 'reconfig'" ns1/named.run > /dev/null || ret=1
148grep "reloading configuration succeeded" ns1/named.run > /dev/null || ret=1
149sleep 1
150grep "zone serial (0) unchanged." ns1/named.run > /dev/null && ret=1
151if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
152
153n=`expr $n + 1`
154echo_i "Checking that reloading empty zones is silent ($n)"
155rndc_reload ns1 10.53.0.1
156ret=0
157grep "automatic empty zone" ns1/named.run > /dev/null || ret=1
158grep "received control channel command 'reload'" ns1/named.run > /dev/null || ret=1
159grep "reloading configuration succeeded" ns1/named.run > /dev/null || ret=1
160sleep 1
161grep "zone serial (0) unchanged." ns1/named.run > /dev/null && ret=1
162if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
163
164HOST_NAME=`$FEATURETEST --gethostname`
165BIND_VERSION_STRING=$($NAMED -V | head -1)
166BIND_VERSION=$($NAMED -V | sed -ne 's/^BIND \([^ ]*\).*/\1/p')
167
168n=`expr $n + 1`
169ret=0
170echo_i "Checking that default version works for rndc ($n)"
171$RNDCCMD 10.53.0.1 status > rndc.status.ns1.$n 2>&1
172grep -F "version: $BIND_VERSION_STRING" rndc.status.ns1.$n > /dev/null || ret=1
173if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
174
175n=`expr $n + 1`
176ret=0
177echo_i "Checking that custom version works for rndc ($n)"
178$RNDCCMD 10.53.0.3 status > rndc.status.ns3.$n 2>&1
179grep -F "version: $BIND_VERSION_STRING (this is a test of version)" rndc.status.ns3.$n > /dev/null || ret=1
180if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
181
182n=`expr $n + 1`
183ret=0
184echo_i "Checking that default version works for query ($n)"
185$DIG $DIGOPTS +short version.bind txt ch @10.53.0.1 > dig.out.ns1.$n
186grep "^\"$BIND_VERSION\"$" dig.out.ns1.$n > /dev/null || ret=1
187if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
188
189n=`expr $n + 1`
190ret=0
191echo_i "Checking that custom version works for query ($n)"
192$DIG $DIGOPTS +short version.bind txt ch @10.53.0.3 > dig.out.ns3.$n
193grep "^\"this is a test of version\"$" dig.out.ns3.$n > /dev/null || ret=1
194if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
195
196n=`expr $n + 1`
197ret=0
198echo_i "Checking that default hostname works for query ($n)"
199$DIG $DIGOPTS +short hostname.bind txt ch @10.53.0.1 > dig.out.ns1.$n
200grep "^\"$HOST_NAME\"$" dig.out.ns1.$n > /dev/null || ret=1
201if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
202
203n=`expr $n + 1`
204ret=0
205echo_i "Checking that custom hostname works for query ($n)"
206$DIG $DIGOPTS +short hostname.bind txt ch @10.53.0.3 > dig.out.ns3.$n
207grep "^\"this.is.a.test.of.hostname\"$" dig.out.ns3.$n > /dev/null || ret=1
208if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
209
210n=`expr $n + 1`
211ret=0
212echo_i "Checking that default server-id is none for query ($n)"
213$DIG $DIGOPTS id.server txt ch @10.53.0.1 > dig.out.ns1.$n
214grep "status: NOERROR" dig.out.ns1.$n > /dev/null || ret=1
215grep "ANSWER: 0" dig.out.ns1.$n > /dev/null || ret=1
216if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
217
218n=`expr $n + 1`
219ret=0
220echo_i "Checking that server-id hostname works for query ($n)"
221$DIG $DIGOPTS +short id.server txt ch @10.53.0.2 > dig.out.ns2.$n
222grep "^\"$HOST_NAME\"$" dig.out.ns2.$n > /dev/null || ret=1
223if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
224
225n=`expr $n + 1`
226ret=0
227echo_i "Checking that server-id hostname works for EDNS name server ID request ($n)"
228$DIG $DIGOPTS +norec +nsid foo @10.53.0.2 > dig.out.ns2.$n
229grep "^; NSID: .* (\"$HOST_NAME\")$" dig.out.ns2.$n > /dev/null || ret=1
230if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
231
232n=`expr $n + 1`
233ret=0
234echo_i "Checking that custom server-id works for query ($n)"
235$DIG $DIGOPTS +short id.server txt ch @10.53.0.3 > dig.out.ns3.$n
236grep "^\"this.is.a.test.of.server-id\"$" dig.out.ns3.$n > /dev/null || ret=1
237if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
238
239n=`expr $n + 1`
240ret=0
241echo_i "Checking that custom server-id works for EDNS name server ID request ($n)"
242$DIG $DIGOPTS +norec +nsid foo @10.53.0.3 > dig.out.ns3.$n
243grep "^; NSID: .* (\"this.is.a.test.of.server-id\")$" dig.out.ns3.$n > /dev/null || ret=1
244if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
245
246echo_i "exit status: $status"
247[ $status -eq 0 ] || exit 1
248