Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        public void TestFailedLookup()
        {
            DnsQuery.Debug = true;

            var records = DnsQuery.QuerySrv(UnknownSrvRecord);

            Assert.AreEqual(0, records.Count());
        }
Beispiel #3
0
        public async Task FailedLookup()
        {
            DnsQuery.Debug = true;

            var records = await DnsQuery.QuerySrv(UnknownSrvRecord);

            Assert.AreEqual(0, records.Count());
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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));
 }
Beispiel #8
0
 public void TestBadDataLookup()
 {
     DnsQuery.QuerySrv(BadSrvRecord);
 }
Beispiel #9
0
 public async Task BadDataLookup()
 {
     await DnsQuery.QuerySrv(BadSrvRecord);
 }