mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-21 03:28:56 +08:00
namesys/dns: Pluggable lookupTXT field
So we can attach a mock lookup function for testing.
This commit is contained in:
@ -56,7 +56,7 @@ The resolver will give:
|
||||
|
||||
recursive, _, _ := req.Option("recursive").Bool()
|
||||
name := req.Arguments()[0]
|
||||
var resolver namesys.DNSResolver
|
||||
resolver := namesys.NewDNSResolver()
|
||||
|
||||
depth := 1
|
||||
if recursive {
|
||||
|
@ -11,12 +11,26 @@ import (
|
||||
path "github.com/ipfs/go-ipfs/path"
|
||||
)
|
||||
|
||||
type LookupTXTFunc func(name string) (txt []string, err error)
|
||||
|
||||
// DNSResolver implements a Resolver on DNS domains
|
||||
type DNSResolver struct {
|
||||
lookupTXT LookupTXTFunc
|
||||
// TODO: maybe some sort of caching?
|
||||
// cache would need a timeout
|
||||
}
|
||||
|
||||
// NewDNSResolver constructs a name resolver using DNS TXT records.
|
||||
func NewDNSResolver() Resolver {
|
||||
return &DNSResolver{lookupTXT: net.LookupTXT}
|
||||
}
|
||||
|
||||
// newDNSResolver constructs a name resolver using DNS TXT records,
|
||||
// returning a resolver instead of NewDNSResolver's Resolver.
|
||||
func newDNSResolver() resolver {
|
||||
return &DNSResolver{lookupTXT: net.LookupTXT}
|
||||
}
|
||||
|
||||
// Resolve implements Resolver.
|
||||
func (r *DNSResolver) Resolve(ctx context.Context, name string) (path.Path, error) {
|
||||
return r.ResolveN(ctx, name, DefaultDepthLimit)
|
||||
@ -36,7 +50,7 @@ func (r *DNSResolver) resolveOnce(ctx context.Context, name string) (path.Path,
|
||||
}
|
||||
|
||||
log.Infof("DNSResolver resolving %s", name)
|
||||
txt, err := net.LookupTXT(name)
|
||||
txt, err := r.lookupTXT(name)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ type mpns struct {
|
||||
func NewNameSystem(r routing.IpfsRouting) NameSystem {
|
||||
return &mpns{
|
||||
resolvers: map[string]resolver{
|
||||
"dns": new(DNSResolver),
|
||||
"dns": newDNSResolver(),
|
||||
"proquint": new(ProquintResolver),
|
||||
"dht": newRoutingResolver(r),
|
||||
},
|
||||
|
Reference in New Issue
Block a user