Skip to content

Commit 0c7fd0a

Browse files
query: initialize the dns client correctly (#37)
* query: initialize the dns client correctly The query client was not wired correctly, causing a panic when attempting to call Exchange due to a missing underlying client. * query: improve test values Align placeholder values and make them consistent
1 parent 2960f30 commit 0c7fd0a

File tree

3 files changed

+34
-62
lines changed

3 files changed

+34
-62
lines changed

cmd/root.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ var (
138138
}
139139
}
140140

141-
querier := query.NewQueryClient(fmt.Sprintf("%s:53", server), logger)
141+
querier := query.NewQueryClient(fmt.Sprintf("%s:53", server), new(dns.Client), logger)
142142

143143
logger.Debug("Creating querier", "server", server, "qtype", qtype, "domain", args[0])
144144

internal/query/query.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,14 @@ type QueryClient struct {
3333
hclog.Logger
3434
}
3535

36-
func NewQueryClient(server string, logger hclog.Logger) *QueryClient {
37-
return &QueryClient{Server: server, Logger: logger}
36+
// NewQueryClient initializes a QueryClient with the given DNS server, client, and logger.
37+
// The provided client must implement the Exchange method for DNS queries.
38+
func NewQueryClient(server string, client DNSClient, logger hclog.Logger) *QueryClient {
39+
return &QueryClient{
40+
Server: server,
41+
Client: client,
42+
Logger: logger,
43+
}
3844
}
3945

4046
// MultiQuery performs DNS queries for multiple types concurrently.

internal/query/query_test.go

+25-59
Original file line numberDiff line numberDiff line change
@@ -43,121 +43,87 @@ func (m *MockDNSClientWithError) Exchange(req *dns.Msg, addr string) (*dns.Msg,
4343
}
4444

4545
func TestQueryClient_Query(t *testing.T) {
46-
// Use a null logger to suppress log output during testing.
47-
client := NewQueryClient("8.8.8.8", hclog.NewNullLogger())
48-
4946
mockDNSClient := &MockDNSClient{}
50-
client.Client = mockDNSClient
47+
client := NewQueryClient("8.8.8.8", mockDNSClient, hclog.NewNullLogger())
5148

5249
_, err := client.query("example.com", dns.TypeA)
5350

54-
assert.Nil(t, err)
55-
51+
assert.NoError(t, err)
5652
assert.Equal(t, "example.com.", mockDNSClient.ReceivedDomain)
5753
assert.Equal(t, dns.TypeA, mockDNSClient.QueryType)
5854
}
5955

6056
func TestQueryClient_Query_Domain(t *testing.T) {
61-
// Use a null logger to suppress log output during testing.
62-
client := NewQueryClient("1.1.1.1", hclog.NewNullLogger())
63-
6457
mockDNSClient := &MockDNSClient{}
65-
client.Client = mockDNSClient
58+
client := NewQueryClient("8.8.8.8", mockDNSClient, hclog.NewNullLogger())
6659

67-
_, err := client.query("abc.xyz", dns.TypeA)
68-
69-
assert.Nil(t, err)
60+
_, err := client.query("example.com", dns.TypeA)
7061

71-
assert.Equal(t, "abc.xyz.", mockDNSClient.ReceivedDomain)
62+
assert.NoError(t, err)
63+
assert.Equal(t, "example.com.", mockDNSClient.ReceivedDomain)
7264
}
7365

7466
func TestQueryClient_Query_QueryType(t *testing.T) {
75-
// Use a null logger to suppress log output during testing.
76-
client := NewQueryClient("1.1.1.1", hclog.NewNullLogger())
77-
7867
mockDNSClient := &MockDNSClient{}
79-
client.Client = mockDNSClient
68+
client := NewQueryClient("8.8.8.8", mockDNSClient, hclog.NewNullLogger())
8069

81-
_, err := client.query("abc.xyz", dns.TypeCNAME)
82-
83-
assert.Nil(t, err)
70+
_, err := client.query("example.com", dns.TypeCNAME)
8471

72+
assert.NoError(t, err)
8573
assert.Equal(t, dns.TypeCNAME, mockDNSClient.QueryType)
8674
}
8775

8876
func TestQueryClient_Query_Error(t *testing.T) {
89-
// Use a null logger to suppress log output during testing.
90-
client := NewQueryClient("8.8.8.8", hclog.NewNullLogger())
91-
9277
mockDNSClientWithError := &MockDNSClientWithError{}
93-
client.Client = mockDNSClientWithError
78+
client := NewQueryClient("8.8.8.8", mockDNSClientWithError, hclog.NewNullLogger())
9479

9580
_, err := client.query("example.com", dns.TypeA)
9681

97-
assert.NotNil(t, err)
82+
assert.Error(t, err)
9883
assert.Equal(t, "it's always DNS", err.Error())
9984
}
10085

10186
func TestQueryClient_MultiQuery(t *testing.T) {
102-
// Use a null logger to suppress log output during testing.
103-
client := NewQueryClient("8.8.8.8", hclog.NewNullLogger())
104-
10587
mockDNSClient := &MockDNSClient{}
106-
client.Client = mockDNSClient
88+
client := NewQueryClient("8.8.8.8", mockDNSClient, hclog.NewNullLogger())
10789

10890
resp, err := client.MultiQuery("example.com", []uint16{dns.TypeA, dns.TypeMX})
10991

110-
assert.Nil(t, err)
111-
92+
assert.NoError(t, err)
11293
assert.Equal(t, "example.com.", mockDNSClient.ReceivedDomain)
113-
assert.Equal(t, 2, len(resp))
94+
assert.Len(t, resp, 2)
11495
}
11596

11697
func TestQueryClient_MultiQuery_Domain(t *testing.T) {
117-
// Use a null logger to suppress log output during testing.
118-
client := NewQueryClient("1.1.1.1", hclog.NewNullLogger())
119-
12098
mockDNSClient := &MockDNSClient{}
121-
client.Client = mockDNSClient
99+
client := NewQueryClient("8.8.8.8", mockDNSClient, hclog.NewNullLogger())
122100

123-
_, err := client.MultiQuery("abc.xyz", []uint16{dns.TypeA, dns.TypeMX})
101+
_, err := client.MultiQuery("example.com", []uint16{dns.TypeA, dns.TypeMX})
124102

125-
assert.Nil(t, err)
126-
127-
assert.Equal(t, "abc.xyz.", mockDNSClient.ReceivedDomain)
103+
assert.NoError(t, err)
104+
assert.Equal(t, "example.com.", mockDNSClient.ReceivedDomain)
128105
}
129106

130107
func TestQueryClient_MultiQuery_Error(t *testing.T) {
131-
// Use a null logger to suppress log output during testing.
132-
client := NewQueryClient("1.1.1.1", hclog.NewNullLogger())
133-
134108
mockDNSClientWithError := &MockDNSClientWithError{}
135-
client.Client = mockDNSClientWithError
109+
client := NewQueryClient("8.8.8.8", mockDNSClientWithError, hclog.NewNullLogger())
136110

137-
_, err := client.MultiQuery("1", []uint16{dns.TypeA, dns.TypeMX})
111+
_, err := client.MultiQuery("example.com", []uint16{dns.TypeA, dns.TypeMX})
138112

139-
assert.NotNil(t, err)
113+
assert.Error(t, err)
140114
}
141115

142116
func TestQueryClient_MultiQuery_TypeAssert_MultiError(t *testing.T) {
143-
// Use a null logger to suppress log output during testing.
144-
client := NewQueryClient("1.1.1.1", hclog.NewNullLogger())
145-
146117
mockDNSClientWithError := &MockDNSClientWithError{}
147-
client.Client = mockDNSClientWithError
118+
client := NewQueryClient("8.8.8.8", mockDNSClientWithError, hclog.NewNullLogger())
148119

149-
_, err := client.MultiQuery("1", []uint16{dns.TypeA, dns.TypeMX})
120+
_, err := client.MultiQuery("example.com", []uint16{dns.TypeA, dns.TypeMX})
150121

151-
assert.NotNil(t, err)
152-
153-
// Because MultiQuery returns a multierror.Error, we assert that the error is of that type.
122+
assert.Error(t, err)
154123
assert.IsType(t, &multierror.Error{}, err)
155124

156-
// We can then type assert the error to a *multierror.Error and introspect the individual errors.
157125
if err, ok := err.(*multierror.Error); ok {
158-
// Assert that two errors are returned (one for each query type).
159-
assert.Equal(t, 2, len(err.Errors))
160-
126+
assert.Len(t, err.Errors, 2)
161127
for _, e := range err.Errors {
162128
assert.Equal(t, "it's always DNS", e.Error())
163129
}

0 commit comments

Comments
 (0)