mirror of
https://github.com/AdguardTeam/AdGuardDNS.git
synced 2025-02-20 11:23:36 +08:00
55 lines
1.7 KiB
Go
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",
|
|
)
|
|
}
|