Consistency04 (consistency04)

Status: Final

Purpose

  • Check NS RRset consistency across nameservers for the tested zone.

Preconditions And Inputs

  • Preconditions:
    • A zone.Zone object is available.
  • Required inputs:
    • Nameserver list from methods.Method4 and methods.Method5.
    • NS answers from queried nameservers.
  • Profile/config knobs that affect behavior:
    • net.ipv4 and net.ipv6: disabled transports are skipped per nameserver.
    • resolver.defaults.parallel: per-nameserver query task parallelism.

Algorithm And Decision Flow

  1. Emit TEST_CASE_START.
  2. Build deduplicated nameserver list from Method4+Method5 by ns.String().
  3. For each nameserver (parallelized):
    • If transport is disabled, emit IPV4_DISABLED or IPV6_DISABLED for rrtype NS and skip.
    • Query NS for zone apex.
    • No response message -> emit NO_RESPONSE.
    • Response without usable NS records for zone apex -> emit NO_RESPONSE_NS_QUERY.
    • Otherwise extract lowercase NS targets, sort them, and store as one NS-set key for that nameserver.
  4. If exactly one NS-set key exists, emit ONE_NS_SET.
  5. If multiple NS-set keys exist:
    • Emit MULTIPLE_NS_SET.
    • Emit NS_SET once per NS-set key with the NS target set (ns_set_servers) and contributing nameserver endpoints (servers).
  6. Emit TEST_CASE_END.

Emitted Tags (Possible Set)

TagEmitted when
IPV4_DISABLEDIPv4 transport is disabled for a queried nameserver/rrtype.
IPV6_DISABLEDIPv6 transport is disabled for a queried nameserver/rrtype.
MULTIPLE_NS_SETAt least two distinct NS target sets were observed.
NO_RESPONSENS query had no response message from a nameserver.
NO_RESPONSE_NS_QUERYResponse did not contain usable NS records for zone apex.
NS_SETA specific NS target set and associated nameservers are reported.
ONE_NS_SETExactly one NS target set was observed.
TEST_CASE_ENDTestcase completion marker is emitted.
TEST_CASE_STARTTestcase start marker is emitted.

Tag Arguments

TagArgument keyTypeMeaning
IPV4_DISABLEDnsstringNameserver identity (ns name only; use address for IP) skipped on IPv4.
IPV4_DISABLEDaddressstringNameserver IP address for the same endpoint.
IPV4_DISABLEDrrtypestringrrtype skipped (NS).
IPV6_DISABLEDnsstringNameserver identity (ns name only; use address for IP) skipped on IPv6.
IPV6_DISABLEDaddressstringNameserver IP address for the same endpoint.
IPV6_DISABLEDrrtypestringrrtype skipped (NS).
MULTIPLE_NS_SETcountintNumber of distinct NS target sets observed.
NO_RESPONSEnsstringNameserver identity (ns name only; use address for IP) with no response.
NO_RESPONSEaddressstringNameserver IP address for the same endpoint.
NO_RESPONSE_NS_QUERYnsstringNameserver identity (ns name only; use address for IP) without usable NS answer.
NO_RESPONSE_NS_QUERYaddressstringNameserver IP address for the same endpoint.
NS_SETns_set_serversarray<object>Structured NS target names in this set as {ns} items.
NS_SETserversarray<object>Structured nameserver identities ({ns,address} object) returning this set.
ONE_NS_SETserversarray<object>Structured single observed NS target set as {ns} items.
TEST_CASE_ENDtestcasestringTestcase display name (Consistency04).
TEST_CASE_STARTtestcasestringTestcase display name (Consistency04).

Severity Levels Per Tag

TagLevelNotes
IPV4_DISABLEDDEBUGDefault from share/profile.json (test_levels.CONSISTENCY).
IPV6_DISABLEDDEBUGDefault from share/profile.json (test_levels.CONSISTENCY).
MULTIPLE_NS_SETNOTICEDefault from share/profile.json (test_levels.CONSISTENCY).
NO_RESPONSEDEBUGDefault from share/profile.json (test_levels.CONSISTENCY).
NO_RESPONSE_NS_QUERYDEBUGDefault from share/profile.json (test_levels.CONSISTENCY).
NS_SETINFODefault from share/profile.json (test_levels.CONSISTENCY).
ONE_NS_SETINFODefault from share/profile.json (test_levels.CONSISTENCY).
TEST_CASE_ENDDEBUGDefault from share/profile.json (test_levels.CONSISTENCY).
TEST_CASE_STARTDEBUGDefault from share/profile.json (test_levels.CONSISTENCY).

Differences From Upstream

  • Upstream reference: consistency04.md
  • Differences (Upstream vs Gonemaster):
    • Upstream: does not explicitly define this detail. Gonemaster: Equality is based on sorted NS target names only; TTL/class/owner equality is not compared as separate criteria.
    • Upstream: does not explicitly define this detail. Gonemaster: Per-query transport debug tags (IPV4_DISABLED, IPV6_DISABLED) are emitted when transport is disabled.
  • Potential upstream report:
    • no

Edge Cases And Limitations

  • If no usable NS set is obtained, neither ONE_NS_SET nor MULTIPLE_NS_SET is emitted.
  • servers ordering in NS_SET follows nameserver processing order.