Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
C
Coredns
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Railgun
Coredns
Commits
892c15d0
Commit
892c15d0
authored
Mar 23, 2016
by
Miek Gieben
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Test cleanups; tests were working, broke them again
parent
ba72fe14
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
228 additions
and
248 deletions
+228
-248
middleware/etcd/lookup.go
middleware/etcd/lookup.go
+1
-1
middleware/etcd/lookup_test.go
middleware/etcd/lookup_test.go
+227
-247
No files found.
middleware/etcd/lookup.go
View file @
892c15d0
...
@@ -323,7 +323,7 @@ func (e Etcd) TXT(zone string, state middleware.State) (records []dns.RR, err er
...
@@ -323,7 +323,7 @@ func (e Etcd) TXT(zone string, state middleware.State) (records []dns.RR, err er
// synthesis a SOA Record.
// synthesis a SOA Record.
func
SOA
(
zone
string
)
*
dns
.
SOA
{
func
SOA
(
zone
string
)
*
dns
.
SOA
{
return
nil
return
&
dns
.
SOA
{}
}
}
func
isDuplicateCNAME
(
r
*
dns
.
CNAME
,
records
[]
dns
.
RR
)
bool
{
func
isDuplicateCNAME
(
r
*
dns
.
CNAME
,
records
[]
dns
.
RR
)
bool
{
...
...
middleware/etcd/lookup_test.go
View file @
892c15d0
...
@@ -25,20 +25,20 @@ var (
...
@@ -25,20 +25,20 @@ var (
)
)
func
init
()
{
func
init
()
{
ctx
=
context
.
TODO
()
etcdCfg
:=
etcdc
.
Config
{
Endpoints
:
[]
string
{
"http://localhost:2379"
},
}
cli
,
_
:=
etcdc
.
New
(
etcdCfg
)
etc
=
Etcd
{
etc
=
Etcd
{
Proxy
:
proxy
.
New
([]
string
{
"8.8.8.8:53"
}),
Proxy
:
proxy
.
New
([]
string
{
"8.8.8.8:53"
}),
PathPrefix
:
"skydns"
,
PathPrefix
:
"skydns"
,
Ctx
:
context
.
Background
(),
Ctx
:
context
.
Background
(),
Inflight
:
&
singleflight
.
Group
{},
Inflight
:
&
singleflight
.
Group
{},
Zones
:
[]
string
{
"skydns.test."
},
Zones
:
[]
string
{
"skydns.test."
},
Client
:
etcdc
.
NewKeysAPI
(
cli
),
}
}
etcdCfg
:=
etcdc
.
Config
{
Endpoints
:
[]
string
{
"http://localhost:2379"
},
}
cli
,
_
:=
etcdc
.
New
(
etcdCfg
)
client
=
etcdc
.
NewKeysAPI
(
cli
)
ctx
=
context
.
TODO
()
}
}
func
set
(
t
*
testing
.
T
,
e
Etcd
,
k
string
,
ttl
time
.
Duration
,
m
*
msg
.
Service
)
{
func
set
(
t
*
testing
.
T
,
e
Etcd
,
k
string
,
ttl
time
.
Duration
,
m
*
msg
.
Service
)
{
...
@@ -61,7 +61,7 @@ func (p rrSet) Len() int { return len(p) }
...
@@ -61,7 +61,7 @@ func (p rrSet) Len() int { return len(p) }
func
(
p
rrSet
)
Swap
(
i
,
j
int
)
{
p
[
i
],
p
[
j
]
=
p
[
j
],
p
[
i
]
}
func
(
p
rrSet
)
Swap
(
i
,
j
int
)
{
p
[
i
],
p
[
j
]
=
p
[
j
],
p
[
i
]
}
func
(
p
rrSet
)
Less
(
i
,
j
int
)
bool
{
return
p
[
i
]
.
String
()
<
p
[
j
]
.
String
()
}
func
(
p
rrSet
)
Less
(
i
,
j
int
)
bool
{
return
p
[
i
]
.
String
()
<
p
[
j
]
.
String
()
}
func
Test
DNS
(
t
*
testing
.
T
)
{
func
Test
Lookup
(
t
*
testing
.
T
)
{
for
_
,
serv
:=
range
services
{
for
_
,
serv
:=
range
services
{
set
(
t
,
etc
,
serv
.
Key
,
0
,
serv
)
set
(
t
,
etc
,
serv
.
Key
,
0
,
serv
)
defer
delete
(
t
,
etc
,
serv
.
Key
)
defer
delete
(
t
,
etc
,
serv
.
Key
)
...
@@ -97,108 +97,9 @@ func TestDNS(t *testing.T) {
...
@@ -97,108 +97,9 @@ func TestDNS(t *testing.T) {
t
.
Errorf
(
"additional for %q contained %d results, %d expected"
,
tc
.
Qname
,
len
(
resp
.
Extra
),
len
(
tc
.
Extra
))
t
.
Errorf
(
"additional for %q contained %d results, %d expected"
,
tc
.
Qname
,
len
(
resp
.
Extra
),
len
(
tc
.
Extra
))
}
}
for
i
,
a
:=
range
resp
.
Answer
{
checkSection
(
t
,
tc
,
resp
.
Answer
)
if
a
.
Header
()
.
Name
!=
tc
.
Answer
[
i
]
.
Header
()
.
Name
{
checkSection
(
t
,
tc
,
resp
.
Ns
)
t
.
Errorf
(
"answer %d should have a Header Name of %q, but has %q"
,
i
,
tc
.
Answer
[
i
]
.
Header
()
.
Name
,
a
.
Header
()
.
Name
)
checkSection
(
t
,
tc
,
resp
.
Extra
)
}
if
a
.
Header
()
.
Ttl
!=
tc
.
Answer
[
i
]
.
Header
()
.
Ttl
{
t
.
Errorf
(
"Answer %d should have a Header TTL of %d, but has %d"
,
i
,
tc
.
Answer
[
i
]
.
Header
()
.
Ttl
,
a
.
Header
()
.
Ttl
)
}
if
a
.
Header
()
.
Rrtype
!=
tc
.
Answer
[
i
]
.
Header
()
.
Rrtype
{
t
.
Errorf
(
"answer %d should have a header response type of %d, but has %d"
,
i
,
tc
.
Answer
[
i
]
.
Header
()
.
Rrtype
,
a
.
Header
()
.
Rrtype
)
}
switch
x
:=
a
.
(
type
)
{
case
*
dns
.
SRV
:
if
x
.
Priority
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Priority
{
t
.
Errorf
(
"answer %d should have a Priority of %d, but has %d"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Priority
,
x
.
Priority
)
}
if
x
.
Weight
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Weight
{
t
.
Errorf
(
"answer %d should have a Weight of %d, but has %d"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Weight
,
x
.
Weight
)
}
if
x
.
Port
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Port
{
t
.
Errorf
(
"answer %d should have a Port of %d, but has %d"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Port
,
x
.
Port
)
}
if
x
.
Target
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Target
{
t
.
Errorf
(
"answer %d should have a Target of %q, but has %q"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Target
,
x
.
Target
)
}
case
*
dns
.
A
:
if
x
.
A
.
String
()
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
A
)
.
A
.
String
()
{
t
.
Errorf
(
"answer %d should have a Address of %q, but has %q"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
A
)
.
A
.
String
(),
x
.
A
.
String
())
}
case
*
dns
.
AAAA
:
if
x
.
AAAA
.
String
()
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
AAAA
)
.
AAAA
.
String
()
{
t
.
Errorf
(
"answer %d should have a Address of %q, but has %q"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
AAAA
)
.
AAAA
.
String
(),
x
.
AAAA
.
String
())
}
case
*
dns
.
TXT
:
for
j
,
txt
:=
range
x
.
Txt
{
if
txt
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
TXT
)
.
Txt
[
j
]
{
t
.
Errorf
(
"answer %d should have a Txt of %q, but has %q"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
TXT
)
.
Txt
[
j
],
txt
)
}
}
case
*
dns
.
SOA
:
tt
:=
tc
.
Answer
[
i
]
.
(
*
dns
.
SOA
)
if
x
.
Ns
!=
tt
.
Ns
{
t
.
Errorf
(
"SOA nameserver should be %q, but is %q"
,
x
.
Ns
,
tt
.
Ns
)
}
case
*
dns
.
PTR
:
tt
:=
tc
.
Answer
[
i
]
.
(
*
dns
.
PTR
)
if
x
.
Ptr
!=
tt
.
Ptr
{
t
.
Errorf
(
"PTR ptr should be %q, but is %q"
,
x
.
Ptr
,
tt
.
Ptr
)
}
case
*
dns
.
CNAME
:
tt
:=
tc
.
Answer
[
i
]
.
(
*
dns
.
CNAME
)
if
x
.
Target
!=
tt
.
Target
{
t
.
Errorf
(
"CNAME target should be %q, but is %q"
,
x
.
Target
,
tt
.
Target
)
}
case
*
dns
.
MX
:
tt
:=
tc
.
Answer
[
i
]
.
(
*
dns
.
MX
)
if
x
.
Mx
!=
tt
.
Mx
{
t
.
Errorf
(
"MX Mx should be %q, but is %q"
,
x
.
Mx
,
tt
.
Mx
)
}
if
x
.
Preference
!=
tt
.
Preference
{
t
.
Errorf
(
"MX Preference should be %q, but is %q"
,
x
.
Preference
,
tt
.
Preference
)
}
}
}
for
i
,
n
:=
range
resp
.
Ns
{
switch
x
:=
n
.
(
type
)
{
case
*
dns
.
SOA
:
tt
:=
tc
.
Ns
[
i
]
.
(
*
dns
.
SOA
)
if
x
.
Ns
!=
tt
.
Ns
{
t
.
Errorf
(
"SOA nameserver should be %q, but is %q"
,
x
.
Ns
,
tt
.
Ns
)
}
case
*
dns
.
NS
:
tt
:=
tc
.
Ns
[
i
]
.
(
*
dns
.
NS
)
if
x
.
Ns
!=
tt
.
Ns
{
t
.
Errorf
(
"NS nameserver should be %q, but is %q"
,
x
.
Ns
,
tt
.
Ns
)
}
}
}
for
i
,
e
:=
range
resp
.
Extra
{
switch
x
:=
e
.
(
type
)
{
case
*
dns
.
A
:
if
x
.
A
.
String
()
!=
tc
.
Extra
[
i
]
.
(
*
dns
.
A
)
.
A
.
String
()
{
t
.
Errorf
(
"extra %d should have a address of %q, but has %q"
,
i
,
tc
.
Extra
[
i
]
.
(
*
dns
.
A
)
.
A
.
String
(),
x
.
A
.
String
())
}
case
*
dns
.
AAAA
:
if
x
.
AAAA
.
String
()
!=
tc
.
Extra
[
i
]
.
(
*
dns
.
AAAA
)
.
AAAA
.
String
()
{
t
.
Errorf
(
"extra %d should have a address of %q, but has %q"
,
i
,
tc
.
Extra
[
i
]
.
(
*
dns
.
AAAA
)
.
AAAA
.
String
(),
x
.
AAAA
.
String
())
}
case
*
dns
.
CNAME
:
tt
:=
tc
.
Extra
[
i
]
.
(
*
dns
.
CNAME
)
if
x
.
Target
!=
tt
.
Target
{
// Super super gross hack.
if
x
.
Target
==
"a.ipaddr.skydns.test."
&&
tt
.
Target
==
"b.ipaddr.skydns.test."
{
// These records are randomly choosen, either one is OK.
continue
}
t
.
Errorf
(
"CNAME target should be %q, but is %q"
,
x
.
Target
,
tt
.
Target
)
}
}
}
}
}
}
}
...
@@ -213,51 +114,54 @@ type dnsTestCase struct {
...
@@ -213,51 +114,54 @@ type dnsTestCase struct {
// Note the key is encoded as DNS name, while in "reality" it is a etcd path.
// Note the key is encoded as DNS name, while in "reality" it is a etcd path.
var
services
=
[]
*
msg
.
Service
{
var
services
=
[]
*
msg
.
Service
{
{
Host
:
"server1"
,
Port
:
8080
,
Key
:
"100.server1.development.region1.skydns.test."
},
{
Host
:
"server1"
,
Port
:
8080
,
Key
:
"a.server1.dev.region1.skydns.test."
},
{
Host
:
"server2"
,
Port
:
80
,
Key
:
"101.server2.production.region1.skydns.test."
},
{
Host
:
"10.0.0.1"
,
Port
:
8080
,
Key
:
"a.server1.prod.region1.skydns.test."
},
{
Host
:
"server4"
,
Port
:
80
,
Priority
:
333
,
Key
:
"102.server4.development.region6.skydns.test."
},
{
Host
:
"10.0.0.2"
,
Port
:
8080
,
Key
:
"b.server1.prod.region1.skydns.test."
},
{
Host
:
"::1"
,
Port
:
8080
,
Key
:
"b.server6.prod.region1.skydns.test."
},
{
Host
:
"server1"
,
Port
:
80
,
Priority
:
333
,
Key
:
"102.server4.dev.region6.skydns.test."
},
}
}
var
dnsTestCases
=
[]
dnsTestCase
{
var
dnsTestCases
=
[]
dnsTestCase
{
//
Full Name
Test
//
SRV
Test
{
{
Qname
:
"
100.server1.development
.region1.skydns.test."
,
Qtype
:
dns
.
TypeSRV
,
Qname
:
"
a.server1.dev
.region1.skydns.test."
,
Qtype
:
dns
.
TypeSRV
,
Answer
:
[]
dns
.
RR
{
newSRV
(
"
100.server1.development.region1.skydns.test. 36
00 SRV 10 100 8080 server1."
)},
Answer
:
[]
dns
.
RR
{
newSRV
(
"
a.server1.dev.region1.skydns.test. 3
00 SRV 10 100 8080 server1."
)},
},
},
// A
Record
Test
// A Test
{
{
Qname
:
"
104.server1.development
.region1.skydns.test."
,
Qtype
:
dns
.
TypeA
,
Qname
:
"
a.server1.prod
.region1.skydns.test."
,
Qtype
:
dns
.
TypeA
,
Answer
:
[]
dns
.
RR
{
newA
(
"
104.server1.development.region1.skydns.test. 36
00 A 10.0.0.1"
)},
Answer
:
[]
dns
.
RR
{
newA
(
"
a.server1.prod.region1.skydns.test. 3
00 A 10.0.0.1"
)},
},
},
//
Multiple A Record Test
//
SRV Test where target is IP address
{
{
Qname
:
"ipaddr.skydns.test."
,
Qtype
:
dns
.
TypeA
,
Qname
:
"a.server1.prod.region1.skydns.test."
,
Qtype
:
dns
.
TypeSRV
,
Answer
:
[]
dns
.
RR
{
Answer
:
[]
dns
.
RR
{
newSRV
(
"a.server1.prod.region1.skydns.test. 300 SRV 10 100 8080 a.server1.prod.region1.skydns.test."
)},
newA
(
"ipaddr.skydns.test. 3600 A 172.16.1.1"
),
Extra
:
[]
dns
.
RR
{
newA
(
"a.server1.prod.region1.skydns.test. 300 A 10.0.0.1"
)},
newA
(
"ipaddr.skydns.test. 3600 A 172.16.1.2"
),
},
},
},
// A
Record Test with SRV
// A
AAA Test
{
{
Qname
:
"104.server1.development.region1.skydns.test."
,
Qtype
:
dns
.
TypeSRV
,
Qname
:
"b.server6.prod.region1.skydns.test."
,
Qtype
:
dns
.
TypeAAAA
,
Answer
:
[]
dns
.
RR
{
newSRV
(
"104.server1.development.region1.skydns.test. 3600 SRV 10 100 0 104.server1.development.region1.skydns.test."
)},
Answer
:
[]
dns
.
RR
{
newAAAA
(
"b.server6.prod.region1.skydns.test. 300 AAAA ::1"
)},
Extra
:
[]
dns
.
RR
{
newA
(
"104.server1.development.region1.skydns.test. 3600 A 10.0.0.1"
)},
},
},
//
AAAA
A Record Test
//
Multiple
A Record Test
{
{
Qname
:
"105.server3.production.region2.skydns.test."
,
Qtype
:
dns
.
TypeAAAA
,
Qname
:
"server1.prod.region1.skydns.test."
,
Qtype
:
dns
.
TypeA
,
Answer
:
[]
dns
.
RR
{
newAAAA
(
"105.server3.production.region2.skydns.test. 3600 AAAA 2001::8:8:8:8"
)},
Answer
:
[]
dns
.
RR
{
newA
(
"server1.prod.region1.skydns.test. 300 A 10.0.0.1"
),
newA
(
"server1.prod.region1.skydns.test. 300 A 10.0.0.2"
),
},
},
},
/*
// Multi SRV with the same target, should be dedupped.
// Multi SRV with the same target, should be dedupped.
{
{
Qname: "*.cname2.skydns.test.", Qtype: dns.TypeSRV,
Qname: "*.cname2.skydns.test.", Qtype: dns.TypeSRV,
Answer: []dns.RR{
Answer: []dns.RR{
newSRV
(
"*.cname2.skydns.test. 36
00 IN SRV 10 100 0 www.miek.nl."
),
newSRV("*.cname2.skydns.test. 3
00 IN SRV 10 100 0 www.miek.nl."),
},
},
Extra: []dns.RR{
Extra: []dns.RR{
newA
(
"a.miek.nl. 36
00 IN A 139.162.196.78"
),
newA("a.miek.nl. 3
00 IN A 139.162.196.78"),
newAAAA
(
"a.miek.nl. 36
00 IN AAAA 2a01:7e00::f03c:91ff:fef1:6735"
),
newAAAA("a.miek.nl. 3
00 IN AAAA 2a01:7e00::f03c:91ff:fef1:6735"),
newCNAME
(
"www.miek.nl. 36
00 IN CNAME a.miek.nl."
),
newCNAME("www.miek.nl. 3
00 IN CNAME a.miek.nl."),
},
},
},
},
// CNAME (unresolvable internal name)
// CNAME (unresolvable internal name)
...
@@ -290,69 +194,69 @@ var dnsTestCases = []dnsTestCase{
...
@@ -290,69 +194,69 @@ var dnsTestCases = []dnsTestCase{
// Priority Test
// Priority Test
{
{
Qname: "region6.skydns.test.", Qtype: dns.TypeSRV,
Qname: "region6.skydns.test.", Qtype: dns.TypeSRV,
Answer
:
[]
dns
.
RR
{
newSRV
(
"region6.skydns.test. 36
00 SRV 333 100 80 server4."
)},
Answer: []dns.RR{newSRV("region6.skydns.test. 3
00 SRV 333 100 80 server4.")},
},
},
// Subdomain Test
// Subdomain Test
{
{
Qname: "region1.skydns.test.", Qtype: dns.TypeSRV,
Qname: "region1.skydns.test.", Qtype: dns.TypeSRV,
Answer: []dns.RR{
Answer: []dns.RR{
newSRV
(
"region1.skydns.test. 3600 SRV 10 33 0 104.server1.development
.region1.skydns.test."
),
newSRV("region1.skydns.test. 300 SRV 10 33 0 104.server1.dev
.region1.skydns.test."),
newSRV
(
"region1.skydns.test. 36
00 SRV 10 33 80 server2"
),
newSRV("region1.skydns.test. 3
00 SRV 10 33 80 server2"),
newSRV
(
"region1.skydns.test. 36
00 SRV 10 33 8080 server1."
)},
newSRV("region1.skydns.test. 3
00 SRV 10 33 8080 server1.")},
Extra
:
[]
dns
.
RR
{
newA
(
"104.server1.development.region1.skydns.test. 36
00 A 10.0.0.1"
)},
Extra: []dns.RR{newA("104.server1.dev.region1.skydns.test. 3
00 A 10.0.0.1")},
},
},
// Subdomain Weight Test
// Subdomain Weight Test
{
{
Qname: "region5.skydns.test.", Qtype: dns.TypeSRV,
Qname: "region5.skydns.test.", Qtype: dns.TypeSRV,
Answer: []dns.RR{
Answer: []dns.RR{
newSRV
(
"region5.skydns.test. 36
00 SRV 10 22 0 server2."
),
newSRV("region5.skydns.test. 3
00 SRV 10 22 0 server2."),
newSRV
(
"region5.skydns.test. 36
00 SRV 10 36 0 server1."
),
newSRV("region5.skydns.test. 3
00 SRV 10 36 0 server1."),
newSRV
(
"region5.skydns.test. 36
00 SRV 10 41 0 server3."
),
newSRV("region5.skydns.test. 3
00 SRV 10 41 0 server3."),
newSRV
(
"region5.skydns.test. 36
00 SRV 30 100 0 server4."
)},
newSRV("region5.skydns.test. 3
00 SRV 30 100 0 server4.")},
},
},
// Wildcard Test
// Wildcard Test
{
{
Qname: "*.region1.skydns.test.", Qtype: dns.TypeSRV,
Qname: "*.region1.skydns.test.", Qtype: dns.TypeSRV,
Answer: []dns.RR{
Answer: []dns.RR{
newSRV
(
"*.region1.skydns.test. 3600 SRV 10 33 0 104.server1.development
.region1.skydns.test."
),
newSRV("*.region1.skydns.test. 300 SRV 10 33 0 104.server1.dev
.region1.skydns.test."),
newSRV
(
"*.region1.skydns.test. 36
00 SRV 10 33 80 server2"
),
newSRV("*.region1.skydns.test. 3
00 SRV 10 33 80 server2"),
newSRV
(
"*.region1.skydns.test. 36
00 SRV 10 33 8080 server1."
)},
newSRV("*.region1.skydns.test. 3
00 SRV 10 33 8080 server1.")},
Extra
:
[]
dns
.
RR
{
newA
(
"104.server1.development.region1.skydns.test. 36
00 A 10.0.0.1"
)},
Extra: []dns.RR{newA("104.server1.dev.region1.skydns.test. 3
00 A 10.0.0.1")},
},
},
// Wildcard Test
// Wildcard Test
{
{
Qname
:
"production
.*.skydns.test."
,
Qtype
:
dns
.
TypeSRV
,
Qname: "prod
.*.skydns.test.", Qtype: dns.TypeSRV,
Answer: []dns.RR{
Answer: []dns.RR{
newSRV
(
"production.*.skydns.test. 3600 IN SRV 10 50 0 105.server3.production
.region2.skydns.test."
),
newSRV("prod.*.skydns.test. 300 IN SRV 10 50 0 105.server3.prod
.region2.skydns.test."),
newSRV
(
"production.*.skydns.test. 36
00 IN SRV 10 50 80 server2."
)},
newSRV("prod.*.skydns.test. 3
00 IN SRV 10 50 80 server2.")},
Extra
:
[]
dns
.
RR
{
newAAAA
(
"105.server3.production.region2.skydns.test. 36
00 IN AAAA 2001::8:8:8:8"
)},
Extra: []dns.RR{newAAAA("105.server3.prod.region2.skydns.test. 3
00 IN AAAA 2001::8:8:8:8")},
},
},
// Wildcard Test
// Wildcard Test
{
{
Qname
:
"production
.any.skydns.test."
,
Qtype
:
dns
.
TypeSRV
,
Qname: "prod
.any.skydns.test.", Qtype: dns.TypeSRV,
Answer: []dns.RR{
Answer: []dns.RR{
newSRV
(
"production.any.skydns.test. 3600 IN SRV 10 50 0 105.server3.production
.region2.skydns.test."
),
newSRV("prod.any.skydns.test. 300 IN SRV 10 50 0 105.server3.prod
.region2.skydns.test."),
newSRV
(
"production.any.skydns.test. 36
00 IN SRV 10 50 80 server2."
)},
newSRV("prod.any.skydns.test. 3
00 IN SRV 10 50 80 server2.")},
Extra
:
[]
dns
.
RR
{
newAAAA
(
"105.server3.production.region2.skydns.test. 36
00 IN AAAA 2001::8:8:8:8"
)},
Extra: []dns.RR{newAAAA("105.server3.prod.region2.skydns.test. 3
00 IN AAAA 2001::8:8:8:8")},
},
},
// NXDOMAIN Test
// NXDOMAIN Test
{
{
Qname: "doesnotexist.skydns.test.", Qtype: dns.TypeA,
Qname: "doesnotexist.skydns.test.", Qtype: dns.TypeA,
Rcode: dns.RcodeNameError,
Rcode: dns.RcodeNameError,
Ns: []dns.RR{
Ns: []dns.RR{
newSOA
(
"skydns.test. 36
00 SOA ns.dns.skydns.test. hostmaster.skydns.test. 0 0 0 0 0"
),
newSOA("skydns.test. 3
00 SOA ns.dns.skydns.test. hostmaster.skydns.test. 0 0 0 0 0"),
},
},
},
},
// NODATA Test
// NODATA Test
{
{
Qname
:
"104.server1.development
.region1.skydns.test."
,
Qtype
:
dns
.
TypeTXT
,
Qname: "104.server1.dev
.region1.skydns.test.", Qtype: dns.TypeTXT,
Ns
:
[]
dns
.
RR
{
newSOA
(
"skydns.test. 36
00 SOA ns.dns.skydns.test. hostmaster.skydns.test. 0 0 0 0 0"
)},
Ns: []dns.RR{newSOA("skydns.test. 3
00 SOA ns.dns.skydns.test. hostmaster.skydns.test. 0 0 0 0 0")},
},
},
// NODATA Test 2
// NODATA Test 2
{
{
Qname
:
"100.server1.development
.region1.skydns.test."
,
Qtype
:
dns
.
TypeA
,
Qname: "100.server1.dev
.region1.skydns.test.", Qtype: dns.TypeA,
Rcode: dns.RcodeSuccess,
Rcode: dns.RcodeSuccess,
Ns
:
[]
dns
.
RR
{
newSOA
(
"skydns.test. 36
00 SOA ns.dns.skydns.test. hostmaster.skydns.test. 0 0 0 0 0"
)},
Ns: []dns.RR{newSOA("skydns.test. 3
00 SOA ns.dns.skydns.test. hostmaster.skydns.test. 0 0 0 0 0")},
},
},
{
{
// One has group, the other has not... Include the non-group always.
// One has group, the other has not... Include the non-group always.
...
@@ -369,6 +273,7 @@ var dnsTestCases = []dnsTestCase{
...
@@ -369,6 +273,7 @@ var dnsTestCases = []dnsTestCase{
newA("dom1.skydns.test. IN A 127.0.0.1"),
newA("dom1.skydns.test. IN A 127.0.0.1"),
},
},
},
},
*/
}
}
func
newA
(
rr
string
)
*
dns
.
A
{
r
,
_
:=
dns
.
NewRR
(
rr
);
return
r
.
(
*
dns
.
A
)
}
func
newA
(
rr
string
)
*
dns
.
A
{
r
,
_
:=
dns
.
NewRR
(
rr
);
return
r
.
(
*
dns
.
A
)
}
...
@@ -380,3 +285,78 @@ func newNS(rr string) *dns.NS { r, _ := dns.NewRR(rr); return r.(*dns.NS)
...
@@ -380,3 +285,78 @@ func newNS(rr string) *dns.NS { r, _ := dns.NewRR(rr); return r.(*dns.NS)
func
newPTR
(
rr
string
)
*
dns
.
PTR
{
r
,
_
:=
dns
.
NewRR
(
rr
);
return
r
.
(
*
dns
.
PTR
)
}
func
newPTR
(
rr
string
)
*
dns
.
PTR
{
r
,
_
:=
dns
.
NewRR
(
rr
);
return
r
.
(
*
dns
.
PTR
)
}
func
newTXT
(
rr
string
)
*
dns
.
TXT
{
r
,
_
:=
dns
.
NewRR
(
rr
);
return
r
.
(
*
dns
.
TXT
)
}
func
newTXT
(
rr
string
)
*
dns
.
TXT
{
r
,
_
:=
dns
.
NewRR
(
rr
);
return
r
.
(
*
dns
.
TXT
)
}
func
newMX
(
rr
string
)
*
dns
.
MX
{
r
,
_
:=
dns
.
NewRR
(
rr
);
return
r
.
(
*
dns
.
MX
)
}
func
newMX
(
rr
string
)
*
dns
.
MX
{
r
,
_
:=
dns
.
NewRR
(
rr
);
return
r
.
(
*
dns
.
MX
)
}
func
checkSection
(
t
*
testing
.
T
,
tc
dnsTestCase
,
rr
[]
dns
.
RR
)
{
for
i
,
a
:=
range
rr
{
if
a
.
Header
()
.
Name
!=
tc
.
Answer
[
i
]
.
Header
()
.
Name
{
t
.
Errorf
(
"answer %d should have a Header Name of %q, but has %q"
,
i
,
tc
.
Answer
[
i
]
.
Header
()
.
Name
,
a
.
Header
()
.
Name
)
continue
}
if
a
.
Header
()
.
Ttl
!=
tc
.
Answer
[
i
]
.
Header
()
.
Ttl
{
t
.
Errorf
(
"Answer %d should have a Header TTL of %d, but has %d"
,
i
,
tc
.
Answer
[
i
]
.
Header
()
.
Ttl
,
a
.
Header
()
.
Ttl
)
continue
}
if
a
.
Header
()
.
Rrtype
!=
tc
.
Answer
[
i
]
.
Header
()
.
Rrtype
{
t
.
Errorf
(
"answer %d should have a header rr type of %d, but has %d"
,
i
,
tc
.
Answer
[
i
]
.
Header
()
.
Rrtype
,
a
.
Header
()
.
Rrtype
)
continue
}
switch
x
:=
a
.
(
type
)
{
case
*
dns
.
SRV
:
if
x
.
Priority
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Priority
{
t
.
Errorf
(
"answer %d should have a Priority of %d, but has %d"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Priority
,
x
.
Priority
)
}
if
x
.
Weight
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Weight
{
t
.
Errorf
(
"answer %d should have a Weight of %d, but has %d"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Weight
,
x
.
Weight
)
}
if
x
.
Port
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Port
{
t
.
Errorf
(
"answer %d should have a Port of %d, but has %d"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Port
,
x
.
Port
)
}
if
x
.
Target
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Target
{
t
.
Errorf
(
"answer %d should have a Target of %q, but has %q"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
SRV
)
.
Target
,
x
.
Target
)
}
case
*
dns
.
A
:
if
x
.
A
.
String
()
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
A
)
.
A
.
String
()
{
t
.
Errorf
(
"answer %d should have a Address of %q, but has %q"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
A
)
.
A
.
String
(),
x
.
A
.
String
())
}
case
*
dns
.
AAAA
:
if
x
.
AAAA
.
String
()
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
AAAA
)
.
AAAA
.
String
()
{
t
.
Errorf
(
"answer %d should have a Address of %q, but has %q"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
AAAA
)
.
AAAA
.
String
(),
x
.
AAAA
.
String
())
}
case
*
dns
.
TXT
:
for
j
,
txt
:=
range
x
.
Txt
{
if
txt
!=
tc
.
Answer
[
i
]
.
(
*
dns
.
TXT
)
.
Txt
[
j
]
{
t
.
Errorf
(
"answer %d should have a Txt of %q, but has %q"
,
i
,
tc
.
Answer
[
i
]
.
(
*
dns
.
TXT
)
.
Txt
[
j
],
txt
)
}
}
case
*
dns
.
SOA
:
tt
:=
tc
.
Answer
[
i
]
.
(
*
dns
.
SOA
)
if
x
.
Ns
!=
tt
.
Ns
{
t
.
Errorf
(
"SOA nameserver should be %q, but is %q"
,
x
.
Ns
,
tt
.
Ns
)
}
case
*
dns
.
PTR
:
tt
:=
tc
.
Answer
[
i
]
.
(
*
dns
.
PTR
)
if
x
.
Ptr
!=
tt
.
Ptr
{
t
.
Errorf
(
"PTR ptr should be %q, but is %q"
,
x
.
Ptr
,
tt
.
Ptr
)
}
case
*
dns
.
CNAME
:
tt
:=
tc
.
Answer
[
i
]
.
(
*
dns
.
CNAME
)
if
x
.
Target
!=
tt
.
Target
{
t
.
Errorf
(
"CNAME target should be %q, but is %q"
,
x
.
Target
,
tt
.
Target
)
}
case
*
dns
.
MX
:
tt
:=
tc
.
Answer
[
i
]
.
(
*
dns
.
MX
)
if
x
.
Mx
!=
tt
.
Mx
{
t
.
Errorf
(
"MX Mx should be %q, but is %q"
,
x
.
Mx
,
tt
.
Mx
)
}
if
x
.
Preference
!=
tt
.
Preference
{
t
.
Errorf
(
"MX Preference should be %q, but is %q"
,
x
.
Preference
,
tt
.
Preference
)
}
case
*
dns
.
NS
:
tt
:=
tc
.
Ns
[
i
]
.
(
*
dns
.
NS
)
if
x
.
Ns
!=
tt
.
Ns
{
t
.
Errorf
(
"NS nameserver should be %q, but is %q"
,
x
.
Ns
,
tt
.
Ns
)
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment