Tests todo: A - SERVFAIL - should return empty response, ra 0 A - NXDOMAIN - should return SOA A - NOERROR - should return A record - or delegated NS record Record delegated to self should return SOA record rather than NS delegation Casing should match on question section, always. Casing should match on other sections if a direct match? (not required, but efficient for compression pointers) - www.EXample.COm + example.com = EXample.COm - EXample.COm + www.example.com = www.EXample.COm - (this should be taken care of by compression pointer logic, once implemented) Send malformed packets (both as queries and as answers): - bad question count, answer count, etc - bad rdata (too long, too short) - proper packets, truncated - randomly twiddled bits - forward compression pointers - compression pointers to wrong bits (throw error on non-ascii / unsafe chars) Test that ANY queries return records of all types matching the domain Test that A queries only return A records, not others matching the domain Test that A queries for ANAME-enabled records (but no address) recurse (regardless of general recursion settings). * 0-anames.example.com * 1-aname.example.com * 2-anames.example.com Generally speaking test the cases of 0, 1, and 2 records of any given type (null case, single case, multi case) ``` port=65053 ns=localhost digcmd="node bin/dig.js" #digcmd="dig" ``` ``` # Serve: node bin/digd.js +norecurse -p $port --input sample/db.json ``` ``` # Sample Data: # no A records for out-delegated.example.com # two external NS records for delegted.example.com # zone example.com exists # Test: # should return NS records in AUTHORITY section, nothing else $digcmd @$ns -p $port A out-delegated.example.com node bin/dig.js @$ns -p $port ANY out-delegated.example.com # should return SOA records in AUTHORITY section, nothing else node bin/dig.js @$ns -p $port A in-delegated.example.com node bin/dig.js @$ns -p $port ANY in-delegated.example.com # should return NS records in ANSWER section, nothing else node bin/dig.js @$ns -p $port NS out-delegated.example.com node bin/dig.js @$ns -p $port NS in-delegated.example.com # Sample Data: # two A records for example.com # no NS records # Test: # should return records in ANSWER section, nothing else node bin/dig.js @$ns -p $port A example.com node bin/dig.js @$ns -p $port AAAA example.com node bin/dig.js @$ns -p $port MX example.com node bin/dig.js @$ns -p $port SRV example.com node bin/dig.js @$ns -p $port TXT example.com node bin/dig.js @$ns -p $port ANY example.com # should return SOA records in AUTHORITY section, nothing else node bin/dig.js @$ns -p $port A doesntexist.example.com node bin/dig.js @$ns -p $port NS doesntexist.example.com # Sample Data: # two A records for a.example.com # has **internal** NS records # Test: # should return record of correct type in ANSWER section, nothing else node bin/dig.js @$ns -p $port A a.example.com node bin/dig.js @$ns -p $port ANY a.example.com node bin/dig.js @$ns -p $port AAAA aaaa.example.com node bin/dig.js @$ns -p $port ANY aaaa.example.com node bin/dig.js @$ns -p $port MX mx.example.com node bin/dig.js @$ns -p $port ANY mx.example.com node bin/dig.js @$ns -p $port SRV srv.example.com node bin/dig.js @$ns -p $port ANY srv.example.com node bin/dig.js @$ns -p $port TXT txt.example.com node bin/dig.js @$ns -p $port ANY txt.example.com node bin/dig.js @$ns -p $port TXT mtxt.example.com node bin/dig.js @$ns -p $port ANY mtxt.example.com # should return SOA record in AUTHORITY section, nothing else node bin/dig.js @$ns -p $port A doesntexist.a.example.com # should return NS records in ANSWER section, nothing else node bin/dig.js @$ns -p $port NS a.example.com ```