Basic02 (basic02)

Status: Final

Purpose

  • Verify that the child zone has at least one working authoritative nameserver for SOA.
  • Classify non-working delegation nameservers into explicit failure categories.

Preconditions And Inputs

  • Preconditions:
    • A zone.Zone is provided.
    • Recursor and nameserver query path are available.
  • Required inputs:
    • Child zone name (z.Name).
    • Delegation NS names from methods.Method2.
    • Delegation NS addresses from methods.Method4 and fallback glue/recursive resolution path.
  • Profile/config knobs that affect behavior:
    • net.ipv4: enables or disables IPv4 SOA probes.
    • net.ipv6: enables or disables IPv6 SOA probes.
    • resolver.defaults.parallel: controls per-test parallel probing fanout.

Algorithm And Decision Flow

  1. Emit TEST_CASE_START.
  2. Load delegation NS names with Method2 and delegation NS address objects with Method4.
  3. If no NS names exist, emit B02_NO_DELEGATION, then emit TEST_CASE_END and return.
  4. If NS names exist but address objects are empty, attempt to populate from glue addresses and mark unresolved names as nsCantResolve.
  5. Probe each nameserver (parallelized) with SOA query to child zone:
    • Emit transport enable/disable tags (IPV4_*, IPV6_*) for rrtype SOA.
    • Classify each response as no response, unexpected rcode, not authoritative, broken answer, or authoritative SOA answer.
  6. If at least one authoritative SOA response exists, emit B02_AUTH_RESPONSE_SOA.
  7. Otherwise emit B02_NO_WORKING_NS, then emit detailed categories:
    • B02_NS_BROKEN
    • B02_NS_NOT_AUTH
    • B02_NS_NO_IP_ADDR
    • B02_NS_NO_RESPONSE
    • B02_UNEXPECTED_RCODE
  8. Emit TEST_CASE_END.

Emitted Tags (Possible Set)

TagEmitted when
B02_AUTH_RESPONSE_SOAAt least one nameserver returns authoritative SOA for child zone.
B02_NO_DELEGATIONNo delegation NS names are found.
B02_NO_WORKING_NSNo nameserver qualifies as authoritative SOA responder.
B02_NS_BROKENNameserver response is NOERROR+AA but lacks SOA answer for child name.
B02_NS_NOT_AUTHNameserver responds but AA is not set.
B02_NS_NO_IP_ADDRNameserver name could not be resolved into an IP address.
B02_NS_NO_RESPONSENameserver probe returns no response packet.
B02_UNEXPECTED_RCODENameserver response rcode is not NOERROR.
IPV4_DISABLEDIPv4 transport is disabled for SOA probe.
IPV4_ENABLEDIPv4 transport is enabled for SOA probe.
IPV6_DISABLEDIPv6 transport is disabled for SOA probe.
IPV6_ENABLEDIPv6 transport is enabled for SOA probe.
TEST_CASE_ENDTestcase completion marker is emitted.
TEST_CASE_STARTTestcase start marker is emitted.

Tag Arguments

TagArgument keyTypeMeaning
B02_AUTH_RESPONSE_SOAdomainstringChild zone name.
B02_AUTH_RESPONSE_SOAserversarray<object>Structured list of nameserver identities ({ns,address} object).
B02_NO_DELEGATIONdomainstringChild zone name without delegation.
B02_NO_WORKING_NSdomainstringChild zone name without working authoritative NS.
B02_NS_BROKENnsstringNameserver identity (ns name only; use address for IP) with broken SOA content.
B02_NS_BROKENaddressstringNameserver IP address for the same endpoint.
B02_NS_NOT_AUTHnsstringNameserver identity (ns name only; use address for IP) missing AA.
B02_NS_NOT_AUTHaddressstringNameserver IP address for the same endpoint.
B02_NS_NO_IP_ADDRnsnamestringNameserver owner name lacking resolved IP addresses.
B02_NS_NO_RESPONSEnsstringNameserver identity (ns name only; use address for IP) with no response.
B02_NS_NO_RESPONSEaddressstringNameserver IP address for the same endpoint.
B02_UNEXPECTED_RCODEnsstringNameserver identity (ns name only; use address for IP) returning unexpected rcode.
B02_UNEXPECTED_RCODEaddressstringNameserver IP address for the same endpoint.
B02_UNEXPECTED_RCODErcodestringObserved non-NOERROR rcode name.
IPV4_DISABLEDnsstringNameserver identity (ns name only; use address for IP).
IPV4_DISABLEDaddressstringNameserver IP address for the same endpoint.
IPV4_DISABLEDrrtypestringrrtype skipped (SOA).
IPV4_ENABLEDnsstringNameserver identity (ns name only; use address for IP).
IPV4_ENABLEDaddressstringNameserver IP address for the same endpoint.
IPV4_ENABLEDrrtypestringrrtype queried (SOA).
IPV6_DISABLEDnsstringNameserver identity (ns name only; use address for IP).
IPV6_DISABLEDaddressstringNameserver IP address for the same endpoint.
IPV6_DISABLEDrrtypestringrrtype skipped (SOA).
IPV6_ENABLEDnsstringNameserver identity (ns name only; use address for IP).
IPV6_ENABLEDaddressstringNameserver IP address for the same endpoint.
IPV6_ENABLEDrrtypestringrrtype queried (SOA).
TEST_CASE_ENDtestcasestringTestcase display name (Basic02).
TEST_CASE_STARTtestcasestringTestcase display name (Basic02).

Severity Levels Per Tag

TagLevelNotes
B02_AUTH_RESPONSE_SOAINFODefault from share/profile.json.
B02_NO_DELEGATIONCRITICALDefault from share/profile.json.
B02_NO_WORKING_NSCRITICALDefault from share/profile.json.
B02_NS_BROKENERRORDefault from share/profile.json.
B02_NS_NOT_AUTHERRORDefault from share/profile.json.
B02_NS_NO_IP_ADDRERRORDefault from share/profile.json.
B02_NS_NO_RESPONSEWARNINGDefault from share/profile.json.
B02_UNEXPECTED_RCODEERRORDefault from share/profile.json.
IPV4_DISABLEDDEBUGDefault from share/profile.json.
IPV4_ENABLEDDEBUGDefault from share/profile.json.
IPV6_DISABLEDDEBUGDefault from share/profile.json.
IPV6_ENABLEDDEBUGDefault from share/profile.json.
TEST_CASE_ENDDEBUGDefault from share/profile.json.
TEST_CASE_STARTDEBUGDefault from share/profile.json.

Differences From Upstream

  • Upstream reference: basic02.md
  • Differences (Upstream vs Gonemaster):
    • Upstream: summary focuses on B02-class outcome tags. Gonemaster: also emits explicit transport debug tags (IPV4_*, IPV6_*) during SOA probes.
    • Upstream: does not describe probe execution ordering details. Gonemaster: executes probes in parallel but keeps deterministic result ordering by task index.
  • Potential upstream report:
    • no

Edge Cases And Limitations

  • If Method2 returns names but Method4 has no resolved addresses, unresolved names are classified via B02_NS_NO_IP_ADDR.
  • If all probes are skipped due transport disable, testcase can still end in B02_NO_WORKING_NS.
  • Detailed error tags are emitted only when B02_NO_WORKING_NS is emitted.
  • Output ordering is deterministic after parallel execution because runner output is merged in task index order.