1
0
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:
W. Trevor King
2015-05-16 09:33:22 -07:00
parent e4447b3c96
commit 1e6594d087
3 changed files with 17 additions and 3 deletions

View File

@ -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 {

View File

@ -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
}

View File

@ -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),
},