MCPcopy
hub / github.com/grafana/dskit / TestResolver_LookupIP

Function TestResolver_LookupIP

dns/miekgdns/resolver_test.go:225–296  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

223}
224
225func TestResolver_LookupIP(t *testing.T) {
226 logger := log.NewNopLogger()
227 period := time.Hour // We don't want the periodic reload running in the test
228 tmpDir := t.TempDir()
229
230 t.Run("multiple timeouts", func(t *testing.T) {
231 cfgPath := writeResovConf(t, tmpDir, resolvConfContents)
232 client := newMockClient()
233 client.err["127.0.0.53:53"] = errors.New("timeout 1 in test")
234 client.err["127.0.0.54:53"] = errors.New("timeout 2 in test")
235
236 resolver := NewResolverWithClient(cfgPath, logger, period, client)
237 t.Cleanup(resolver.Stop)
238 _, err := resolver.LookupIPAddr(context.Background(), "cache01.example.com.")
239
240 require.ErrorContains(t, err, "timeout")
241 })
242
243 t.Run("one timeout and one success", func(t *testing.T) {
244 cfgPath := writeResovConf(t, tmpDir, resolvConfContents)
245 client := newMockClient()
246 client.err["127.0.0.53:53"] = errors.New("timeout 1 in test")
247 client.res["127.0.0.54:53"] = []*dns.Msg{newIPDNSResponse("cache01.example.com.", net.IPv4(10, 0, 0, 1))}
248
249 resolver := NewResolverWithClient(cfgPath, logger, period, client)
250 t.Cleanup(resolver.Stop)
251 res, err := resolver.LookupIPAddr(context.Background(), "cache01.example.com")
252
253 require.NoError(t, err)
254 require.Equal(t, []net.IPAddr{{IP: net.IPv4(10, 0, 0, 1)}}, res)
255 })
256
257 t.Run("name error", func(t *testing.T) {
258 response1 := new(dns.Msg).SetQuestion("cache01.example.com.", dns.TypeAAAA)
259 response1.Rcode = dns.RcodeNameError
260 response1.Response = true
261
262 response2 := new(dns.Msg).SetQuestion("cache01.example.com.", dns.TypeA)
263 response2.Rcode = dns.RcodeNameError
264 response2.Response = true
265
266 cfgPath := writeResovConf(t, tmpDir, resolvConfContents)
267 client := newMockClient()
268 client.err["127.0.0.53:53"] = errors.New("timeout 1 in test")
269 // Include two responses since a failed AAAA lookup will result in an A fallback
270 client.res["127.0.0.54:53"] = []*dns.Msg{response1, response2}
271
272 resolver := NewResolverWithClient(cfgPath, logger, period, client)
273 t.Cleanup(resolver.Stop)
274 res, err := resolver.LookupIPAddr(context.Background(), "cache01.example.com")
275
276 require.NoError(t, err)
277 require.Empty(t, res)
278 })
279
280 t.Run("one level of CNAME", func(t *testing.T) {
281 cfgPath := writeResovConf(t, tmpDir, resolvConfContents)
282 client := newMockClient()

Callers

nothing calls this directly

Calls 8

writeResovConfFunction · 0.85
newMockClientFunction · 0.85
NewResolverWithClientFunction · 0.85
newIPDNSResponseFunction · 0.85
newCnameDNSResponseFunction · 0.85
RunMethod · 0.80
LookupIPAddrMethod · 0.65
EqualMethod · 0.45

Tested by

no test coverage detected