Home | History | Annotate | Line # | Download | only in unknown
      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 status=0
     19 n=0
     20 
     21 DIGOPTS="-p ${PORT}"
     22 
     23 dig_cmd() {
     24   # shellcheck disable=SC2086
     25   "$DIG" $DIGOPTS "$@" | grep -v '^;'
     26 }
     27 
     28 n=$((n + 1))
     29 echo_i "querying for various representations of an IN A record ($n)"
     30 for i in 1 2 3 4 5 6 7 8 9 10 11 12; do
     31   ret=0
     32   dig_cmd +short @10.53.0.1 a$i.example a in >dig.out.$i.test$n
     33   echo 10.0.0.1 | diff - dig.out.$i.test$n || ret=1
     34   if [ $ret != 0 ]; then
     35     echo_i "#$i failed"
     36   fi
     37   status=$((status + ret))
     38 done
     39 
     40 n=$((n + 1))
     41 echo_i "querying for various representations of an IN TXT record ($n)"
     42 for i in 1 2 3 4 5 6 7; do
     43   ret=0
     44   dig_cmd +short @10.53.0.1 txt$i.example txt in >dig.out.$i.test$n
     45   echo '"hello"' | diff - dig.out.$i.test$n || ret=1
     46   if [ $ret != 0 ]; then
     47     echo_i "#$i failed"
     48   fi
     49   status=$((status + ret))
     50 done
     51 
     52 n=$((n + 1))
     53 echo_i "querying for various representations of an IN TYPE123 record ($n)"
     54 for i in 1 2 3; do
     55   ret=0
     56   dig_cmd +short @10.53.0.1 unk$i.example type123 in >dig.out.$i.test$n
     57   echo '\# 1 00' | diff - dig.out.$i.test$n || ret=1
     58   if [ $ret != 0 ]; then
     59     echo_i "#$i failed"
     60   fi
     61   status=$((status + ret))
     62 done
     63 
     64 n=$((n + 1))
     65 echo_i "querying for NULL record ($n)"
     66 ret=0
     67 dig_cmd +short @10.53.0.1 null.example null in >dig.out.test$n
     68 echo '\# 1 00' | diff - dig.out.test$n || ret=1
     69 [ $ret = 0 ] || echo_i "failed"
     70 status=$((status + ret))
     71 
     72 n=$((n + 1))
     73 echo_i "querying for empty NULL record ($n)"
     74 ret=0
     75 dig_cmd +short @10.53.0.1 empty.example null in >dig.out.test$n
     76 echo '\# 0' | diff - dig.out.test$n || ret=1
     77 [ $ret = 0 ] || echo_i "failed"
     78 status=$((status + ret))
     79 
     80 n=$((n + 1))
     81 echo_i "querying for various representations of a CLASS10 TYPE1 record ($n)"
     82 for i in 1 2; do
     83   ret=0
     84   dig_cmd +short @10.53.0.1 a$i.example a class10 >dig.out.$i.test$n
     85   echo '\# 4 0A000001' | diff - dig.out.$i.test$n || ret=1
     86   if [ $ret != 0 ]; then
     87     echo_i "#$i failed"
     88   fi
     89   status=$((status + ret))
     90 done
     91 
     92 n=$((n + 1))
     93 echo_i "querying for various representations of a CLASS10 TXT record ($n)"
     94 for i in 1 2 3 4; do
     95   ret=0
     96   dig_cmd +short @10.53.0.1 txt$i.example txt class10 >dig.out.$i.test$n
     97   echo '"hello"' | diff - dig.out.$i.test$n || ret=1
     98   if [ $ret != 0 ]; then
     99     echo_i "#$i failed"
    100   fi
    101   status=$((status + ret))
    102 done
    103 
    104 n=$((n + 1))
    105 echo_i "querying for various representations of a CLASS10 TYPE123 record ($n)"
    106 for i in 1 2; do
    107   ret=0
    108   dig_cmd +short @10.53.0.1 unk$i.example type123 class10 >dig.out.$i.test$n
    109   echo '\# 1 00' | diff - dig.out.$i.test$n || ret=1
    110   if [ $ret != 0 ]; then
    111     echo_i "#$i failed"
    112   fi
    113   status=$((status + ret))
    114 done
    115 
    116 n=$((n + 1))
    117 echo_i "querying for SOAs of zone that should have failed to load ($n)"
    118 for i in 1 2 3 4; do
    119   ret=0
    120   $DIG $DIGOPTS @10.53.0.1 broken$i. soa in >dig.out.$i.test$n || ret=1
    121   grep "SERVFAIL" dig.out.$i.test$n >/dev/null || ret=1
    122   if [ $ret != 0 ]; then
    123     echo_i "#$i failed"
    124   fi
    125   status=$((status + ret))
    126 done
    127 
    128 n=$((n + 1))
    129 echo_i "checking large unknown record loading on primary ($n)"
    130 for try in 0 1 2 3 4 5 6 7 8 9; do
    131   ret=0
    132   dig_cmd @10.53.0.1 +tcp +short large.example TYPE45234 >dig.out.$i.test$n
    133   diff -s large.out dig.out.$i.test$n >/dev/null || {
    134     ret=1
    135     echo_i "diff failed"
    136   }
    137   [ "$ret" -eq 0 ] && break
    138   sleep 1
    139 done
    140 [ $ret = 0 ] || echo_i "failed"
    141 status=$((status + ret))
    142 
    143 n=$((n + 1))
    144 echo_i "checking large unknown record loading on secondary ($n)"
    145 for try in 0 1 2 3 4 5 6 7 8 9; do
    146   ret=0
    147   dig_cmd @10.53.0.2 +tcp +short large.example TYPE45234 >dig.out.$i.test$n
    148   diff -s large.out dig.out.$i.test$n >/dev/null || {
    149     ret=1
    150     echo_i "diff failed"
    151   }
    152   [ "$ret" -eq 0 ] && break
    153   sleep 1
    154 done
    155 [ $ret = 0 ] || echo_i "failed"
    156 status=$((status + ret))
    157 
    158 echo_i "stop and restart secondary"
    159 stop_server ns2
    160 start_server --noclean --restart --port ${PORT} ns2
    161 
    162 # server may be answering queries before zones are loaded,
    163 # so retry a few times if this query fails
    164 n=$((n + 1))
    165 echo_i "checking large unknown record loading on secondary ($n)"
    166 for try in 0 1 2 3 4 5 6 7 8 9; do
    167   ret=0
    168   dig_cmd @10.53.0.2 +tcp +short large.example TYPE45234 >dig.out.$i.test$n
    169   diff -s large.out dig.out.$i.test$n >/dev/null || {
    170     ret=1
    171     echo_i "diff failed"
    172   }
    173   [ "$ret" -eq 0 ] && break
    174   sleep 1
    175 done
    176 [ $ret = 0 ] || echo_i "failed"
    177 status=$((status + ret))
    178 
    179 n=$((n + 1))
    180 echo_i "checking large unknown record loading on inline secondary ($n)"
    181 ret=0
    182 dig_cmd @10.53.0.3 +tcp +short large.example TYPE45234 >dig.out.test$n
    183 diff large.out dig.out.test$n >/dev/null || {
    184   ret=1
    185   echo_i "diff failed"
    186 }
    187 [ $ret = 0 ] || echo_i "failed"
    188 status=$((status + ret))
    189 
    190 echo_i "stop and restart inline secondary"
    191 stop_server ns3
    192 start_server --noclean --restart --port ${PORT} ns3
    193 
    194 # server may be answering queries before zones are loaded,
    195 # so retry a few times if this query fails
    196 n=$((n + 1))
    197 echo_i "checking large unknown record loading on inline secondary ($n)"
    198 for try in 0 1 2 3 4 5 6 7 8 9; do
    199   ret=0
    200   dig_cmd @10.53.0.3 +tcp +short large.example TYPE45234 >dig.out.$i.test$n
    201   diff large.out dig.out.$i.test$n >/dev/null || {
    202     ret=1
    203     echo_i "diff failed"
    204   }
    205   [ "$ret" -eq 0 ] && break
    206   sleep 1
    207 done
    208 [ $ret = 0 ] || echo_i "failed"
    209 status=$((status + ret))
    210 
    211 n=$((n + 1))
    212 echo_i "check that '"'"\\#"'"' is not treated as the unknown escape sequence ($n)"
    213 ret=0
    214 dig_cmd @10.53.0.1 +tcp +short txt8.example txt >dig.out.test$n
    215 echo '"#" "2" "0145"' | diff - dig.out.test$n || ret=1
    216 [ $ret = 0 ] || echo_i "failed"
    217 status=$((status + ret))
    218 
    219 n=$((n + 1))
    220 echo_i "check that 'TXT \# text' is not treated as the unknown escape sequence ($n)"
    221 ret=0
    222 dig_cmd @10.53.0.1 +tcp +short txt9.example txt >dig.out.test$n
    223 echo '"#" "text"' | diff - dig.out.test$n || ret=1
    224 [ $ret = 0 ] || echo_i "failed"
    225 status=$((status + ret))
    226 
    227 n=$((n + 1))
    228 echo_i "check that 'TYPE353 \# cat' produces 'not a valid number' ($n)"
    229 ret=0
    230 $CHECKZONE nan.bad zones/nan.bad >check.out 2>&1 && ret=1
    231 grep "not a valid number" check.out >/dev/null || ret=1
    232 [ $ret = 0 ] || echo_i "failed"
    233 status=$((status + ret))
    234 
    235 echo_i "exit status: $status"
    236 [ $status -eq 0 ] || exit 1
    237