Consistency04 (consistency04)
Status: Final
Purpose
- Check NS RRset consistency across nameservers for the tested zone.
Preconditions And Inputs
- Preconditions:
- A
zone.Zoneobject is available.
- A
- Required inputs:
- Nameserver list from
methods.Method4andmethods.Method5. - NS answers from queried nameservers.
- Nameserver list from
- Profile/config knobs that affect behavior:
net.ipv4andnet.ipv6: disabled transports are skipped per nameserver.resolver.defaults.parallel: per-nameserver query task parallelism.
Algorithm And Decision Flow
- Emit
TEST_CASE_START. - Build deduplicated nameserver list from Method4+Method5 by
ns.String(). - For each nameserver (parallelized):
- If transport is disabled, emit
IPV4_DISABLEDorIPV6_DISABLEDfor rrtypeNSand 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.
- If transport is disabled, emit
- If exactly one NS-set key exists, emit
ONE_NS_SET. - If multiple NS-set keys exist:
- Emit
MULTIPLE_NS_SET. - Emit
NS_SETonce per NS-set key with the NS target set (ns_set_servers) and contributing nameserver endpoints (servers).
- Emit
- Emit
TEST_CASE_END.
Emitted Tags (Possible Set)
| Tag | Emitted when |
|---|---|
IPV4_DISABLED | IPv4 transport is disabled for a queried nameserver/rrtype. |
IPV6_DISABLED | IPv6 transport is disabled for a queried nameserver/rrtype. |
MULTIPLE_NS_SET | At least two distinct NS target sets were observed. |
NO_RESPONSE | NS query had no response message from a nameserver. |
NO_RESPONSE_NS_QUERY | Response did not contain usable NS records for zone apex. |
NS_SET | A specific NS target set and associated nameservers are reported. |
ONE_NS_SET | Exactly one NS target set was observed. |
TEST_CASE_END | Testcase completion marker is emitted. |
TEST_CASE_START | Testcase start marker is emitted. |
Tag Arguments
| Tag | Argument key | Type | Meaning |
|---|---|---|---|
IPV4_DISABLED | ns | string | Nameserver identity (ns name only; use address for IP) skipped on IPv4. |
IPV4_DISABLED | address | string | Nameserver IP address for the same endpoint. |
IPV4_DISABLED | rrtype | string | rrtype skipped (NS). |
IPV6_DISABLED | ns | string | Nameserver identity (ns name only; use address for IP) skipped on IPv6. |
IPV6_DISABLED | address | string | Nameserver IP address for the same endpoint. |
IPV6_DISABLED | rrtype | string | rrtype skipped (NS). |
MULTIPLE_NS_SET | count | int | Number of distinct NS target sets observed. |
NO_RESPONSE | ns | string | Nameserver identity (ns name only; use address for IP) with no response. |
NO_RESPONSE | address | string | Nameserver IP address for the same endpoint. |
NO_RESPONSE_NS_QUERY | ns | string | Nameserver identity (ns name only; use address for IP) without usable NS answer. |
NO_RESPONSE_NS_QUERY | address | string | Nameserver IP address for the same endpoint. |
NS_SET | ns_set_servers | array<object> | Structured NS target names in this set as {ns} items. |
NS_SET | servers | array<object> | Structured nameserver identities ({ns,address} object) returning this set. |
ONE_NS_SET | servers | array<object> | Structured single observed NS target set as {ns} items. |
TEST_CASE_END | testcase | string | Testcase display name (Consistency04). |
TEST_CASE_START | testcase | string | Testcase display name (Consistency04). |
Severity Levels Per Tag
| Tag | Level | Notes |
|---|---|---|
IPV4_DISABLED | DEBUG | Default from share/profile.json (test_levels.CONSISTENCY). |
IPV6_DISABLED | DEBUG | Default from share/profile.json (test_levels.CONSISTENCY). |
MULTIPLE_NS_SET | NOTICE | Default from share/profile.json (test_levels.CONSISTENCY). |
NO_RESPONSE | DEBUG | Default from share/profile.json (test_levels.CONSISTENCY). |
NO_RESPONSE_NS_QUERY | DEBUG | Default from share/profile.json (test_levels.CONSISTENCY). |
NS_SET | INFO | Default from share/profile.json (test_levels.CONSISTENCY). |
ONE_NS_SET | INFO | Default from share/profile.json (test_levels.CONSISTENCY). |
TEST_CASE_END | DEBUG | Default from share/profile.json (test_levels.CONSISTENCY). |
TEST_CASE_START | DEBUG | Default 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_SETnorMULTIPLE_NS_SETis emitted. serversordering inNS_SETfollows nameserver processing order.