(t *testing.T)
| 223 | } |
| 224 | |
| 225 | func 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() |
nothing calls this directly
no test coverage detected