mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-03 18:53:13 -05:00 
			
		
		
		
	Add a full test server impl in this new package + tests. Move dnsrecorder into this package as well and finish up the commented out tests that were left in the old dnsrecorder package. Update all callers and tests.
		
			
				
	
	
		
			47 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package dnstest
 | 
						|
 | 
						|
import (
 | 
						|
	"net"
 | 
						|
 | 
						|
	"github.com/miekg/dns"
 | 
						|
)
 | 
						|
 | 
						|
// A Server is an DNS server listening on a system-chosen port on the local
 | 
						|
// loopback interface, for use in end-to-end DNS tests.
 | 
						|
type Server struct {
 | 
						|
	Addr string // Address where the server listening.
 | 
						|
 | 
						|
	s1 *dns.Server // udp
 | 
						|
	s2 *dns.Server // tcp
 | 
						|
}
 | 
						|
 | 
						|
// NewServer starts and returns a new Server. The caller should call Close when
 | 
						|
// finished, to shut it down.
 | 
						|
func NewServer(f dns.HandlerFunc) *Server {
 | 
						|
	dns.HandleFunc(".", f)
 | 
						|
 | 
						|
	ch1 := make(chan bool)
 | 
						|
	ch2 := make(chan bool)
 | 
						|
 | 
						|
	p, _ := net.ListenPacket("udp", ":0")
 | 
						|
	l, _ := net.Listen("tcp", p.LocalAddr().String())
 | 
						|
 | 
						|
	s1 := &dns.Server{PacketConn: p}
 | 
						|
	s2 := &dns.Server{Listener: l}
 | 
						|
	s1.NotifyStartedFunc = func() { close(ch1) }
 | 
						|
	s2.NotifyStartedFunc = func() { close(ch2) }
 | 
						|
	go s1.ActivateAndServe()
 | 
						|
	go s2.ActivateAndServe()
 | 
						|
 | 
						|
	<-ch1
 | 
						|
	<-ch2
 | 
						|
 | 
						|
	return &Server{s1: s1, s2: s2, Addr: p.LocalAddr().String()}
 | 
						|
}
 | 
						|
 | 
						|
// Close shuts down the server.
 | 
						|
func (s *Server) Close() {
 | 
						|
	s.s1.Shutdown()
 | 
						|
	s.s2.Shutdown()
 | 
						|
}
 |