Beispiel #1
0
        public async Task Cache_EntriesLowestTT_Expires()
        {
            var cache    = new ResponseCache();
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 1000, 100));
            var recordB  = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 100, 100));
            var recordC  = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 1, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);
            response.AddAdditional(recordB);
            response.AddAuthority(recordC);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));

            await Task.Delay(200);

            var item = cache.Get("key", out var effectiveTtl);

            Assert.NotNull(item);
            Assert.Equal(1 * 1000, effectiveTtl);

            await Task.Delay(1100);

            var item3 = cache.Get("key", out _);

            Assert.Null(item3);
        }
        public void Add_KeyIsNotNullValueIsNull_AddsNullValue()
        {
            ResponseCache.Clear();
            ResponseCache.Add("test", null);
            var item = ResponseCache.Get("test");

            Assert.That(string.IsNullOrEmpty(item), Is.True);
        }
        public void Add_KeyIsNotNullValueIsNotNull_AddsNonNullValue()
        {
            ResponseCache.Clear();
            ResponseCache.Add("test", "value");
            var item = ResponseCache.Get("test");

            Assert.That(item, Is.EqualTo("value"));
        }
Beispiel #4
0
        public void Cache_GetOrAddExists()
        {
            var cache    = new ResponseCache();
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 100, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            var success = cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));

            Assert.True(success);

            response.AddAnswer(new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 100, 100)));
            var fail = cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));

            Assert.False(fail);
        }
Beispiel #5
0
        public void Cache_DoesNotCacheFailureIfDisabled()
        {
            var cache         = new ResponseCache(true);
            var failureStatus = DnsResponseCode.NotExistentDomain;
            var response      = new DnsResponseMessage(new DnsResponseHeader(1, (ushort)failureStatus, 0, 0, 0, 0), 0);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any), null));
            var item = cache.Get("key", out _);

            // Should be null because cache does not accept failure responses by default.
            Assert.Null(item);
        }
Beispiel #6
0
        public void TestAddNewCacheableResponse()
        {
            _mockResponse.Setup(m => m.Ttl).Returns(50);

            _sut.Add(_mockCommand.Object, _mockResponse.Object);
            var result = _sut.Get(_mockCommand.Object.GetType());

            Assert.That(_sut.HasValidResponse(_mockCommand.Object.GetType()), Is.True);
            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.EqualTo(_mockResponse.Object));
        }
Beispiel #7
0
        public void Cache_DoesNotCacheIfZeroTTL()
        {
            var cache    = new ResponseCache();
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key", out var effectiveTtl);

            // should be null because ttl of the record is 0 which disables caching for this record
            Assert.Null(item);
            Assert.Null(effectiveTtl);
        }
Beispiel #8
0
        public void Cache_DoesNotCacheIfDisabled()
        {
            var cache    = new ResponseCache(false);
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 100, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key", out var effectiveTtl);

            // should be null because cache is disabled and we create null in the second call of GetOrAdd
            Assert.Null(item);
            Assert.Null(effectiveTtl);
        }
Beispiel #9
0
        public void Cache_SupportsInfinite()
        {
            var cache    = new ResponseCache(true, Timeout.InfiniteTimeSpan);
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key", out var effectiveTtl);

            // should not be null although TTL is zero, mimimum timeout is set to infinite
            Assert.Equal(item, response.AsQueryResponse(new NameServer(IPAddress.Any)));
            Assert.Equal(int.MaxValue, effectiveTtl);
        }
Beispiel #10
0
        public void Cache_EntriesLowestTTLWins()
        {
            var cache    = new ResponseCache();
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 1000, 100));
            var recordB  = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 100, 100));
            var recordC  = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);
            response.AddAdditional(recordB);
            response.AddAuthority(recordC);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key", out var effectiveTtl);

            // should be null because recordC has zero TTL which wins
            Assert.Null(item);
            Assert.Null(effectiveTtl);
        }
 public void Add_KeyIsNull_ThrowsArgumentNullException()
 {
     Assert.Throws(typeof(ArgumentNullException), () => ResponseCache.Add(null, null));
 }