aboutsummaryrefslogtreecommitdiff
path: root/rts.tests
diff options
context:
space:
mode:
Diffstat (limited to 'rts.tests')
-rw-r--r--rts.tests767
1 files changed, 767 insertions, 0 deletions
diff --git a/rts.tests b/rts.tests
new file mode 100644
index 0000000..ee2be85
--- /dev/null
+++ b/rts.tests
@@ -0,0 +1,767 @@
+# Requirements:
+# You are running as root.
+# You have dns{cache,log}, {tiny,pick,wall,axfr,rbl}dns accounts.
+# You have local IP addresses 127.43.0.{1,2,3,4,5}.
+# You are connected to the Internet.
+#
+# Some features not tested here:
+# dns_random works.
+# random-ip works.
+# dnstrace works.
+# dnstracesort works.
+# dns_resolvconfrewrite rereads after 10 minutes or 10000 uses.
+# dns_resolvconfip rereads after 10 minutes or 10000 uses.
+# /etc/resolv.conf is parsed properly.
+# dns_transmit handles timeouts properly.
+# dns_transmit falls back to TCP properly.
+# dns_transmit handles various strange situations: e.g., NOTIMP.
+
+
+umask 022
+
+rm -rf rts-tmp
+service=`pwd`/rts-tmp/service
+
+mkdir rts-tmp
+mkdir $service
+
+echo '
+*.b:.2.3.4
+=localhost:localhost.
+-.localhost:localhost.
+?:+.yp.to+.cr.yp.to+.whatever.cr.yp.to
+*.:
+' > rts-tmp/rewrite
+
+DNSREWRITEFILE=rts-tmp/rewrite; export DNSREWRITEFILE
+DNSCACHEIP=127.555.0.1; export DNSCACHEIP
+
+
+echo '--- dnscache-conf works'
+dnscache-conf dnscache dnslog $service/dnscache 127.555.0.1
+echo 127.555.0.2 > $service/dnscache/root/servers/tEST
+echo 127.555.0.2 > $service/dnscache/root/servers/tEST5
+echo 127.555.0.4 > $service/dnscache/root/servers/43.127.iN-aDDR.aRPA
+touch $service/dnscache/root/ip/127.43.0.1
+supervise $service/dnscache | supervise $service/dnscache/log &
+
+echo '--- tinydns-conf works'
+tinydns-conf tinydns dnslog $service/tinydns 127.555.0.2
+supervise $service/tinydns | supervise $service/tinydns/log &
+
+echo '--- pickdns-conf works'
+pickdns-conf pickdns dnslog $service/pickdns 127.555.0.3
+supervise $service/pickdns | supervise $service/pickdns/log &
+
+echo '--- walldns-conf works'
+walldns-conf walldns dnslog $service/walldns 127.555.0.4
+supervise $service/walldns | supervise $service/walldns/log &
+
+echo '--- rbldns-conf works'
+rbldns-conf rbldns dnslog $service/rbldns 127.555.0.5 RbL.TeSt
+supervise $service/rbldns | supervise $service/rbldns/log &
+
+echo '--- axfrdns-conf works'
+axfrdns-conf axfrdns dnslog $service/axfrdns $service/tinydns 127.555.0.2
+supervise $service/axfrdns | supervise $service/axfrdns/log &
+
+sleep 1
+
+
+echo '--- cache handles simple example'
+cachetest \
+one two three four five \
+one:un one two three four five \
+two:deux one two three four five \
+three:trois one two three four five \
+four:quatre one two three four five \
+five:cinq one two three four five \
+one:een one two three four five \
+two:twee one two three four five \
+three:drie one two three four five \
+four:vier one two three four five \
+five:vijf one two three four five
+echo $?
+
+echo '--- cache handles overwriting'
+cachetest \
+one two three four five \
+one:un one two three four five \
+one:een one two three four five \
+two:deux one two three four five \
+two:twee one two three four five \
+three:trois one two three four five \
+three:drie one two three four five \
+four:quatre one two three four five \
+four:vier one two three four five \
+five:cinq one two three four five \
+five:vijf one two three four five
+echo $?
+
+echo '--- cache handles long chains'
+cachetest \
+a:1 a \
+a:2 a \
+a:3 a \
+a:4 a \
+a:5 a \
+a:6 a \
+a:7 a \
+a:8 a \
+a:9 a
+echo $?
+
+
+echo '--- dnsip finds IP address of network-surveys.cr.yp.to'
+dnsip network-surveys.cr.yp.to
+echo $?
+
+echo '--- dnsip does not find nonexistent.cr.yp.to'
+dnsip nonexistent.cr.yp.to
+echo $?
+
+echo '--- dnsip rejects overly long domain names'
+dnsip x.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789
+echo $?
+
+echo '--- dnsip handles IP address on input'
+dnsip 1.2.3.4 127.0.0.1 10.555.678.901 '[010.0555.0678.0901]'
+echo $?
+
+echo '--- dnsip allows 0 to be omitted'
+dnsip 127...1
+echo $?
+
+echo '--- dnsip handles multiple IP addresses on input'
+dnsip 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16
+echo $?
+
+echo '--- dnsipq handles simple examples'
+dnsipq 1.b localhost anything.localhost 5.6.7.8 network-surveys nonexistent
+echo $?
+
+echo '--- dnsmx finds MX record for network-surveys.cr.yp.to'
+dnsmx network-surveys.cr.yp.to
+echo $?
+
+echo '--- dnsmx manufactures MX record for nonexistent.cr.yp.to'
+dnsmx NONexistent.cr.yp.to
+echo $?
+
+echo '--- dnsmx rejects overly long domain names'
+dnsmx 0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789
+echo $?
+
+echo '--- dnstxt finds TXT record for leap.yp.to'
+dnstxt leap.yp.to
+echo $?
+
+echo '--- dnstxt does not find nonexistent.cr.yp.to'
+dnstxt nonexistent.cr.yp.to
+echo $?
+
+echo '--- dnstxt rejects overly long domain names'
+dnstxt 0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789
+echo $?
+
+echo '--- dnsname finds host name of 131.193.178.100'
+dnsname 131.193.178.100
+echo $?
+
+echo '--- dnsname does not find 127.5.6.7'
+dnsname 127.5.6.7
+echo $?
+
+echo '--- dnsname rejects misformatted IP addresses'
+dnsname 1.2.3
+echo $?
+
+echo '--- dnsfilter finds some host names'
+echo '131.193.178.100+one two three
+127.5.6.7+one two three
+10+one two three' | dnsfilter
+echo $?
+
+
+echo '
+=movie.edu:1.2.3.4
+*star
+' > rts-tmp/data
+
+echo '--- tinydns-data complains about unrecognized initial characters'
+( cd rts-tmp; tinydns-data; echo $? )
+
+echo '
+.movie.edu:192.249.249.3:a
+.movie.edu::wormhole.movie.edu
+&fx.movie.edu:192.253.254.2:a
+&fx.movie.edu:192.253.254.3:b
+.249.249.192.in-addr.arpa:192.249.249.3:a
+.249.249.192.in-addr.arpa::wormhole.movie.edu
+.253.253.192.in-addr.arpa:192.249.249.3:a
+.253.253.192.in-addr.arpa:192.249.249.1:b
+.253.253.192.in-addr.arpa:192.253.253.1:c
+.254.253.192.in-addr.arpa:192.253.254.2:a
+.254.253.192.in-addr.arpa:192.253.254.3:b
+
++localhost.movie.edu:127.0.0.1
+
+@movie.edu:192.249.249.1:a
+
+'\''movie.edu:Movie University
+:movie.edu:12345:One
+:movie.edu:12345:Two
+:movie.edu:12346:Three
+:movie.edu:12346:Four
+
+=wormhole.movie.edu:192.249.249.1
++wh249.movie.edu:192.249.249.1
+=robocop.movie.edu:192.249.249.2
+=terminator.movie.edu:192.249.249.3
++bigt.movie.edu:192.249.249.3
+=diehard.movie.edu:192.249.294.4
++dh.movie.edu:192.249.294.4
+
+=wormhole.movie.edu:192.253.253.1
++wh253.movie.edu:192.253.253.1
++wh.movie.edu:192.253.253.1
++wh.movie.edu:192.253.253.1
+=misery.movie.edu:192.253.253.2
+=shining.movie.edu:192.253.253.3
+=carrie.movie.edu:192.253.253.4
+
+.blah.movie.edu:1.2.3.4:blah.movie.edu
+'\''blah.movie.edu:Text
+' > rts-tmp/data
+utime rts-tmp/data 987654321
+
+echo '--- tinydns-data complains if it cannot create data.tmp'
+rm -f rts-tmp/data.tmp
+ln -s data.tmp rts-tmp/data.tmp
+( cd rts-tmp; tinydns-data; echo $? )
+rm -f rts-tmp/data.tmp
+
+echo '--- tinydns-data handles simple example'
+( cd rts-tmp; tinydns-data; echo $? )
+
+echo '--- tinydns-data produces A records'
+( cd rts-tmp; tinydns-get 1 wormhole.movie.edu | sort; echo $? )
+
+echo '--- tinydns-data produces NS records'
+( cd rts-tmp; tinydns-get 2 movie.edu; echo $? )
+
+echo '--- tinydns-data produces SOA records'
+( cd rts-tmp; tinydns-get 6 movie.edu; echo $? )
+
+echo '--- tinydns-data produces PTR records'
+( cd rts-tmp; tinydns-get 12 1.253.253.192.in-addr.arpa; echo $? )
+
+echo '--- tinydns-data produces MX records'
+( cd rts-tmp; tinydns-get 15 movie.edu; echo $? )
+
+echo '--- tinydns-data produces TXT records'
+( cd rts-tmp; tinydns-get 16 movie.edu; echo $? )
+
+echo '--- tinydns-data produces AXFR responses'
+( cd rts-tmp; tinydns-get 252 movie.edu; echo $? )
+
+echo '--- tinydns-data produces ANY responses'
+( cd rts-tmp; tinydns-get 255 movie.edu; echo $? )
+
+echo '--- tinydns-data produces records of any type'
+( cd rts-tmp; tinydns-get 12345 movie.edu; echo $? )
+( cd rts-tmp; tinydns-get 12346 movie.edu; echo $? )
+
+echo '--- tinydns-data produces NODATA responses'
+( cd rts-tmp; tinydns-get 54321 movie.edu; echo $? )
+
+echo '--- tinydns-data produces NXDOMAIN responses'
+( cd rts-tmp; tinydns-get 1 this.does.not.exist.movie.edu; echo $? )
+
+echo '--- tinydns-data produces NXDOMAIN responses for suffixes'
+( cd rts-tmp; tinydns-get 1 ns.movie.edu; echo $? )
+
+echo '--- tinydns-data produces NXDOMAIN ANY responses for suffixes'
+( cd rts-tmp; tinydns-get 255 ns.movie.edu; echo $? )
+
+echo '--- tinydns-data does not produce responses outside its bailiwick'
+( cd rts-tmp; tinydns-get 1 edu; echo $? )
+
+echo '--- tinydns-data does not include TXT in additional sections'
+( cd rts-tmp; tinydns-get 1 blah.movie.edu; echo $? )
+
+
+echo '
+.test:10.2.3.4:a
++b.ns.test:10.2.3.6:259200
+.test:10.2.3.5:b
+'\''127.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456
+'\''128.test:01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
+'\''254.test:01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123
+'\''255.test:012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234
+'\''387.test:012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456
+'\''388.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
+'\''400.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+'\''410.test:01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+'\''420.test:012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+'\''430.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+'\''435.test:012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234
+'\''436.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
+'\''1000.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+=\000\001\177\200\277\.\.\..test:10.5.6.7
+.7.6.5.10.in-addr.arpa:10.5.6.7
+
+&x.\0\1\177\200\277\.\.\..test:10.8.9.10
+' > rts-tmp/data
+utime rts-tmp/data 0
+
+echo '--- tinydns-data handles another example'
+( cd rts-tmp; tinydns-data; echo $? )
+
+echo '--- tinydns-data uses serial 1 for mtime 0'
+( cd rts-tmp; tinydns-get Any test; echo $? )
+
+echo '--- tinydns-data does not split size-127 TXT records'
+( cd rts-tmp; tinydns-get Txt 127.test; echo $? )
+
+echo '--- tinydns-data splits size-128 TXT records'
+( cd rts-tmp; tinydns-get 16 128.test; echo $? )
+
+echo '--- tinydns-data splits size-254 TXT records'
+( cd rts-tmp; tinydns-get 16 254.test; echo $? )
+
+echo '--- tinydns-data doubly splits size-255 TXT records'
+( cd rts-tmp; tinydns-get 16 255.test; echo $? )
+
+echo '--- tinydns-data excludes the additional section if necessary'
+( cd rts-tmp; tinydns-get 16 387.test; echo $? )
+( cd rts-tmp; tinydns-get 16 388.test; echo $? )
+
+echo '--- tinydns-data excludes the authority section if necessary'
+( cd rts-tmp; tinydns-get 16 435.test; echo $? )
+( cd rts-tmp; tinydns-get 16 436.test; echo $? )
+
+echo '--- tinydns-data handles size-1000 TXT records'
+( cd rts-tmp; tinydns-get 16 1000.test; echo $? )
+
+echo '--- tinydns-data handles unusual characters in owner names'
+( cd rts-tmp; tinydns-get A '\0\1\177\200\277\56\56\56.test'; echo $? )
+
+echo '--- tinydns-data handles unusual characters in PTR results'
+( cd rts-tmp; tinydns-get Ptr 7.6.5.10.in-addr.arpa; echo $? )
+
+echo '--- tinydns-data handles delegations'
+( cd rts-tmp; tinydns-get 1 'x.\0\1\177\200\277\56\56\56.test'; echo $? )
+( cd rts-tmp; tinydns-get 1 'ns.x.\0\1\177\200\277\56\56\56.test'; echo $? )
+( cd rts-tmp; tinydns-get 1 'z.y.x.\0\1\177\200\277\56\56\56.test'; echo $? )
+
+
+echo '
+Ztest:Primary.Server:Host.Master:1234567:2345678:3456789:4567890:5678901:98765
+&test:1.2.3.4::37
+@*.wild.test:1.2.3.7:mail.wild.test:54321:46
+&child.test:1.2.3.5::38
+@test:1.2.3.4:::41
+=test:1.2.3.4:39
++www.test:1.2.3.4:40
+'\''test:Text:42
+:test:12345:Binary:43
+Cmail.test:www.test:44
++*.wild.test:1.2.3.6:45
+=override.wild.test:1.2.3.8:47
++*.wild.wild.test:1.2.3.9:48
+&child.wild.test:1.2.3.10:49
+C*.alias.wild.test:wild.test:50
+' > rts-tmp/data
+utime rts-tmp/data 0
+
+echo '--- tinydns-data handles another example'
+( cd rts-tmp; tinydns-data; echo $? )
+
+echo '--- tinydns-data handles TTLs'
+( cd rts-tmp; tinydns-get 255 test; echo $? )
+( cd rts-tmp; tinydns-get 255 www.test; echo $? )
+( cd rts-tmp; tinydns-get 255 child.test; echo $? )
+
+echo '--- tinydns-data handles CNAMEs'
+( cd rts-tmp; tinydns-get 255 mail.test; echo $? )
+( cd rts-tmp; tinydns-get 5 mail.test; echo $? )
+( cd rts-tmp; tinydns-get 1 mail.test; echo $? )
+( cd rts-tmp; tinydns-get 255 foo.mail.test; echo $? )
+
+echo '--- tinydns-data does not apply wildcard A to base name'
+( cd rts-tmp; tinydns-get 1 wild.test; echo $? )
+
+echo '--- tinydns-data handles wildcard A records'
+( cd rts-tmp; tinydns-get 1 x.wild.test; echo $? )
+( cd rts-tmp; tinydns-get 1 xy.wild.test; echo $? )
+( cd rts-tmp; tinydns-get 1 x.z.wild.test; echo $? )
+
+echo '--- tinydns-data handles wildcard MX records'
+( cd rts-tmp; tinydns-get 255 wild.test; echo $? )
+
+echo '--- tinydns-data does not apply wildcard MX to base name'
+( cd rts-tmp; tinydns-get 255 x.wild.test; echo $? )
+( cd rts-tmp; tinydns-get 255 xy.wild.test; echo $? )
+( cd rts-tmp; tinydns-get 15 x.z.wild.test; echo $? )
+( cd rts-tmp; tinydns-get 255 x.z.wild.test; echo $? )
+( cd rts-tmp; tinydns-get 255 '*'.wild.test; echo $? )
+
+echo '--- tinydns-data uses wildcard under base of sub-wildcard'
+( cd rts-tmp; tinydns-get 255 alias.wild.test; echo $? )
+
+echo '--- tinydns-data handles wildcard CNAME records'
+( cd rts-tmp; tinydns-get 255 xyz.alias.wild.test; echo $? )
+( cd rts-tmp; tinydns-get 255 '*'.alias.wild.test; echo $? )
+
+echo '--- tinydns-data lets explicit record override wildcard'
+( cd rts-tmp; tinydns-get 255 override.wild.test; echo $? )
+
+echo '--- tinydns-data handles overrides sanely'
+( cd rts-tmp; tinydns-get 255 x.override.wild.test; echo $? )
+
+echo '--- tinydns-data overrides wildcard with subdomain wildcard'
+( cd rts-tmp; tinydns-get 255 x.wild.wild.test; echo $? )
+
+echo '--- tinydns-data overrides wildcard with delegation'
+( cd rts-tmp; tinydns-get 255 child.wild.test; echo $? )
+( cd rts-tmp; tinydns-get 255 x.child.wild.test; echo $? )
+
+
+echo '
+.four:1.2.3.4::0:30000000fedcba98
++www.four:1.2.3.4:0:30000000fedcba98
+.five:1.2.3.5:::30000000fedcba98
++www.five:1.2.3.5::30000000fedcba98
+.six:1.2.3.6::0:50000000fedcba98
++www.six:1.2.3.6:0:50000000fedcba98
+.seven:1.2.3.7:::50000000fedcba98
++www.seven:1.2.3.7::50000000fedcba98
+' > rts-tmp/data
+utime rts-tmp/data 7654321
+
+echo '--- tinydns-data handles another example'
+( cd rts-tmp; tinydns-data; echo $? )
+
+echo '--- tinydns-data handles ending time'
+( cd rts-tmp; tinydns-get 255 www.four; echo $? )
+( cd rts-tmp; tinydns-get 255 www.six; echo $? )
+
+echo '--- tinydns-data handles starting time'
+( cd rts-tmp; tinydns-get 255 www.five; echo $? )
+( cd rts-tmp; tinydns-get 255 www.seven; echo $? )
+
+
+echo '--- tinydns-edit handles simple examples'
+echo '' > rts-tmp/data
+( cd rts-tmp; tinydns-edit data data.new add ns heaven.af.mil 1.2.3.5; echo $? )
+( cd rts-tmp; tinydns-edit data data.new add ns heaven.af.mil 1.2.3.6; echo $? )
+( cd rts-tmp; tinydns-edit data data.new add childns sub.heaven.af.mil 1.2.10.11; echo $? )
+( cd rts-tmp; tinydns-edit data data.new add childns sub.heaven.af.mil 1.2.10.12; echo $? )
+( cd rts-tmp; tinydns-edit data data.new add host lion.heaven.af.mil 1.2.3.4; echo $? )
+( cd rts-tmp; tinydns-edit data data.new add host tiger.heaven.af.mil 1.2.3.5; echo $? )
+( cd rts-tmp; tinydns-edit data data.new add host bear.heaven.af.mil 1.2.3.6; echo $? )
+( cd rts-tmp; tinydns-edit data data.new add alias www.heaven.af.mil 1.2.3.4; echo $? )
+( cd rts-tmp; tinydns-edit data data.new add mx heaven.af.mil 1.2.3.4; echo $? )
+( cd rts-tmp; tinydns-edit data data.new add mx heaven.af.mil 1.2.3.7; echo $? )
+cat rts-tmp/data
+
+echo '--- tinydns-edit rejects hosts with old names or IP addresses'
+( cd rts-tmp; tinydns-edit data data.new add host panda.heaven.af.mil 1.2.3.6; echo $? )
+( cd rts-tmp; tinydns-edit data data.new add host bear.heaven.af.mil 1.2.3.8; echo $? )
+cat rts-tmp/data
+
+echo '--- tinydns-edit recognizes alternate forms of host names'
+( cd rts-tmp; tinydns-edit data data.new add host 'BE\101r.Heaven.AF..Mil.' 1.2.3.8; echo $? )
+cat rts-tmp/data
+
+echo '--- tinydns-edit copies TTLs from previous NS records'
+echo '.test:1.2.3.4:a:3600' > rts-tmp/data
+( cd rts-tmp; tinydns-edit data data.new add ns test 1.2.3.5; echo $? )
+cat rts-tmp/data
+
+
+
+echo '
+.Test:127.555.0.2
+=Www.Test:127.555.0.100
+=Www.Test:127.555.0.101
+@Test:127.555.0.100:a:1234
+@Test:127.555.0.101:b:45678
+&Pick.Test:127.555.0.3
+&Pick2.Test:127.555.0.3
+&Rbl.Test:127.555.0.5
+.Test2:127.555.0.2
++*.Test2:127.555.0.102
+C*.Www.Test2:Www.Test2:5000
+=one.Test2:127.555.0.103::300000003456789a
+=two.Test2:127.555.0.104:0:500000003456789a
+.Test3:127.555.0.2
+=Www.Test3:127.0.0.106
+.Test4:127.555.0.2
+'\''Test4:001234567890123456789012345678901234567890123456789
+'\''Test4:101234567890123456789012345678901234567890123456789
+'\''Test4:201234567890123456789012345678901234567890123456789
+'\''Test4:301234567890123456789012345678901234567890123456789
+'\''Test4:401234567890123456789012345678901234567890123456789
+'\''Test4:501234567890123456789012345678901234567890123456789
+'\''Test4:601234567890123456789012345678901234567890123456789
+'\''Test4:701234567890123456789012345678901234567890123456789
+'\''Test4:801234567890123456789012345678901234567890123456789
+'\''Test4:901234567890123456789012345678901234567890123456789
+'\''Big.Test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+%i3:127.555.0.3
+%i4:127.555.0.4
+%i5:127.555.0.5
+%ME:127
+%EX
+.Test5:127.555.0.2:ex:::EX
+.Test5:127.555.0.2:me:::ME
+.Test5:127.555.0.2:i3:::i3
+.Test5:127.555.0.2:i4:::i4
+.Test5:127.555.0.2:i5:::i5
+-Pick.Test5:127.555.0.100:::EX
++Pick.Test5:127.555.0.101:::EX
+-Pick2.Test5:127.555.0.102:::ME
++Pick2.Test5:127.555.0.102:::ME
++Pick3.Test5:127.555.0.100
++Pick3.Test5:127.555.0.101:::EX
++Pick3.Test5:127.555.0.102:::ME
++Pick3.Test5:127.555.0.103:::i3
++Pick3.Test5:127.555.0.104:::i4
++Pick3.Test5:127.555.0.105:::i5
++*.Wild.Test5:127.555.0.100
++*.Wild.Test5:127.555.0.101:::EX
++*.Wild.Test5:127.555.0.102:::ME
++*.Wild.Test5:127.555.0.103:::i3
++*.Wild.Test5:127.555.0.104:::i4
++*.Wild.Test5:127.555.0.105:::i5
+' > $service/tinydns/root/data
+utime $service/tinydns/root/data 987654321
+( cd $service/tinydns/root; tinydns-data )
+
+echo '
+-Pick.Test:127.555.0.100
++Pick.Test:127.555.0.101
+-Pick2.Test:127.555.0.102:ME
++Pick2.Test:127.555.0.102:ME
+%ME:127
+' > $service/pickdns/root/data
+( cd $service/pickdns/root; pickdns-data )
+
+echo '
+4.0.0.1
+4.0.0.2/31
+4.0.0.4/30
+4.0.0.8/29
+4.0.0.16/28
+4.0.0.32/27
+4.0.0.64/26
+4.0.0.128/25
+4.0.1.0/24
+4.0.2.0/23
+4.0.4.0/22
+4.0.8.0/21
+4.0.16.0/20
+4.0.32.0/19
+4.0.64.0/18
+4.0.128.0/17
+4.1.0.0/16
+4.2.0.0/15
+4.4.0.0/14
+4.8.0.0/13
+4.16.0.0/12
+4.32.0.0/11
+4.64.0.0/10
+4.128.0.0/9
+5.0.0.0/8
+:127.0.0.3:See http://www.rbl.test/$
+' > $service/rbldns/root/data
+( cd $service/rbldns/root; rbldns-data )
+
+echo '
+127.:allow,AXFR="tEsT/TeSt2/TEst5"
+:deny
+' > $service/axfrdns/tcp
+( cd $service/axfrdns; tcprules tcp.cdb tcp.tmp < tcp )
+
+
+echo '--- dnscache handles dotted-decimal names'
+dnsqr 255 127.43.123.234
+echo $?
+
+echo '--- tinydns works'
+dnsip WWW.TEST | tr ' ' '\012' | sort
+echo $?
+dnsmx TEST
+echo $?
+dnsq 255 WWW.TEST 127.555.0.2 | sort
+echo $?
+dnsq Any TEST 127.555.0.2
+echo $?
+
+echo '--- dnscache handles large TXT records'
+dnstxt BIG.Test
+
+echo '--- walldns handles in-addr.arpa names'
+dnsname 127.555.6.7
+echo $?
+dnsname 127.555.123.234
+echo $?
+dnsip 234.123.43.127.IN-ADDR.ARPA
+echo $?
+dnsq 255 234.123.43.127.IN-ADDR.ARPA 127.555.0.4
+echo $?
+
+echo '--- walldns handles dotted-decimal names'
+dnsq 255 127.43.123.234 127.555.0.4
+echo $?
+
+echo '--- walldns rejects other names'
+dnsq 255 BLAH.TEST 127.555.0.4
+echo $?
+
+echo '--- rbldns works'
+dnsip 2.3.4.5.rbl.test
+echo $?
+dnstxt 2.3.4.5.rbl.test
+echo $?
+dnsq 255 2.3.4.5.rbl.test 127.555.0.5
+echo $?
+dnsip 200.255.1.4.rbl.test
+echo $?
+dnstxt 200.255.1.4.rbl.test
+echo $?
+dnsq 255 200.255.1.4.rbl.test 127.555.0.5
+echo $?
+dnsip 200.255.0.4.rbl.test
+echo $?
+dnstxt 200.255.0.4.rbl.test
+echo $?
+dnsq 255 200.255.0.4.rbl.test 127.555.0.5
+echo $?
+dnsip 1.0.0.4.rbl.test
+echo $?
+dnstxt 1.0.0.4.rbl.test
+echo $?
+dnsq 255 1.0.0.4.rbl.test 127.555.0.5
+echo $?
+dnsip 0.0.0.4.rbl.test
+echo $?
+dnstxt 0.0.0.4.rbl.test
+echo $?
+dnsq 255 0.0.0.4.rbl.test 127.555.0.5
+echo $?
+
+echo '--- tinydns handles differentiation'
+dnsip PICK.TEST5
+echo $?
+dnsip PICK2.TEST5
+echo $?
+dnsip PICK3.TEST5 | tr ' ' '\012' | sort
+echo $?
+dnsip REALLY.WILD.TEST5 | tr ' ' '\012' | sort
+echo $?
+dnsq 255 PICK.TEST5 127.555.0.2
+echo $?
+dnsq 255 PICK2.TEST5 127.555.0.2
+echo $?
+dnsq 255 PICK3.TEST5 127.555.0.2 | sort
+echo $?
+dnsq 255 REALLY.WILD.TEST5 127.555.0.2 | sort
+echo $?
+
+echo '--- tinydns-get handles differentiation'
+( cd rts-tmp/service/tinydns/root
+ tinydns-get 255 PICK.TEST5 1.2.3.4; echo $?
+ tinydns-get 255 PICK2.TEST5 1.2.3.4; echo $?
+ tinydns-get 255 PICK3.TEST5 1.2.3.4 | sort; echo $?
+ tinydns-get 255 REALLY.WILD.TEST5 1.2.3.4 | sort; echo $?
+ tinydns-get 255 PICK.TEST5 127.555.0.4; echo $?
+ tinydns-get 255 PICK2.TEST5 127.555.0.4; echo $?
+ tinydns-get 255 PICK3.TEST5 127.555.0.4 | sort; echo $?
+ tinydns-get 255 REALLY.WILD.TEST5 127.555.0.4 | sort; echo $?
+)
+
+echo '--- pickdns works'
+dnsip PICK.TEST
+echo $?
+dnsip PICK2.TEST
+echo $?
+dnsq 255 PICK.TEST 127.555.0.3
+echo $?
+
+echo '--- pickdns answers MX'
+dnsmx PICK.TEST
+echo $?
+
+echo '--- pickdns rejects queries for unknown information'
+dnsq 255 PICK11.TEST 127.555.0.3
+echo $?
+dnsq Txt PICK2.TEST 127.555.0.3
+echo $?
+
+echo '--- axfrdns rejects unauthorized transfer attempts'
+tcpclient -RHl0 127.43.0.2 53 axfr-get TEST3 rts-tmp/zone rts-tmp/zone.tmp
+echo $?
+tcpclient -RHl0 127.43.0.2 53 axfr-get TEST4 rts-tmp/zone2 rts-tmp/zone2.tmp
+echo $?
+
+echo '--- axfrdns works'
+tcpclient -RHl0 127.43.0.2 53 axfr-get TEST rts-tmp/zone rts-tmp/zone.tmp
+echo $?
+cat rts-tmp/zone
+
+echo '--- axfrdns handles differentiation'
+tcpclient -RHl0 -i 127.43.0.2 127.43.0.2 53 axfr-get TEST5 rts-tmp/zone5 rts-tmp/zone5.tmp
+echo $?
+cat rts-tmp/zone5
+rm rts-tmp/zone5
+tcpclient -RHl0 -i 127.43.0.3 127.43.0.2 53 axfr-get TEST5 rts-tmp/zone5 rts-tmp/zone5.tmp
+echo $?
+cat rts-tmp/zone5
+rm rts-tmp/zone5
+tcpclient -RHl0 -i 127.43.0.4 127.43.0.2 53 axfr-get TEST5 rts-tmp/zone5 rts-tmp/zone5.tmp
+echo $?
+cat rts-tmp/zone5
+rm rts-tmp/zone5
+tcpclient -RHl0 -i 127.43.0.5 127.43.0.2 53 axfr-get TEST5 rts-tmp/zone5 rts-tmp/zone5.tmp
+echo $?
+cat rts-tmp/zone5
+
+echo '--- axfrdns gives authoritative answers'
+dnsq any Test4 127.43.0.2
+echo $?
+
+echo '--- axfrdns handles size-1000 TXT records'
+dnsq any BIG.TEST 127.43.0.2
+echo $?
+
+echo '--- axfr-get handles zones with wildcards'
+tcpclient -RHl0 127.43.0.2 53 axfr-get TEST2 rts-tmp/zone2 rts-tmp/zone2.tmp
+echo $?
+cat rts-tmp/zone2
+
+
+svc -dx $service/dnscache
+svc -dx $service/tinydns
+svc -dx $service/pickdns
+svc -dx $service/walldns
+svc -dx $service/rbldns
+svc -dx $service/axfrdns
+
+svc -dx $service/dnscache/log
+svc -dx $service/tinydns/log
+svc -dx $service/pickdns/log
+svc -dx $service/walldns/log
+svc -dx $service/rbldns/log
+svc -dx $service/axfrdns/log
+
+wait
+wait
+wait
+wait
+wait
+wait
+
+exit 0