From f185daa6732a49c4371bd6a1b0dc24a5efdd5069 Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Thu, 14 Sep 2023 15:47:37 +0100 Subject: [PATCH] Test caching. --- cache_test.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ doh_test.go | 2 +- dot_test.go | 2 +- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/cache_test.go b/cache_test.go index ccadd11..dd4a5a5 100644 --- a/cache_test.go +++ b/cache_test.go @@ -3,6 +3,9 @@ package dns_test import ( "context" "fmt" + "net" + "testing" + "time" "github.com/ncruces/go-dns" ) @@ -21,3 +24,47 @@ func ExampleNewCachingResolver() { // 2606:4700:4700::1111 // 2606:4700:4700::1001 } + +func TestNewCachingResolver(t *testing.T) { + // Prime recursive resolver cache. + e, err := net.LookupIP("nxdomain.test") + if err == nil { + t.Errorf("LookupIPAddr('nxdomain.test') = %v", e) + } + + r := dns.NewCachingResolver(nil) + measure := func() time.Duration { + start := time.Now() + r.LookupIPAddr(context.TODO(), "nxdomain.test") + return time.Since(start) + } + + uncached, cached := measure(), measure() + if uncached > cached*10 { // Expect order of magnitude difference. + t.Logf("uncached %v, cached %v", uncached, cached) + } else { + t.Errorf("uncached %v, cached %v", uncached, cached) + } +} + +func TestNegativeCache(t *testing.T) { + // Prime recursive resolver cache. + e, err := net.LookupIP("nxdomain.test") + if err == nil { + t.Errorf("LookupIPAddr('nxdomain.test') = %v", e) + } + + r := dns.NewCachingResolver(nil, dns.NegativeCache(false)) + measure := func() time.Duration { + start := time.Now() + r.LookupIPAddr(context.TODO(), "nxdomain.test") + return time.Since(start) + } + + first, second := measure(), measure() + if first/10 < second && second < first*10 { // Do not expect huge differences. + t.Logf("first %v, second %v", first, second) + } else { + t.Errorf("first %v, second %v", first, second) + } +} diff --git a/doh_test.go b/doh_test.go index e8f7a9c..318dc5e 100644 --- a/doh_test.go +++ b/doh_test.go @@ -102,7 +102,7 @@ func TestNewDoHResolver(t *testing.T) { }) } -func TestNewDoH64Resolver(t *testing.T) { +func TestNewDoHResolver_64(t *testing.T) { // Test IPv6 connectivity (broken on GitHub Actions). if c, err := net.Dial("tcp", "ipv6.google.com:80"); err != nil { t.Skip("IPv6 not supported.") diff --git a/dot_test.go b/dot_test.go index ca93f99..5169ccb 100644 --- a/dot_test.go +++ b/dot_test.go @@ -139,7 +139,7 @@ func TestNewDoTResolver(t *testing.T) { }) } -func TestNewDoT64Resolver(t *testing.T) { +func TestNewDoTResolver_64(t *testing.T) { // Test IPv6 connectivity (broken on GitHub Actions). if c, err := net.Dial("tcp", "ipv6.google.com:80"); err != nil { t.Skip("IPv6 not supported.")