private async Task QueryDns(string domain, string servicePrefix, List <DnsRecord> records) { var lookup = Invariant($"{servicePrefix}.{domain}"); bool skipLookup = false; if (DomainServiceNegativeCache.TryGetValue(lookup, out DateTimeOffset expires)) { if (DateTimeOffset.UtcNow > expires) { DomainServiceNegativeCache.TryRemove(lookup, out _); } else { skipLookup = true; } } if (!skipLookup) { this.logger.LogDebug("Querying DNS {Lookup}", lookup); var dnsResults = await DnsQuery.QuerySrv(lookup); if (!dnsResults.Any()) { DomainServiceNegativeCache[lookup] = DateTimeOffset.UtcNow.AddMinutes(5); this.logger.LogDebug("DNS failed {Lookup} so negative caching", lookup); } records.AddRange(dnsResults); } }
public void TestFailedLookup() { DnsQuery.Debug = true; var records = DnsQuery.QuerySrv(UnknownSrvRecord); Assert.AreEqual(0, records.Count()); }
public async Task FailedLookup() { DnsQuery.Debug = true; var records = await DnsQuery.QuerySrv(UnknownSrvRecord); Assert.AreEqual(0, records.Count()); }
public void TestQuerySrvRecordHittingInternet() { DnsQuery.Debug = true; var records = DnsQuery.QuerySrv(ExternalSrvRecord); Assert.IsTrue(records.Count() > 0); var srv = records.Single(r => r.Type == DnsRecordType.SRV); Assert.AreEqual("sipdir.online.lync.com", srv.Target); Assert.AreEqual(443, srv.Port); }
public async Task QuerySrvRecordHittingInternet() { DnsQuery.Debug = true; var records = await DnsQuery.QuerySrv(ExternalSrvRecord); Assert.IsTrue(records.Any()); var srv = records.Single(r => r.Type == DnsRecordType.SRV); Assert.AreEqual("sipdir.online.lync.com", srv.Target); Assert.AreEqual(443, srv.Port); }
public async Task QueryUsesCustomType() { var fake = new FakeDnsImplementation(); DnsQuery.RegisterImplementation(fake); var result = await DnsQuery.QuerySrv("blah.blah.blah"); Assert.AreEqual(1, result.Count()); Assert.AreEqual("blah", result.First().Target); Assert.IsTrue(fake.WasCalled); DnsQuery.RegisterImplementation(new WindowsDnsQuery()); }
protected virtual IEnumerable <DnsRecord> Query(string lookup) { return(DnsQuery.QuerySrv(lookup)); }
public void TestBadDataLookup() { DnsQuery.QuerySrv(BadSrvRecord); }
public async Task BadDataLookup() { await DnsQuery.QuerySrv(BadSrvRecord); }