namesys/dns: Pluggable lookupTXT field
So we can attach a mock lookup function for testing.
W. Trevor King committed
May 16, 2015 at 09:33 UTC
1e6594d087bc47e278d91fb1b41c077f298064d7
3 files changed
+17
-3
core/commands/dns.go
+1
-1
@@ -56,7 +56,7 @@ The resolver will give:
56
57
recursive, _, _ := req.Option("recursive").Bool()
58
name := req.Arguments()[0]
59
- var resolver namesys.DNSResolver
59
+ resolver := namesys.NewDNSResolver()
60
61
depth := 1
62
if recursive {
namesys/dns.go
+15
-1
@@ -11,12 +11,26 @@ import (
11
path "github.com/ipfs/go-ipfs/path"
12
)
13
14
+type LookupTXTFunc func(name string) (txt []string, err error)
15
+
16
// DNSResolver implements a Resolver on DNS domains
17
type DNSResolver struct {
18
+ lookupTXT LookupTXTFunc
19
// TODO: maybe some sort of caching?
20
// cache would need a timeout
21
}
22
23
+// NewDNSResolver constructs a name resolver using DNS TXT records.
24
+func NewDNSResolver() Resolver {
25
+ return &DNSResolver{lookupTXT: net.LookupTXT}
26
+}
27
+
28
+// newDNSResolver constructs a name resolver using DNS TXT records,
29
+// returning a resolver instead of NewDNSResolver's Resolver.
30
+func newDNSResolver() resolver {
31
+ return &DNSResolver{lookupTXT: net.LookupTXT}
32
+}
33
+
34
// Resolve implements Resolver.
35
func (r *DNSResolver) Resolve(ctx context.Context, name string) (path.Path, error) {
36
return r.ResolveN(ctx, name, DefaultDepthLimit)
@@ -36,7 +50,7 @@ func (r *DNSResolver) resolveOnce(ctx context.Context, name string) (path.Path,
50
}
51
52
log.Infof("DNSResolver resolving %s", name)
39
- txt, err := net.LookupTXT(name)
53
+ txt, err := r.lookupTXT(name)
54
if err != nil {
55
return "", err
56
}
namesys/namesys.go
+1
-1
@@ -27,7 +27,7 @@ type mpns struct {
27
func NewNameSystem(r routing.IpfsRouting) NameSystem {
28
return &mpns{
29
resolvers: map[string]resolver{
30
- "dns": new(DNSResolver),
30
+ "dns": newDNSResolver(),
31
"proquint": new(ProquintResolver),
32
"dht": newRoutingResolver(r),
33
},