Quellcode durchsuchen

Add test for processing edns-subnet requests

Ask Bjørn Hansen vor 12 Jahren
Ursprung
Commit
2c2c93d9ad
1 geänderte Dateien mit 35 neuen und 2 gelöschten Zeilen
  1. 35 2
      serve_test.go

+ 35 - 2
serve_test.go

@@ -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()