|
@@ -3,16 +3,21 @@ package main
|
|
|
import (
|
|
|
"github.com/miekg/dns"
|
|
|
. "launchpad.net/gocheck"
|
|
|
+ "net"
|
|
|
"strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
+const (
|
|
|
+ PORT = ":8853"
|
|
|
+)
|
|
|
+
|
|
|
func (s *ConfigSuite) TestServing(c *C) {
|
|
|
|
|
|
Zones := make(Zones)
|
|
|
setupPgeodnsZone(Zones)
|
|
|
go configReader("dns", Zones)
|
|
|
- go listenAndServe(":8853", &Zones)
|
|
|
+ go listenAndServe(PORT, &Zones)
|
|
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
|
@@ -53,12 +58,40 @@ func (s *ConfigSuite) TestServing(c *C) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+func (s *ConfigSuite) TestServingEDNS(c *C) {
|
|
|
+ msg := new(dns.Msg)
|
|
|
+ cli := new(dns.Client)
|
|
|
+
|
|
|
+ msg.SetQuestion("example.com.", dns.TypeMX)
|
|
|
+
|
|
|
+ o := new(dns.OPT)
|
|
|
+ o.Hdr.Name = "."
|
|
|
+ o.Hdr.Rrtype = dns.TypeOPT
|
|
|
+ e := new(dns.EDNS0_SUBNET)
|
|
|
+ e.Code = dns.EDNS0SUBNET
|
|
|
+ e.SourceScope = 0
|
|
|
+ e.Address = net.ParseIP("194.239.134.1")
|
|
|
+ e.Family = 1 // IP4
|
|
|
+ e.SourceNetmask = net.IPv4len * 8
|
|
|
+ o.Option = append(o.Option, e)
|
|
|
+ msg.Extra = append(msg.Extra, o)
|
|
|
+
|
|
|
+ r, _, err := cli.Exchange(msg, "127.0.0.1"+PORT)
|
|
|
+ if err != nil {
|
|
|
+ c.Log("err", err)
|
|
|
+ c.Fail()
|
|
|
+ }
|
|
|
+
|
|
|
+ c.Check(r.Answer[0].(*dns.MX).Mx, Equals, "mx-eu.example.net.")
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
func exchange(c *C, name string, dnstype uint16) *dns.Msg {
|
|
|
msg := new(dns.Msg)
|
|
|
cli := new(dns.Client)
|
|
|
|
|
|
msg.SetQuestion(name, dnstype)
|
|
|
- r, _, err := cli.Exchange(msg, "127.0.0.1:8853")
|
|
|
+ r, _, err := cli.Exchange(msg, "127.0.0.1"+PORT)
|
|
|
if err != nil {
|
|
|
c.Log("err", err)
|
|
|
c.Fail()
|