diff options
Diffstat (limited to 'plugin/test/server.go')
-rw-r--r-- | plugin/test/server.go | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/plugin/test/server.go b/plugin/test/server.go new file mode 100644 index 000000000..eb39c7a5b --- /dev/null +++ b/plugin/test/server.go @@ -0,0 +1,52 @@ +package test + +import ( + "net" + "sync" + "time" + + "github.com/miekg/dns" +) + +// TCPServer starts a DNS server with a TCP listener on laddr. +func TCPServer(laddr string) (*dns.Server, string, error) { + l, err := net.Listen("tcp", laddr) + if err != nil { + return nil, "", err + } + + server := &dns.Server{Listener: l, ReadTimeout: time.Hour, WriteTimeout: time.Hour} + + waitLock := sync.Mutex{} + waitLock.Lock() + server.NotifyStartedFunc = func() { waitLock.Unlock() } + + go func() { + server.ActivateAndServe() + l.Close() + }() + + waitLock.Lock() + return server, l.Addr().String(), nil +} + +// UDPServer starts a DNS server with an UDP listener on laddr. +func UDPServer(laddr string) (*dns.Server, string, error) { + pc, err := net.ListenPacket("udp", laddr) + if err != nil { + return nil, "", err + } + server := &dns.Server{PacketConn: pc, ReadTimeout: time.Hour, WriteTimeout: time.Hour} + + waitLock := sync.Mutex{} + waitLock.Lock() + server.NotifyStartedFunc = func() { waitLock.Unlock() } + + go func() { + server.ActivateAndServe() + pc.Close() + }() + + waitLock.Lock() + return server, pc.LocalAddr().String(), nil +} |