Specification of test zones for the CNAME functions in Recursor.pm
Table of contents
- Background
- Test scenarios
- Test zone names
- Test scenarios and message tags
- Zone setup for test scenarios
Background
See the test zone README file which is for test case base test zones. Since this specifies test zones for code it is not fully applicable.
Test scenarios
The purpose of the test scenarios is to cover all reasonable contexts where the code should be tested.
Test zone name
The test zone for these scenarios is cname.recursor.engine.xa
. Subdomain and
subzones are created. The names are given in section
"Zone setup for test scenarios" below.
Test scenarios
Scenario name | Expected output |
---|---|
GOOD-CNAME-1 | True and tags CNAME_START , CNAME_FOLLOWED_IN_ZONE |
GOOD-CNAME-2 | True and tags CNAME_START , CNAME_FOLLOWED_IN_ZONE |
GOOD-CNAME-CHAIN | True and tags CNAME_START , CNAME_FOLLOWED_IN_ZONE |
GOOD-CNAME-OUT-OF-ZONE | True and tags CNAME_START , CNAME_FOLLOWED_OUT_OF_ZONE |
NXDOMAIN-VIA-CNAME | True and tags CNAME_START , CNAME_FOLLOWED_OUT_OF_ZONE |
NODATA-VIA-CNAME | True and tags CNAME_START , CNAME_FOLLOWED_OUT_OF_ZONE |
MULT-CNAME | Undefined and tags CNAME_START , CNAME_MULTIPLE_FOR_NAME |
LOOPED-CNAME-IN-ZONE-1 | Undefined and tags CNAME_START , CNAME_LOOP_INNER |
LOOPED-CNAME-IN-ZONE-2 | Undefined and tags CNAME_START , CNAME_LOOP_INNER |
LOOPED-CNAME-IN-ZONE-3 | Undefined and tags CNAME_START , CNAME_LOOP_INNER |
LOOPED-CNAME-OUT-OF-ZONE | Undefined and tags CNAME_START , CNAME_LOOP_OUTER |
TOO-LONG-CNAME-CHAIN | Undefined and tags CNAME_START , CNAME_RECORDS_TOO_MANY |
TARGET-NO-MATCH-CNAME | Undefined and tags CNAME_START , CNAME_NO_MATCH |
BROKEN-CNAME-CHAIN | Undefined and tags CNAME_START , CNAME_RECORDS_CHAIN_BROKEN |
WRONG-CNAME-OWNER-NAME | False and no tags |
EXTRA-CNAME-IN-ANSWER | False and no tags |
Zone setup for test scenarios
Assumptions for the scenario specifications, unless stated otherwise for the specific scenario:
- The
cname.recursor.engine.xa
zone is used for all scenarios. - Relative names are under
cname.recursor.engine.xa.
. - The query name is given by the scenario.
- Query type is assumed to be
A
. - In the zone, the query name always has a
CNAME
record. - The zone is set up on one NS, ns1.
- The RCODE Name in the response is NoError.
GOOD-CNAME-1
The query name will resolve to one A
record via one CNAME.
- Query name: "good-cname-1.cname.recursor.engine.xa"
- To be found in the answer section:
good-cname-1 CNAME good-cname-1-target
good-cname-1-target A 127.0.0.1
GOOD-CNAME-2
The query name will resolve to two A
record via one CNAME.
- Query name: "good-cname-2.cname.recursor.engine.xa"
- To be found in the answer section:
good-cname-2 CNAME good-cname-2-target
good-cname-2-target A 127.0.0.1
good-cname-2-target A 127.0.0.2
GOOD-CNAME-CHAIN
The query name will resolve to two A
record via three CNAME.
- Query name: "good-cname-chain.cname.recursor.engine.xa"
- To be found in the answer section:
good-cname-chain CNAME good-cname-chain-two
good-cname-chain-two CNAME good-cname-chain-three
good-cname-chain-three CNAME good-cname-chain-target
good-cname-chain-target A 127.0.0.1
GOOD-CNAME-OUT-OF-ZONE
The query name will resolve to an A
record via a CNAME in the zone with a
target that points at a subzone, and a delegation to that sub zone.
-
For all queries
- The two zones,
cname.recursor.engine.xa
andgoodsub.cname.recursor.engine.xa
, are hosted on different IP addresses. - "x", "y" and "z" in the IP addresses in the configuration below are to be set in the configuration of the test zones.
- The two zones,
-
Query name: "good-cname-out-of-zone.cname.recursor.engine.xa"
- Servers: NS of
cname.recursor.engine.xa
. - Answer, authority and additional sections, respectively, to be found in the response:
- Servers: NS of
;; ANSWER SECTION:
good-cname-out-of-zone CNAME target.goodsub
;; AUTHORITY SECTION:
goodsub NS ns1.goodsub
;; ADDITIONAL SECTION:
ns1.goodsub A 127.x.y.z
ns1.goodsub AAAA fda1:b2:c3::127:x:y:z
- Query name: "target.goodsub.cname.recursor.engine.xa"
- Servers: NS of
goodsub.cname.recursor.engine.xa
. - To be found in the answer section:
- Servers: NS of
target.goodsub A 127.0.0.1
NXDOMAIN-VIA-CNAME
The query name exists, but as CNAME record. The target name of CNAME does not exist.
- Query name: "nxdomain-via-cname.cname.recursor.engine.xa"
- The RCODE Name in the response is NxDomain.
- The target of the CNAME,
nxdomain-via-cname-target
does not exist in the zone and is not delegated. - SOA of "cname.recursor.engine.xa" to be found in authority section.
- To be found in the answer section:
nxdomain-via-cname CNAME nxdomain-via-cname-target
NODATA-VIA-CNAME
The query name exists, but as CNAME record. The target name of CNAME exists, but not with any A record.
- Query name: "nodata-via-cname.cname.recursor.engine.xa"
- The target of the CNAME,
nodata-via-cname-target
, exists in the zone but has neitherA
orCNAME
record, and is not delegated. - SOA of "cname.recursor.engine.xa" to be found in authority section.
- To be found in the answer section:
- The target of the CNAME,
nodata-via-cname CNAME nodata-via-cname-target
MULT-CNAME
The query name exists, but as CNAME, as two CNAME records.
- Query name: "mult-cname.cname.recursor.engine.xa"
- To be found in the answer section:
mult-cname CNAME mult-cname-target-1
mult-cname CNAME mult-cname-target-2
mult-cname-target-1 A 127.0.0.1
mult-cname-target-2 A 127.0.0.2
LOOPED-CNAME-IN-ZONE-1
The query name will point at a CNAME record with the same target as owner name.
- Query name: "looped-cname-in-zone-1.cname.recursor.engine.xa"
- To be found in the answer section:
looped-cname-in-zone-1 CNAME looped-cname-in-zone-1
LOOPED-CNAME-IN-ZONE-2
The query name will point at a CNAME, which points at a second CNAME, which points to a third CNAME whose target name is the same as the owner name of the second CNAME.
- Query name: "looped-cname-in-zone-2.cname.recursor.engine.xa"
- To be found in the answer section:
looped-cname-in-zone-2 CNAME looped-cname-in-zone-2-a
looped-cname-in-zone-2-a CNAME looped-cname-in-zone-2-b
looped-cname-in-zone-2-b CNAME looped-cname-in-zone-2-a
LOOPED-CNAME-IN-ZONE-3
The query name will point at a CNAME, which points at a second CNAME whose target name is the same as the owner name of the first CNAME.
- Query name: "looped-cname-in-zone-3.cname.recursor.engine.xa"
- To be found in the answer section:
looped-cname-in-zone-3 CNAME looped-cname-in-zone-3-next
looped-cname-in-zone-3-next CNAME looped-cname-in-zone-3
LOOPED-CNAME-OUT-OF-ZONE
The query name will point at a CNAME record, but in a sub zone, and the target name of the CNAME record will point at another CNAME record in another sub zone, and the target name of the second CNAME record will point at the first.
-
For all four queries
- The three zones
cname.recursor.engine.xa
,sub2.cname.recursor.engine.xa
andsub3.cname.recursor.engine.xa
are hosted on different IP addresses. - "x", "y" and "z" in the IP addresses in the configuration below are to be set in the configuration of the test zones.
- The three zones
-
Query name: "looped-cname-out-of-zone.sub2.cname.recursor.engine.xa"
- Servers: NS of
cname.recursor.engine.xa
. - Authority and additional sections, respectively, to be found in the response:
- Servers: NS of
;; AUTHORITY SECTION:
sub2 NS ns1.sub2
;; ADDITIONAL SECTION:
ns1.sub2 A 127.x.y.z
ns1.sub2 AAAA fda1:b2:c3::127:x:y:z
- Query name: "looped-cname-out-of-zone.sub2.cname.recursor.engine.xa"
- Servers: NS of
sub2.cname.recursor.engine.xa
. - To be found in the answer section:
- Servers: NS of
looped-cname-out-of-zone.sub2 CNAME looped-cname-out-of-zone.sub3
- Query name: "looped-cname-out-of-zone.sub3.cname.recursor.engine.xa"
- Servers: NS of
cname.recursor.engine.xa
. - Relative names are under
cname.recursor.engine.xa.
. - Authority and additional sections, respectively, to be found in the response:
- Servers: NS of
;; AUTHORITY SECTION:
sub3 NS ns1.sub3
;; ADDITIONAL SECTION:
ns1.sub3 A 127.x.y.z
ns1.sub3 AAAA fda1:b2:c3::127:x:y:z
- Query name: "looped-cname-out-of-zone.sub3.cname.recursor.engine.xa"
- Servers: NS of
sub3.cname.recursor.engine.xa
. - To be found in the answer section:
- Servers: NS of
looped-cname-out-of-zone.sub3 CNAME looped-cname-out-of-zone.sub2
TOO-LONG-CNAME-CHAIN
The query name will resolve to one A
record via ten CNAME records which is
above the limit.
- Query name: "too-long-cname-chain.cname.recursor.engine.xa"
- To be found in the answer section:
too-long-cname-chain CNAME too-long-cname-chain-two
too-long-cname-chain-two CNAME too-long-cname-chain-three
too-long-cname-chain-three CNAME too-long-cname-chain-four
too-long-cname-chain-four CNAME too-long-cname-chain-five
too-long-cname-chain-five CNAME too-long-cname-chain-six
too-long-cname-chain-six CNAME too-long-cname-chain-seven
too-long-cname-chain-seven CNAME too-long-cname-chain-eight
too-long-cname-chain-eight CNAME too-long-cname-chain-nine
too-long-cname-chain-nine CNAME too-long-cname-chain-ten
too-long-cname-chain-ten CNAME too-long-cname-chain-target
too-long-cname-chain-target A 127.0.0.1
TARGET-NO-MATCH-CNAME
The CNAME target name does not match the owner name of the A
record.
- Query name: "target-no-match-cname.cname.recursor.engine.xa"
- To be found in the answer section:
target-no-match-cname CNAME target-no-match-cname-two
target-no-match-cname-target A 127.0.0.1
BROKEN-CNAME-CHAIN
The CNAME chain is broken between first and second CNAME records.
- Query name: "broken-cname-chain.cname.recursor.engine.xa"
- To be found in the answer section:
broken-cname-chain CNAME broken-cname-chain-two
broken-cname-chain-three CNAME broken-cname-chain-target
broken-cname-chain-target A 127.0.0.1
WRONG-CNAME-OWNER-NAME
The owner name of the CNAME in the response does not match query name.
- Query name: "wrong-cname-owner-name.cname.recursor.engine.xa"
- To be found in the answer section:
wrong-cname-owner-name-1 CNAME wrong-cname-owner-name-target
wrong-cname-owner-name-target A 127.0.0.1
EXTRA-CNAME-IN-ANSWER
There is an extra CNAME record with an owner name not matching the query name
besides the A
record matching query name.
- Query name: "extra-cname-in-answer.cname.recursor.engine.xa"
- To be found in the answer section:
extra-cname-in-answer A 127.0.0.1
extra-cname-in-answer-1 CNAME extra-cname-in-answer-2