Basic03 (basic03)
Status: Final
Purpose
- Detect the “broken but functional” case by probing
Arecords forwww.<child-zone>against delegation nameservers. - Provide a compatibility path when
Basic02failed but the domain can still answer basic web-style queries.
Preconditions And Inputs
- Preconditions:
- A
zone.Zoneis provided. - Delegation nameserver addresses can be loaded using
Method4.
- A
- Required inputs:
- Child zone name (
z.Name). - Derived query name
www.<child-zone>.
- Child zone name (
- Profile/config knobs that affect behavior:
net.ipv4: enables or disables IPv4Aprobes.net.ipv6: enables or disables IPv6Aprobes.resolver.defaults.parallel: controls per-test parallel nameserver probing.
Algorithm And Decision Flow
- In module orchestration (
basic.All):- If
Basic02emittedB02_AUTH_RESPONSE_SOA,Basic03function is skipped andHAS_NAMESERVER_NO_WWW_A_TESTis emitted. - Otherwise
Basic03function runs.
- If
Basic03function emitsTEST_CASE_START.- Build
queryName = "www." + child-zone. - Resolve nameserver targets with
Method4and probe each in parallel:- Emit transport enable/disable tags (
IPV4_*,IPV6_*) for rrtypeA. - Send
Aquery forqueryName. - If response has
ARR forqueryName, emitHAS_A_RECORDS; otherwise emitNO_A_RECORDS.
- Emit transport enable/disable tags (
- If no probed nameserver produced any response packet, emit
A_QUERY_NO_RESPONSES. - Emit
TEST_CASE_END.
Emitted Tags (Possible Set)
| Tag | Emitted when |
|---|---|
A_QUERY_NO_RESPONSES | No nameserver produced a response packet for A query to www.<child-zone>. |
HAS_A_RECORDS | A nameserver responded with at least one A RR for www.<child-zone>. |
HAS_NAMESERVER_NO_WWW_A_TEST | Module orchestration skipped Basic03 because Basic02 succeeded (B02_AUTH_RESPONSE_SOA). |
IPV4_DISABLED | IPv4 transport is disabled for A probe. |
IPV4_ENABLED | IPv4 transport is enabled for A probe. |
IPV6_DISABLED | IPv6 transport is disabled for A probe. |
IPV6_ENABLED | IPv6 transport is enabled for A probe. |
NO_A_RECORDS | Nameserver responded but no A RR matched www.<child-zone>. |
TEST_CASE_END | Testcase completion marker is emitted. |
TEST_CASE_START | Testcase start marker is emitted. |
Tag Arguments
| Tag | Argument key | Type | Meaning |
|---|---|---|---|
A_QUERY_NO_RESPONSES | - | - | No arguments. |
HAS_A_RECORDS | ns | string | Nameserver identity (ns name only; use address for IP) that returned A records. |
HAS_A_RECORDS | address | string | Nameserver IP address for the same endpoint. |
HAS_A_RECORDS | domain | string | Queried name (www.<child-zone>). |
HAS_NAMESERVER_NO_WWW_A_TEST | zname | string | Child zone name for skipped Basic03 probing path. |
IPV4_DISABLED | ns | string | Nameserver identity (ns name only; use address for IP). |
IPV4_DISABLED | address | string | Nameserver IP address for the same endpoint. |
IPV4_DISABLED | rrtype | string | rrtype skipped (A). |
IPV4_ENABLED | ns | string | Nameserver identity (ns name only; use address for IP). |
IPV4_ENABLED | address | string | Nameserver IP address for the same endpoint. |
IPV4_ENABLED | rrtype | string | rrtype queried (A). |
IPV6_DISABLED | ns | string | Nameserver identity (ns name only; use address for IP). |
IPV6_DISABLED | address | string | Nameserver IP address for the same endpoint. |
IPV6_DISABLED | rrtype | string | rrtype skipped (A). |
IPV6_ENABLED | ns | string | Nameserver identity (ns name only; use address for IP). |
IPV6_ENABLED | address | string | Nameserver IP address for the same endpoint. |
IPV6_ENABLED | rrtype | string | rrtype queried (A). |
NO_A_RECORDS | ns | string | Nameserver identity (ns name only; use address for IP) with no matching A data. |
NO_A_RECORDS | address | string | Nameserver IP address for the same endpoint. |
NO_A_RECORDS | domain | string | Queried name (www.<child-zone>). |
TEST_CASE_END | testcase | string | Testcase display name (Basic03). |
TEST_CASE_START | testcase | string | Testcase display name (Basic03). |
Severity Levels Per Tag
| Tag | Level | Notes |
|---|---|---|
A_QUERY_NO_RESPONSES | INFO | Default from share/profile.json. |
HAS_A_RECORDS | ERROR | Default from share/profile.json. |
HAS_NAMESERVER_NO_WWW_A_TEST | INFO | Default from share/profile.json. |
IPV4_DISABLED | DEBUG | Default from share/profile.json. |
IPV4_ENABLED | DEBUG | Default from share/profile.json. |
IPV6_DISABLED | DEBUG | Default from share/profile.json. |
IPV6_ENABLED | DEBUG | Default from share/profile.json. |
NO_A_RECORDS | DEBUG | Default from share/profile.json. |
TEST_CASE_END | DEBUG | Default from share/profile.json. |
TEST_CASE_START | DEBUG | Default from share/profile.json. |
Differences From Upstream
- Upstream reference:
basic03.md - Differences (Upstream vs Gonemaster):
- Upstream: does not define a skip marker for this path. Gonemaster: emits
HAS_NAMESERVER_NO_WWW_A_TESTwhenBasic03is skipped becauseBasic02succeeded. - Upstream: outcome text says testcase fails when no response contains an
Arecord. Gonemaster: default levels makeHAS_A_RECORDSthe error path and keepNO_A_RECORDSatDEBUG.
- Upstream: does not define a skip marker for this path. Gonemaster: emits
- Potential upstream report:
yes
- If yes, include:
- Upstream expected behavior:
Basic03outcome text describes failure when noAevidence is found. - Gonemaster observed behavior: severity contract treats
HAS_A_RECORDSas the strong signal (ERROR) andNO_A_RECORDSas non-failing (DEBUGdefault). - evidence:
engine/test/basic/basic.go(All,Basic03),share/profile.json(test_levels.BASIC). - report status:
not filed
- Upstream expected behavior:
Edge Cases And Limitations
- If
Method4yields no nameserver addresses, function path emits only testcase markers unless orchestration emittedHAS_NAMESERVER_NO_WWW_A_TEST. A_QUERY_NO_RESPONSESis emitted only when there are zero response packets; responses withoutAproduceNO_A_RECORDSinstead.- Per-nameserver output ordering is deterministic after parallel execution due runner merge order.