131 lines
2.4 KiB
Go
Raw Normal View History

2022-08-26 14:18:35 +03:00
package querylog_test
import (
"context"
"io"
"os"
"strings"
"testing"
2024-01-04 19:22:32 +03:00
"github.com/AdguardTeam/AdGuardDNS/internal/geoip"
2022-08-26 14:18:35 +03:00
"github.com/AdguardTeam/AdGuardDNS/internal/querylog"
"github.com/miekg/dns"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestFileSystem_Write(t *testing.T) {
f, err := os.CreateTemp(t.TempDir(), t.Name())
require.NoError(t, err)
l := querylog.NewFileSystem(&querylog.FileSystemConfig{
Path: f.Name(),
})
ctx := context.Background()
e := testEntry()
err = l.Write(ctx, e)
require.NoError(t, err)
_, err = f.Seek(0, io.SeekStart)
require.NoError(t, err)
b, err := io.ReadAll(f)
require.NoError(t, err)
2023-08-08 18:31:48 +03:00
rep := strings.NewReplacer(
" ", "",
"\n", "",
"REQID", testRequestID.String(),
)
2022-08-26 14:18:35 +03:00
want := rep.Replace(`
{
2023-08-08 18:31:48 +03:00
"u":"REQID",
2022-08-26 14:18:35 +03:00
"b":"prof1234",
"i":"dev1234",
"c":"RU",
"d":"US",
"n":"example.com.",
"l":"adguard_dns_filter",
"m":"||example.com^",
"t":123000,
"a":1234,
"e":5,
"q":1,
"f":2,
"s":1,
2022-11-07 10:21:24 +03:00
"p":8,
2022-08-26 14:18:35 +03:00
"r":0
}`) + "\n"
2022-11-07 10:21:24 +03:00
assert.Equal(t, want, string(b))
2022-08-26 14:18:35 +03:00
t.Run("nxdomain", func(t *testing.T) {
e = testEntry()
e.RequestResult, e.ResponseResult = nil, nil
2024-01-04 19:22:32 +03:00
e.ResponseCountry = geoip.CountryNone
2022-08-26 14:18:35 +03:00
e.ResponseCode = dns.RcodeNameError
err = l.Write(ctx, e)
require.NoError(t, err)
b, err = io.ReadAll(f)
require.NoError(t, err)
2023-08-08 18:31:48 +03:00
rep = strings.NewReplacer(
" ", "",
"\n", "",
"REQID", testRequestID.String(),
)
2022-08-26 14:18:35 +03:00
want = rep.Replace(`
{
2023-08-08 18:31:48 +03:00
"u":"REQID",
2022-08-26 14:18:35 +03:00
"b":"prof1234",
"i":"dev1234",
"c":"RU",
"n":"example.com.",
"t":123000,
"a":1234,
"e":5,
"q":1,
"f":1,
"s":1,
2022-11-07 10:21:24 +03:00
"p":8,
2022-08-26 14:18:35 +03:00
"r":3
}`) + "\n"
2022-11-07 10:21:24 +03:00
assert.Equal(t, want, string(b))
2022-08-26 14:18:35 +03:00
})
}
var errSink error
func BenchmarkFileSystem_Write_file(b *testing.B) {
f, err := os.CreateTemp(b.TempDir(), b.Name())
require.NoError(b, err)
l := querylog.NewFileSystem(&querylog.FileSystemConfig{
Path: f.Name(),
})
e := testEntry()
ctx := context.Background()
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
errSink = l.Write(ctx, e)
}
require.NoError(b, errSink)
// Most recent result, on a ThinkPad X13 with a Ryzen Pro 7 CPU:
//
2022-09-07 20:18:00 +03:00
// goos: linux
// goarch: amd64
// pkg: github.com/AdguardTeam/AdGuardDNS/internal/querylog
// cpu: AMD Ryzen 7 PRO 4750U with Radeon Graphics
// BenchmarkFileSystem_Write_file-16 244162 5000 ns/op 200 B/op 3 allocs/op
2022-08-26 14:18:35 +03:00
}