diff --git a/go.mod b/go.mod index 570d73cb..111f0c61 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/AdguardTeam/dnsproxy go 1.25.1 require ( - github.com/AdguardTeam/golibs v0.34.1 + github.com/AdguardTeam/golibs v0.35.0 github.com/ameshkov/dnscrypt/v2 v2.4.0 github.com/ameshkov/dnsstamps v1.0.3 github.com/beefsack/go-rate v0.0.0-20220214233405-116f4ca011a0 @@ -14,7 +14,7 @@ require ( // when TestUpstreamDoH_serverRestart/http3/second_try keeps failing. github.com/quic-go/quic-go v0.53.0 github.com/stretchr/testify v1.11.1 - golang.org/x/exp v0.0.0-20250813145105-42675adae3e6 // indirect + golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b // indirect golang.org/x/net v0.44.0 golang.org/x/sys v0.36.0 gonum.org/v1/gonum v0.16.0 diff --git a/go.sum b/go.sum index 7eb1648c..9cfff82b 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,12 @@ cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -github.com/AdguardTeam/golibs v0.34.1 h1:RyBpZiXnJqlO3T+xjWldlxsEZDelmaFfKvXiJHDZZFQ= -github.com/AdguardTeam/golibs v0.34.1/go.mod h1:K4C2EbfSEM1zY5YXoti9SfbTAHN/kIX97LpDtCwORrM= +github.com/AdguardTeam/golibs v0.34.2-0.20251002170933-067fe882809b h1:qHsD0KwCAK4gDmobKpDyacAfscWJ6Ii392uc0DkRo6o= +github.com/AdguardTeam/golibs v0.34.2-0.20251002170933-067fe882809b/go.mod h1:y552twxCtvOD8KKQ7ESjo10KZBAE+HSj24yAuAvz9IA= +github.com/AdguardTeam/golibs v0.34.2-0.20251003135644-84486c1440c1 h1:2lQwC1hZq2b9zbu279+YgkBTTsOlYWWQR9Q0Cr+5vWg= +github.com/AdguardTeam/golibs v0.34.2-0.20251003135644-84486c1440c1/go.mod h1:y552twxCtvOD8KKQ7ESjo10KZBAE+HSj24yAuAvz9IA= +github.com/AdguardTeam/golibs v0.35.0 h1:O990+tbZ5W5yB0ybtaUJy4FUb0bXxyzeUC7t8cr1pCg= +github.com/AdguardTeam/golibs v0.35.0/go.mod h1:y552twxCtvOD8KKQ7ESjo10KZBAE+HSj24yAuAvz9IA= github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= @@ -137,8 +141,8 @@ go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= -golang.org/x/exp v0.0.0-20250813145105-42675adae3e6 h1:SbTAbRFnd5kjQXbczszQ0hdk3ctwYf3qBNH9jIsGclE= -golang.org/x/exp v0.0.0-20250813145105-42675adae3e6/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4= +golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b h1:DXr+pvt3nC887026GRP39Ej11UATqWDmWuS99x26cD0= +golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4= golang.org/x/exp/typeparams v0.0.0-20250911091902-df9299821621 h1:Yl4H5w2RV7L/dvSHp2GerziT5K2CORgFINPaMFxWGWw= golang.org/x/exp/typeparams v0.0.0-20250911091902-df9299821621/go.mod h1:4Mzdyp/6jzw9auFDJ3OMF5qksa7UvPnzKqTVGcb04ms= golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= diff --git a/internal/cmd/proxy.go b/internal/cmd/proxy.go index bd035f8b..d149b356 100644 --- a/internal/cmd/proxy.go +++ b/internal/cmd/proxy.go @@ -39,7 +39,7 @@ func createProxyConfig( return nil, err } - hosts, err := handler.ReadHosts(hostsFiles) + hosts, err := handler.ReadHosts(ctx, l, hostsFiles) if err != nil { return nil, fmt.Errorf("reading hosts files: %w", err) } @@ -228,7 +228,7 @@ func initBootstrap( switch len(resolvers) { case 0: - etcHosts, hostsErr := upstream.NewDefaultHostsResolver(osutil.RootDirFS(), l) + etcHosts, hostsErr := upstream.NewDefaultHostsResolver(ctx, osutil.RootDirFS(), l) if hostsErr != nil { l.ErrorContext(ctx, "creating default hosts resolver", slogutil.KeyError, hostsErr) @@ -268,7 +268,11 @@ func (conf *configuration) initEDNS( } // initBogusNXDomain inits BogusNXDomain structure. -func (conf *configuration) initBogusNXDomain(ctx context.Context, l *slog.Logger, config *proxy.Config) { +func (conf *configuration) initBogusNXDomain( + ctx context.Context, + l *slog.Logger, + config *proxy.Config, +) { if len(conf.BogusNXDomain) == 0 { return } @@ -507,7 +511,10 @@ func loadServersList(sources []string) []string { // hostsFiles returns the list of hosts files to resolve from. It's empty if // resolving from hosts files is disabled. -func (conf *configuration) hostsFiles(ctx context.Context, l *slog.Logger) (paths []string, err error) { +func (conf *configuration) hostsFiles( + ctx context.Context, + l *slog.Logger, +) (paths []string, err error) { if !conf.HostsFileEnabled { l.DebugContext(ctx, "hosts files are disabled") diff --git a/internal/handler/default_internal_test.go b/internal/handler/default_internal_test.go index 94d8f401..af289990 100644 --- a/internal/handler/default_internal_test.go +++ b/internal/handler/default_internal_test.go @@ -20,6 +20,9 @@ import ( "github.com/stretchr/testify/require" ) +// testLogger is a common logger for tests. +var testLogger = slogutil.NewDiscardLogger() + // TODO(e.burkov): Remove when [hostsfile.DefaultStorage] stops using [log]. func TestMain(m *testing.M) { testutil.DiscardLogOutput(m) @@ -87,7 +90,8 @@ func TestDefault_resolveFromHosts(t *testing.T) { absPath, err := filepath.Abs(path.Join("testdata", t.Name(), "hosts")) require.NoError(t, err) - strg, err := ReadHosts([]string{absPath, relPath}) + ctx := testutil.ContextWithTimeout(t, defaultTimeout) + strg, err := ReadHosts(ctx, testLogger, []string{absPath, relPath}) require.NoError(t, err) hdlr := NewDefault(&DefaultConfig{ @@ -185,7 +189,6 @@ func TestDefault_resolveFromHosts(t *testing.T) { t.Run(tc.name, func(t *testing.T) { t.Parallel() - ctx := testutil.ContextWithTimeout(t, defaultTimeout) resp := hdlr.resolveFromHosts(ctx, tc.req) if tc.wantAns == nil { assert.Nil(t, resp) diff --git a/internal/handler/hosts.go b/internal/handler/hosts.go index 6b4f4140..8170629b 100644 --- a/internal/handler/hosts.go +++ b/internal/handler/hosts.go @@ -3,6 +3,7 @@ package handler import ( "context" "fmt" + "log/slog" "net/netip" "os" "slices" @@ -35,13 +36,19 @@ func (emptyStorage) ByName(_ string) (addrs []netip.Addr) { // ReadHosts reads the hosts files from the file system and returns a storage // with parsed records. strg is always usable even if an error occurred. -func ReadHosts(paths []string) (strg hostsfile.Storage, err error) { +func ReadHosts( + ctx context.Context, + l *slog.Logger, + paths []string, +) (strg hostsfile.Storage, err error) { // Don't check the error since it may only appear when any readers used. - defaultStrg, _ := hostsfile.NewDefaultStorage() + defaultStrg, _ := hostsfile.NewDefaultStorage(ctx, &hostsfile.DefaultStorageConfig{ + Logger: l, + }) var errs []error for _, path := range paths { - err = readHostsFile(defaultStrg, path) + err = readHostsFile(ctx, defaultStrg, path) if err != nil { // Don't wrap the error since it's informative enough as is. errs = append(errs, err) @@ -64,7 +71,7 @@ func ReadHosts(paths []string) (strg hostsfile.Storage, err error) { } // readHostsFile reads the hosts file at path and parses it into strg. -func readHostsFile(strg *hostsfile.DefaultStorage, path string) (err error) { +func readHostsFile(ctx context.Context, strg *hostsfile.DefaultStorage, path string) (err error) { // #nosec G304 -- Trust the file path from the configuration file. f, err := os.Open(path) if err != nil { @@ -74,7 +81,7 @@ func readHostsFile(strg *hostsfile.DefaultStorage, path string) (err error) { defer func() { err = errors.WithDeferred(err, f.Close()) }() - err = hostsfile.Parse(strg, f, nil) + err = hostsfile.Parse(ctx, strg, f, nil) if err != nil { return fmt.Errorf("parsing hosts file %q: %w", path, err) } diff --git a/upstream/dnscrypt_internal_test.go b/upstream/dnscrypt_internal_test.go index ac6b83c6..610a969c 100644 --- a/upstream/dnscrypt_internal_test.go +++ b/upstream/dnscrypt_internal_test.go @@ -10,7 +10,6 @@ import ( "time" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/testutil" "github.com/ameshkov/dnscrypt/v2" @@ -45,7 +44,7 @@ func startTestDNSCryptServer( ProviderName: rc.ProviderName, ResolverCert: cert, Handler: h, - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, } testutil.CleanupAndRequireSuccess(tb, func() (err error) { ctx, cancel := context.WithTimeout(context.Background(), timeout) @@ -95,7 +94,7 @@ func TestUpstreamDNSCrypt(t *testing.T) { // AdGuard DNS (DNSCrypt) address := "sdns://AQMAAAAAAAAAETk0LjE0MC4xNC4xNDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20" u, err := AddressToUpstream(address, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Timeout: dialTimeout, }) require.NoError(t, err) @@ -141,7 +140,7 @@ func TestDNSCrypt_Exchange_truncated(t *testing.T) { srvStamp := startTestDNSCryptServer(t, rc, h) u, err := AddressToUpstream(srvStamp.String(), &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Timeout: timeout, }) require.NoError(t, err) @@ -173,7 +172,7 @@ func TestDNSCrypt_Exchange_deadline(t *testing.T) { // Use a shorter timeout to speed up the test. u, err := AddressToUpstream(srvStamp.String(), &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Timeout: 100 * time.Millisecond, }) require.NoError(t, err) @@ -204,7 +203,7 @@ func TestDNSCrypt_Exchange_dialFail(t *testing.T) { // Use a shorter timeout to speed up the test. u, err = AddressToUpstream(srvStamp.String(), &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Timeout: 100 * time.Millisecond, }) require.NoError(t, err) @@ -227,7 +226,7 @@ func TestDNSCrypt_Exchange_dialFail(t *testing.T) { // Use a shorter timeout to speed up the test. u, err = AddressToUpstream(srvStamp.String(), &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Timeout: 100 * time.Millisecond, VerifyDNSCryptCertificate: func(cert *dnscrypt.Cert) (err error) { return validationErr diff --git a/upstream/doh_internal_test.go b/upstream/doh_internal_test.go index 90f376f2..1b6bd8bc 100644 --- a/upstream/doh_internal_test.go +++ b/upstream/doh_internal_test.go @@ -15,7 +15,6 @@ import ( "testing" "time" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/miekg/dns" "github.com/quic-go/quic-go" @@ -77,7 +76,7 @@ func TestUpstreamDoH(t *testing.T) { var lastState tls.ConnectionState opts := &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, InsecureSkipVerify: true, HTTPVersions: tc.httpVersions, VerifyConnection: func(state tls.ConnectionState) (err error) { @@ -186,7 +185,7 @@ func TestUpstreamDoH_raceReconnect(t *testing.T) { // race test. address := fmt.Sprintf("https://%s/dns-query", srv.addr) opts := &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, InsecureSkipVerify: true, HTTPVersions: tc.httpVersions, Timeout: timeout, @@ -232,7 +231,7 @@ func TestUpstreamDoH_serverRestart(t *testing.T) { var err error u, err = AddressToUpstream(upsAddr, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, InsecureSkipVerify: true, HTTPVersions: tc.httpVersions, Timeout: 100 * time.Millisecond, @@ -281,7 +280,7 @@ func TestUpstreamDoH_0RTT(t *testing.T) { tracer := &quicTracer{} address := fmt.Sprintf("h3://%s/dns-query", srv.addr) u, err := AddressToUpstream(address, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, InsecureSkipVerify: true, QUICTracer: tracer.TracerForConnection, }) diff --git a/upstream/doq_internal_test.go b/upstream/doq_internal_test.go index 978d9741..42ff7d39 100644 --- a/upstream/doq_internal_test.go +++ b/upstream/doq_internal_test.go @@ -33,7 +33,7 @@ func TestUpstreamDoQ(t *testing.T) { address := fmt.Sprintf("quic://%s", srv.addr) var lastState tls.ConnectionState opts := &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, VerifyConnection: func(state tls.ConnectionState) error { lastState = state @@ -89,7 +89,7 @@ func TestUpstream_Exchange_quicServerCloseConn(t *testing.T) { // Create a DNS-over-QUIC upstream. address := fmt.Sprintf("quic://%s", srv.addr) u, err := AddressToUpstream(address, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, RootCAs: rootCAs, }) @@ -154,7 +154,7 @@ func TestUpstreamDoQ_serverRestart(t *testing.T) { u, err = AddressToUpstream( upsStr, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, RootCAs: rootCAs, Timeout: 100 * time.Millisecond, }, @@ -191,7 +191,7 @@ func TestUpstreamDoQ_0RTT(t *testing.T) { tracer := &quicTracer{} address := fmt.Sprintf("quic://%s", srv.addr) u, err := AddressToUpstream(address, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, QUICTracer: tracer.TracerForConnection, RootCAs: rootCAs, }) @@ -414,7 +414,7 @@ func startDoQServer(t *testing.T, tlsConf *tls.Config, port int) (s *testDoQServ listener: listen, // TODO(d.kolyshev): Add a concurrent safe [slog.Handler] wrapper for // [testing.TB] log function. - logger: slogutil.NewDiscardLogger(), + logger: testLogger, conns: map[*quic.Conn]struct{}{}, connsMu: &sync.Mutex{}, } diff --git a/upstream/dot_internal_test.go b/upstream/dot_internal_test.go index 4e742d48..d2ff773e 100644 --- a/upstream/dot_internal_test.go +++ b/upstream/dot_internal_test.go @@ -11,7 +11,6 @@ import ( "testing" "time" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" @@ -31,7 +30,7 @@ func TestUpstream_dnsOverTLS(t *testing.T) { // Create a DoT upstream that we'll be testing. addr := fmt.Sprintf("tls://127.0.0.1:%d", srv.port) u, err := AddressToUpstream(addr, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, InsecureSkipVerify: true, }) require.NoError(t, err) @@ -58,7 +57,7 @@ func TestUpstream_dnsOverTLS_race(t *testing.T) { // Creating a DoT upstream that we will be testing. addr := fmt.Sprintf("tls://127.0.0.1:%d", srv.port) u, err := AddressToUpstream(addr, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, InsecureSkipVerify: true, }) require.NoError(t, err) @@ -101,7 +100,7 @@ func TestUpstream_dnsOverTLS_poolReconnect(t *testing.T) { Host: srv.srv.Listener.Addr().String(), }).String() u, err := AddressToUpstream(addr, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, InsecureSkipVerify: true, VerifyConnection: func(state tls.ConnectionState) error { lastState = state @@ -150,7 +149,7 @@ func TestUpstream_dnsOverTLS_poolDeadline(t *testing.T) { Host: srv.srv.Listener.Addr().String(), }).String() u, err := AddressToUpstream(addr, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, InsecureSkipVerify: true, }) require.NoError(t, err) @@ -277,7 +276,7 @@ func BenchmarkDoTUpstream(b *testing.B) { }).String() u, err := AddressToUpstream(addr, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, InsecureSkipVerify: true, }) require.NoError(b, err) diff --git a/upstream/hostsresolver.go b/upstream/hostsresolver.go index cee81db9..2300e341 100644 --- a/upstream/hostsresolver.go +++ b/upstream/hostsresolver.go @@ -30,7 +30,11 @@ func NewHostsResolver(hosts hostsfile.Storage) (hr *HostsResolver) { // provided by the [hostsfile.DefaultHostsPaths] and read from rootFSys. In // case the file by any default path doesn't exist it adds a log debug record. // If l is nil, [slog.Default] is used. -func NewDefaultHostsResolver(rootFSys fs.FS, l *slog.Logger) (hr *HostsResolver, err error) { +func NewDefaultHostsResolver( + ctx context.Context, + rootFSys fs.FS, + l *slog.Logger, +) (hr *HostsResolver, err error) { if l == nil { l = slog.Default() } @@ -41,9 +45,12 @@ func NewDefaultHostsResolver(rootFSys fs.FS, l *slog.Logger) (hr *HostsResolver, } // The error is always nil here since no readers passed. - strg, _ := hostsfile.NewDefaultStorage() + strg, _ := hostsfile.NewDefaultStorage(ctx, &hostsfile.DefaultStorageConfig{ + Logger: l, + }) + for _, filename := range paths { - err = parseHostsFile(rootFSys, strg, filename, l) + err = parseHostsFile(ctx, rootFSys, strg, filename, l) if err != nil { // Don't wrap the error since it's already informative enough as is. return nil, err @@ -54,11 +61,17 @@ func NewDefaultHostsResolver(rootFSys fs.FS, l *slog.Logger) (hr *HostsResolver, } // parseHostsFile reads a single hosts file from fsys and parses it into hosts. -func parseHostsFile(fsys fs.FS, hosts hostsfile.Set, filename string, l *slog.Logger) (err error) { +func parseHostsFile( + ctx context.Context, + fsys fs.FS, + hosts hostsfile.Set, + filename string, + l *slog.Logger, +) (err error) { f, err := fsys.Open(filename) if err != nil { if errors.Is(err, fs.ErrNotExist) { - l.Debug("hosts file does not exist", "filename", filename) + l.DebugContext(ctx, "hosts file does not exist", "filename", filename) return nil } @@ -69,7 +82,7 @@ func parseHostsFile(fsys fs.FS, hosts hostsfile.Set, filename string, l *slog.Lo defer func() { err = errors.WithDeferred(err, f.Close()) }() - return hostsfile.Parse(hosts, f, nil) + return hostsfile.Parse(ctx, hosts, f, nil) } // type check diff --git a/upstream/hostsresolver_test.go b/upstream/hostsresolver_test.go index 560557f4..1ae38411 100644 --- a/upstream/hostsresolver_test.go +++ b/upstream/hostsresolver_test.go @@ -8,7 +8,6 @@ import ( "github.com/AdguardTeam/dnsproxy/upstream" "github.com/AdguardTeam/golibs/hostsfile" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -35,7 +34,8 @@ func TestHostsResolver_LookupNetIP(t *testing.T) { }, } - hr, err := upstream.NewDefaultHostsResolver(fsys, slogutil.NewDiscardLogger()) + ctx := testutil.ContextWithTimeout(t, testTimeout) + hr, err := upstream.NewDefaultHostsResolver(ctx, fsys, testLogger) require.NoError(t, err) testCases := []struct { @@ -93,7 +93,8 @@ func TestHostsResolver_LookupNetIP(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { var addrs []netip.Addr - addrs, err = hr.LookupNetIP(context.Background(), tc.net, tc.host) + ctx = testutil.ContextWithTimeout(t, testTimeout) + addrs, err = hr.LookupNetIP(ctx, tc.net, tc.host) require.NoError(t, err) assert.Equal(t, tc.wantAddrs, addrs) diff --git a/upstream/parallel_internal_test.go b/upstream/parallel_internal_test.go index d1654e74..b8a55055 100644 --- a/upstream/parallel_internal_test.go +++ b/upstream/parallel_internal_test.go @@ -6,7 +6,6 @@ import ( "testing" "time" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" @@ -24,7 +23,7 @@ func TestExchangeParallel(t *testing.T) { for _, s := range upstreamList { u, err := AddressToUpstream(s, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Timeout: timeout, }) if err != nil { diff --git a/upstream/plain_internal_test.go b/upstream/plain_internal_test.go index 021c9258..35967a40 100644 --- a/upstream/plain_internal_test.go +++ b/upstream/plain_internal_test.go @@ -9,7 +9,6 @@ import ( "time" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" @@ -29,7 +28,7 @@ func TestUpstream_plainDNS(t *testing.T) { addr := fmt.Sprintf("127.0.0.1:%d", srv.port) u, err := AddressToUpstream(addr, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }) require.NoError(t, err) testutil.CleanupAndRequireSuccess(t, u.Close) @@ -51,7 +50,7 @@ func TestUpstream_plainDNS_badID(t *testing.T) { addr := fmt.Sprintf("127.0.0.1:%d", srv.port) u, err := AddressToUpstream(addr, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, // Use a shorter timeout to speed up the test. Timeout: 100 * time.Millisecond, }) @@ -126,7 +125,7 @@ func TestUpstream_plainDNS_fallbackToTCP(t *testing.T) { addr := fmt.Sprintf("127.0.0.1:%d", srv.port) u, err := AddressToUpstream(addr, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, // Use a shorter timeout to speed up the test. Timeout: 100 * time.Millisecond, }) diff --git a/upstream/resolver_test.go b/upstream/resolver_test.go index 0263129c..d7da868e 100644 --- a/upstream/resolver_test.go +++ b/upstream/resolver_test.go @@ -10,7 +10,6 @@ import ( "github.com/AdguardTeam/dnsproxy/internal/dnsproxytest" "github.com/AdguardTeam/dnsproxy/upstream" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" @@ -49,7 +48,7 @@ func TestNewUpstreamResolver_validity(t *testing.T) { t.Parallel() withTimeoutOpt := &upstream.Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Timeout: 3 * time.Second, } diff --git a/upstream/upstream_internal_test.go b/upstream/upstream_internal_test.go index 3a34313e..ee072784 100644 --- a/upstream/upstream_internal_test.go +++ b/upstream/upstream_internal_test.go @@ -28,6 +28,9 @@ import ( "github.com/stretchr/testify/require" ) +// testLogger is common logger for tests. +var testLogger = slogutil.NewDiscardLogger() + // TODO(ameshkov): Make tests here not depend on external servers. // TODO(d.kolyshev): Remove this after quic-go has migrated to slog. @@ -52,14 +55,14 @@ func TestUpstream_bootstrapTimeout(t *testing.T) { testutil.CleanupAndRequireSuccess(t, udpListener.Close) rslv, err := NewUpstreamResolver(udpListener.LocalAddr().String(), &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Timeout: timeout, }) require.NoError(t, err) // Create an upstream that uses this faulty bootstrap. u, err := AddressToUpstream("tls://random-domain-name", &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Bootstrap: NewCachingResolver(rslv), Timeout: timeout, }) @@ -114,7 +117,7 @@ func TestUpstreams(t *testing.T) { const upsTimeout = 10 * time.Second - l := slogutil.NewDiscardLogger() + l := testLogger googleRslv, err := NewUpstreamResolver("8.8.8.8:53", &Options{ Logger: l, @@ -234,7 +237,7 @@ func TestAddressToUpstream(t *testing.T) { require.NoError(t, err) opt := &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Bootstrap: NewCachingResolver(cloudflareRslv), } @@ -385,13 +388,13 @@ func TestUpstreamDoTBootstrap(t *testing.T) { for _, tc := range upstreams { t.Run(tc.address, func(t *testing.T) { rslv, err := NewUpstreamResolver(tc.bootstrap, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Timeout: timeout, }) require.NoError(t, err) u, err := AddressToUpstream(tc.address, &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Bootstrap: NewCachingResolver(rslv), Timeout: timeout, }) @@ -432,7 +435,7 @@ func TestUpstreamsInvalidBootstrap(t *testing.T) { bootstrap: []string{"1.2.3.4:55", "8.8.8.8"}, }} - l := slogutil.NewDiscardLogger() + l := testLogger for _, tc := range upstreams { t.Run(tc.address, func(t *testing.T) { @@ -519,7 +522,7 @@ func TestAddressToUpstream_StaticResolver(t *testing.T) { t.Parallel() opts := &Options{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, Bootstrap: tc.rslv, Timeout: timeout, InsecureSkipVerify: true, diff --git a/upstream/upstream_test.go b/upstream/upstream_test.go new file mode 100644 index 00000000..e72242f3 --- /dev/null +++ b/upstream/upstream_test.go @@ -0,0 +1,13 @@ +package upstream_test + +import ( + "time" + + "github.com/AdguardTeam/golibs/logutil/slogutil" +) + +// testTimeout is common timeout for tests. +const testTimeout = 1 * time.Second + +// testLogger is common logger for tests. +var testLogger = slogutil.NewDiscardLogger()