# NAMESERVER05: Behaviour against AAAA query

## Test case identifier
**NAMESERVER05**

## Objective

Older implementations of authoritative name servers have shown different
misbehaviours trying to answer queries for AAAA records, as described in
[RFC 4074]. This test case is intended to find out if the name server
authoritative for the domain shows any of these behaviours.


## Scope

It is assumed that *Child Zone* is also tested by [Connectivity01]. This test
case will set DEBUG level on messages for non-responsive name servers.


## Inputs

* "Child Zone" - The domain name to be tested.


## Ordered description of steps to be taken to execute the test case

1. Create an A query for the apex of the *Child Zone*.

2. Create a AAAA query for the apex of the *Child Zone*.

3. Create an empty set "AAAA OK".

4. Retrieve all name server IP addresses for the
   *Child Zone* using [Method4] and [Method5] ("NS IP").

5. For each name server IP address in *NS IP* do:

   1. Send the A query over UDP to the name server IP.
   2. If no DNS response is returned, then output *[NO_RESPONSE]*.
   3. Else, if DNS response does not have RCODE NOERROR, then output 
      *[A_UNEXPECTED_RCODE]*.
   4. Else, do:
      1. Send the AAAA query over UDP to the name server IP.
      2. If no DNS response is returned, then output *[AAAA_QUERY_DROPPED]*.
      3. Else, if the RCODE of the response is not NOERROR, then output
         *[AAAA_UNEXPECTED_RCODE]*.
      4. Else, if the answer section contains an AAAA record with incorrect
         RDATA length (e.g. 4 instead of 16 octets), then output
         *[AAAA_BAD_RDATA]*.
      5. Else, add the name server IP to *AAAA OK*.

6. If *AAAA OK* is non-empty and no messages *[AAAA_QUERY_DROPPED]*,
   *[AAAA_UNEXPECTED_RCODE]* or *[AAAA_BAD_RDATA]* have been outputted for any
   name server IP, then output *[AAAA_WELL_PROCESSED]*.


## Outcome(s)

The outcome of this Test Case is "fail" if there is at least one message
with the severity level *ERROR* or *CRITICAL*.

The outcome of this Test Case is "warning" if there is at least one message
with the severity level *WARNING*, but no message with severity level
*ERROR* or *CRITICAL*.

In other cases the outcome of this Test Case is "pass".

Message                       | Default severity level
:-----------------------------|:-----------------------------------
AAAA_BAD_RDATA                | ERROR
AAAA_QUERY_DROPPED            | ERROR
AAAA_UNEXPECTED_RCODE         | ERROR
AAAA_WELL_PROCESSED           | INFO
A_UNEXPECTED_RCODE            | WARNING
NO_RESPONSE                   | DEBUG


## Special procedural requirements

If either IPv4 or IPv6 transport is disabled, ignore the evaluation of the
result of any test using this transport protocol. Log a message reporting
on the ignored result.


## Intercase dependencies

None.


[AAAA_BAD_RDATA]:        #outcomes
[AAAA_QUERY_DROPPED]:    #outcomes
[AAAA_UNEXPECTED_RCODE]: #outcomes
[AAAA_WELL_PROCESSED]:   #outcomes
[A_UNEXPECTED_RCODE]:    #outcomes
[Connectivity01]:        ../Connectivity-TP/connectivity01.md
[Method4]:               ../Methods.md#method-4-obtain-glue-address-records-from-parent
[Method5]:               ../Methods.md#method-5-obtain-the-name-server-address-records-from-child
[NO_RESPONSE]:           #outcomes
[RFC 4074]:              https://datatracker.ietf.org/doc/html/rfc4074




