mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-01 06:17:56 +08:00
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.
58 lines
1.4 KiB
Go
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)
|
|
}
|