Andrey Meshkov f1791135af Sync v2.11.0
2024-12-05 14:19:25 +03:00

55 lines
1.7 KiB
Go

package prometheus_test
import (
"context"
"testing"
"time"
"github.com/AdguardTeam/AdGuardDNS/internal/dnsserver"
"github.com/AdguardTeam/AdGuardDNS/internal/dnsserver/cache"
"github.com/AdguardTeam/AdGuardDNS/internal/dnsserver/dnsservertest"
"github.com/AdguardTeam/AdGuardDNS/internal/dnsserver/prometheus"
"github.com/miekg/dns"
"github.com/stretchr/testify/require"
)
// Note that prometheus metrics are global by their nature so this is not a
// normal unit test, we create a cache middleware, emulate a query and then
// check if prom metrics were incremented.
func TestCacheMetricsListener_integration_cache(t *testing.T) {
cacheMiddleware := cache.NewMiddleware(&cache.MiddlewareConfig{
MetricsListener: prometheus.NewCacheMetricsListener(testNamespace),
Count: 100,
})
handlerWithMiddleware := dnsserver.WithMiddlewares(
dnsservertest.NewDefaultHandler(),
cacheMiddleware,
)
// Pass 10 requests through the middleware. This way we'll increment and
// set both hits and misses.
for range 10 {
ctx := dnsserver.ContextWithServerInfo(context.Background(), testServerInfo)
ctx = dnsserver.ContextWithRequestInfo(ctx, &dnsserver.RequestInfo{
StartTime: time.Now(),
})
nrw := dnsserver.NewNonWriterResponseWriter(testUDPAddr, testUDPAddr)
req := dnsservertest.CreateMessage(testReqDomain, dns.TypeA)
err := handlerWithMiddleware.ServeDNS(ctx, nrw, req)
require.NoError(t, err)
dnsservertest.RequireResponse(t, req, nrw.Msg(), 1, dns.RcodeSuccess, false)
}
// Now make sure that prometheus metrics were incremented properly.
requireMetrics(
t,
"dns_cache_hits_total",
"dns_cache_misses_total",
"dns_cache_size",
)
}