Unit test

This commit is contained in:
Bryan Boreham committed 2014-10-07 16:29:58 +01:00
1 parent 930a6ff939
commit 9ec95e4fa8
1 file changed
+109
+109
View File
@@ -0,0 +1,109 @@
package weavedns
import (
"github.com/miekg/dns"
"log"
"net"
"testing"
"time"
)
var (
test_addr = net.ParseIP("9.8.7.6")
sendconn *net.UDPConn
sendAddr = &net.UDPAddr{
IP: net.ParseIP(ipv4mdns),
Port: 0,
}
)
func minimalServer(w dns.ResponseWriter, req *dns.Msg) {
//log.Println("minimalServer received:", req)
if len(req.Answer) > 0 {
return // Only interested in questions.
}
m := new(dns.Msg)
m.SetReply(req)
hdr := dns.RR_Header{Name: m.Question[0].Name, Rrtype: dns.TypeA,
Class: dns.ClassINET, Ttl: 3600}
a := &dns.A{hdr, test_addr}
m.Answer = append(m.Answer, a)
buf, err := m.Pack()
if err != nil {
log.Fatal(err)
}
if buf == nil {
log.Fatal("Nil buffer")
}
//log.Println("minimalServer sending:", buf)
_, err = sendconn.WriteTo(buf, ipv4Addr)
if err != nil {
log.Fatal(err)
}
}
func RunLocalMulticastServer() error {
mux := dns.NewServeMux()
mux.HandleFunc("weave", minimalServer)
multicast, err := net.ListenMulticastUDP("udp", nil, ipv4Addr)
if err != nil {
return err
}
go dns.ActivateAndServe(nil, multicast, mux)
return nil
}
func TestSimpleQuery(t *testing.T) {
log.Println("TestSimpleQuery starting")
mdnsClient, err := NewMDNSClient()
if err != nil {
t.Fatal(err)
}
mdnsClient.Start()
mux := dns.NewServeMux()
handleMDNS := func(w dns.ResponseWriter, r *dns.Msg) {
//log.Println("test received:", r)
// Only handle responses here
if len(r.Answer) > 0 {
mdnsClient.ResponseCallback(r)
}
}
mux.HandleFunc("weave", handleMDNS)
multicast, err := net.ListenMulticastUDP("udp", nil, ipv4Addr)
if err != nil {
t.Fatal(err)
}
go dns.ActivateAndServe(nil, multicast, mux)
sendconn, err = net.ListenUDP("udp", sendAddr)
if err != nil {
t.Fatal(err)
}
err = RunLocalMulticastServer()
if err != nil {
t.Fatalf("Unable to run test server: %s", err)
}
var received_addr net.IP
channel := make(chan *ResponseA, 4)
go func() {
for resp := range channel {
log.Printf("Got address response %s addr %s", resp.Name, resp.Addr)
received_addr = resp.Addr
}
}()
mdnsClient.SendQuery("test.weave.", dns.TypeA, channel)
time.Sleep(1 * time.Second)
if !received_addr.Equal(test_addr) {
t.Log("Unexpected result for test.weave", received_addr)
t.Fail()
}
}