Skip to content

Commit d4507b8

Browse files
committed
dns_test: Increase coverage for dns.go
Signed-off-by: Simarpreet Singh <[email protected]>
1 parent d424801 commit d4507b8

File tree

3 files changed

+79
-8
lines changed

3 files changed

+79
-8
lines changed

dns.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -51,23 +51,23 @@ func serve(w dns.ResponseWriter, r *dns.Msg) {
5151
w.WriteMsg(m)
5252
}
5353

54-
func newDNSServer(addr string, port int, conntype string) *dns.Server {
54+
func newDNSServerHandler(addr string, port int, conntype string) *dns.Server {
5555
return &dns.Server{
5656
Addr: fmt.Sprintf("%s:%d", addr, port),
5757
Net: conntype,
5858
}
5959
}
6060

61-
func newDefaultDNSServer() *dns.Server {
62-
return &dns.Server{
63-
Addr: fmt.Sprintf("%s:%d", DNS_SERVER_ADDR, DNS_SERVER_PORT),
64-
Net: "udp",
61+
func newDefaultDNSServerHandler() *dnsServerHandler {
62+
return &dnsServerHandler{
63+
ds: newDNSServerHandler(DNS_SERVER_ADDR, DNS_SERVER_PORT, "udp"),
6564
}
6665
}
6766

6867
func (h *dnsServerHandler) RouteDNS() error {
6968
rl := NewLogger(log.New().Writer())
7069

70+
// TODO: Add more domains to the serving list
7171
dns.HandleFunc("com.", serve)
7272
err := h.ds.ListenAndServe()
7373
if err != nil {

dns_test.go

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package main
2+
3+
import (
4+
"net"
5+
"sync"
6+
"testing"
7+
"time"
8+
9+
"github.com/miekg/dns"
10+
11+
"github.com/stretchr/testify/assert"
12+
)
13+
14+
func RunLocalUDPServer(laddr string) (*dns.Server, string, error) {
15+
server, l, _, err := RunLocalUDPServerWithFinChan(laddr)
16+
17+
return server, l, err
18+
}
19+
20+
func RunLocalUDPServerWithFinChan(laddr string) (*dns.Server, string, chan struct{}, error) {
21+
pc, err := net.ListenPacket("udp", laddr)
22+
if err != nil {
23+
return nil, "", nil, err
24+
}
25+
server := &dns.Server{PacketConn: pc, ReadTimeout: time.Hour, WriteTimeout: time.Hour}
26+
27+
waitLock := sync.Mutex{}
28+
waitLock.Lock()
29+
server.NotifyStartedFunc = waitLock.Unlock
30+
31+
fin := make(chan struct{}, 0)
32+
33+
go func() {
34+
server.ActivateAndServe()
35+
close(fin)
36+
pc.Close()
37+
}()
38+
39+
waitLock.Lock()
40+
return server, pc.LocalAddr().String(), fin, nil
41+
}
42+
43+
func TestDNS_OK(t *testing.T) {
44+
h := newDefaultDNSServerHandler()
45+
dns.HandleFunc("test.", serve)
46+
defer dns.HandleRemove("test.")
47+
48+
err := h.ds.ListenAndServe()
49+
if err != nil {
50+
assert.Error(t, err)
51+
}
52+
53+
m := new(dns.Msg)
54+
m.SetQuestion("go.test.", dns.TypeA)
55+
56+
s, addrstr, err := RunLocalUDPServer("127.0.0.1:0")
57+
if err != nil {
58+
t.Fatalf("unable to run test server: %v", err)
59+
}
60+
defer s.Shutdown()
61+
62+
cn, err := dns.Dial("udp", addrstr)
63+
if err != nil {
64+
t.Errorf("failed to dial %s: %v", addrstr, err)
65+
}
66+
err = cn.WriteMsg(m)
67+
assert.NoError(t, err)
68+
69+
r, err := cn.ReadMsg()
70+
assert.NoError(t, err)
71+
assert.NotNil(t, r)
72+
assert.NotEqual(t, r, dns.RcodeSuccess)
73+
}

main.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ func main() {
2727
rl := NewLogger(log.New().Writer())
2828

2929
dhcpHandler := newDHCPServer()
30-
dnsHandler := dnsServerHandler{
31-
ds: newDefaultDNSServer(),
32-
}
30+
dnsHandler := newDefaultDNSServerHandler()
3331

3432
go func() {
3533
wg.Add(1)

0 commit comments

Comments
 (0)