Fixing bugs, adding a lookup test
This commit is contained in:
parent
c1e906499b
commit
de767a076b
@ -101,7 +101,6 @@ func (s *Server) recv(c *net.UDPConn) {
|
||||
for !s.shutdown {
|
||||
n, from, err := c.ReadFrom(buf)
|
||||
if err != nil {
|
||||
log.Printf("[ERR] mdns: Failed to read packet: %v", err)
|
||||
continue
|
||||
}
|
||||
if err := s.parsePacket(buf[:n], from); err != nil {
|
||||
@ -122,19 +121,22 @@ func (s *Server) parsePacket(packet []byte, from net.Addr) error {
|
||||
|
||||
// handleQuery is used to handle an incoming query
|
||||
func (s *Server) handleQuery(query *dns.Msg, from net.Addr) error {
|
||||
log.Printf("[DEBUG] mdns: query from %v", from)
|
||||
var resp dns.Msg
|
||||
resp.SetReply(query)
|
||||
|
||||
// Handle each question
|
||||
if len(query.Question) > 0 {
|
||||
if err := s.handleQuestion(query.Question[0], &resp); err != nil {
|
||||
log.Printf("[ERR] mdns: Failed to handle question %v: %v",
|
||||
log.Printf("[ERR] mdns: failed to handle question %v: %v",
|
||||
query.Question[0], err)
|
||||
}
|
||||
}
|
||||
|
||||
// Check if there is an answer
|
||||
if len(query.Answer) > 0 {
|
||||
log.Printf("[DEBUG] mdns: %d records for %v",
|
||||
len(resp.Answer), from)
|
||||
if len(resp.Answer) > 0 {
|
||||
return s.sendResponse(&resp, from)
|
||||
}
|
||||
return nil
|
||||
|
@ -1,7 +1,9 @@
|
||||
package mdns
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestServer_StartStop(t *testing.T) {
|
||||
@ -12,3 +14,46 @@ func TestServer_StartStop(t *testing.T) {
|
||||
}
|
||||
defer serv.Shutdown()
|
||||
}
|
||||
|
||||
func TestServer_Lookup(t *testing.T) {
|
||||
s := makeService(t)
|
||||
s.Service = "_foobar._tcp"
|
||||
s.Init()
|
||||
serv, err := NewServer(&Config{s})
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
defer serv.Shutdown()
|
||||
|
||||
entries := make(chan *ServiceEntry, 1)
|
||||
found := false
|
||||
go func() {
|
||||
select {
|
||||
case e := <-entries:
|
||||
if e.Name != "hostname._foobar._tcp.local." {
|
||||
t.Fatalf("bad: %v", e)
|
||||
}
|
||||
if !bytes.Equal(e.Addr.To4(), []byte{127, 0, 0, 1}) {
|
||||
t.Fatalf("bad: %v", e)
|
||||
}
|
||||
if e.Port != 80 {
|
||||
t.Fatalf("bad: %v", e)
|
||||
}
|
||||
if e.Info != "Local web server" {
|
||||
t.Fatalf("bad: %v", e)
|
||||
}
|
||||
found = true
|
||||
|
||||
case <-time.After(80 * time.Millisecond):
|
||||
t.Fatalf("timeout")
|
||||
}
|
||||
}()
|
||||
|
||||
err = LookupDomain("_foobar._tcp", "local", 50*time.Millisecond, entries)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
if !found {
|
||||
t.Fatalf("record not found")
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user