kubo/core/node/dns_test.go
Marcin Rataj 541bd657a6 feat(dns): add DNS.OverrideSystem config to apply resolvers globally
adds DNS.OverrideSystem flag (enabled by default) that extends
DNS.Resolvers to affect all DNS lookups in the daemon process,
not just DNSLink and Multiaddr resolution.

this ensures AutoTLS ACME DNS-01 challenge verification, HTTP retrieval,
and third-party library code all respect DNS.Resolvers config.

implementation creates a net.Resolver bridge that intercepts DNS wire
protocol queries, parses them with miekg/dns, calls madns.Resolver,
and returns properly formatted DNS responses.

note: this is an exploration of daemon-wide DNS configuration without
refactoring boxo/gateway. a cleaner future approach may create native
net.Resolver from config first, then convert to madns only for go-libp2p.
2026-01-12 21:26:29 +01:00

58 lines
1.4 KiB
Go

package node
import (
"context"
"net"
"testing"
madns "github.com/multiformats/go-multiaddr-dns"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
// mockResolver implements madns.BasicResolver for testing
type mockResolver struct {
txtRecords map[string][]string
ipRecords map[string][]net.IPAddr
}
func (m *mockResolver) LookupIPAddr(ctx context.Context, name string) ([]net.IPAddr, error) {
if m.ipRecords != nil {
return m.ipRecords[name], nil
}
return nil, nil
}
func (m *mockResolver) LookupTXT(ctx context.Context, name string) ([]string, error) {
if m.txtRecords != nil {
return m.txtRecords[name], nil
}
return nil, nil
}
func TestOverrideDefaultResolver(t *testing.T) {
// Save original resolver to restore after test
originalResolver := net.DefaultResolver
t.Cleanup(func() {
net.DefaultResolver = originalResolver
})
// Create mock with known records
mock := &mockResolver{
txtRecords: map[string][]string{
"test.override.example": {"override-test-value"},
},
}
madnsResolver, err := madns.NewResolver(madns.WithDefaultResolver(mock))
require.NoError(t, err)
// Override the default resolver
OverrideDefaultResolver(madnsResolver)
// Verify net.DefaultResolver now uses our mock
records, err := net.DefaultResolver.LookupTXT(t.Context(), "test.override.example")
require.NoError(t, err)
assert.Equal(t, []string{"override-test-value"}, records)
}